<?php
|
|
namespace app\branch\model\activity;
|
|
use app\common\model\branch\Activity as ActivityModel;
|
use app\common\model\branch\ActivityProductPrice as ActivityProductPriceModel;
|
|
/**
|
* 活动模型
|
*/
|
class Activity extends ActivityModel
|
{
|
/**
|
* 获取列表
|
*/
|
public function getList($params, $branch_id)
|
{
|
return $this->with(['image', 'category'])
|
->where('branch_id', '=', $branch_id)
|
->where('is_delete', '=', 0)
|
->order(['sort' => 'desc', 'create_time' => 'desc'])
|
->paginate($params);
|
|
}
|
|
/**
|
* 获取审核列表(审核所有活动)
|
*/
|
public function getAuditList($params)
|
{
|
$model = $this->with(['image', 'category', 'branch'])
|
->where('is_delete', '=', 0);
|
|
// 按审核状态筛选
|
if (isset($params['audit_status']) && $params['audit_status'] !== '') {
|
$model = $model->where('audit_status', '=', $params['audit_status']);
|
}
|
|
return $model->order(['sort' => 'desc', 'create_time' => 'desc'])
|
->paginate($params);
|
}
|
|
/**
|
* 审核活动
|
*/
|
public function audit($activity_id, $data)
|
{
|
$model = ActivityModel::detail($activity_id);
|
if (!$model) {
|
$this->error = '活动不存在';
|
return false;
|
}
|
|
$updateData = [
|
'audit_status' => $data['audit_status'],
|
'audit_time' => time(),
|
'audit_remark' => $data['audit_remark'] ?? ''
|
];
|
|
return $model->save($updateData);
|
}
|
|
/**
|
* 新增记录
|
*/
|
public function add($data, $branch_id)
|
{
|
$model = new ActivityModel();
|
if ($data['is_visit'] == 1) {
|
$visitCheck = $this->checkVisitLimit($data['visit_supplier_id'], $data['visit_supplier_name']);
|
if ($visitCheck) {
|
$this->error = '该企业30天内已被走访,还需等待' . $visitCheck['remaining_days'] . '天才可以重新走访';
|
return false;
|
}
|
}
|
$product = new ActivityProductPriceModel();
|
$data['app_id'] = self::$app_id;
|
$data['branch_id'] = $branch_id;
|
// 默认审核状态为待审核
|
$data['audit_status'] = 0;
|
//报名时间
|
$data['register_start_time'] = strtotime($data['reg_date'][0]);
|
$data['register_end_time'] = strtotime($data['reg_date'][1]);
|
//活动时间
|
$data['activity_start_time'] = strtotime($data['act_date'][0]);
|
$data['activity_end_time'] = strtotime($data['act_date'][1]);
|
// 格式化坐标信息
|
$coordinate = explode(',', $data['coordinate']);
|
$data['latitude'] = $coordinate[0];
|
$data['longitude'] = $coordinate[1];
|
$product_list = $data['product_list']; // 促销商品
|
$model->startTrans();
|
try {
|
$res = $model->save($data);
|
if(!$res){
|
$this->rollback();
|
$this->error = '活动数据保存出错';
|
return false;
|
}
|
if ($product_list) {
|
$activity_id = $model->activity_id;
|
foreach ($product_list as &$item){
|
$item['app_id'] = $data['app_id'];
|
$item['shop_supplier_id'] = $data['visit_supplier_id'];
|
$item['activity_id'] = $activity_id;
|
}
|
unset($item);
|
$res1 = $product->saveAll($product_list);
|
if(!$res1){
|
$this->rollback();
|
$this->error = '促销商品保存出错';
|
return false;
|
}
|
}
|
// 提交事务
|
$this->commit();
|
return true;
|
} catch (\Exception $e) {
|
// 回滚事务
|
$this->rollback();
|
$this->error = $e->getMessage();
|
return false;
|
}
|
}
|
|
/**
|
* 更新记录
|
*/
|
public function edit($data)
|
{
|
$model = new ActivityModel();
|
$product = new ActivityProductPriceModel();
|
|
// 检查走访企业30天限制(编辑时排除当前活动)
|
if (!empty($data['visit_supplier_id']) && $data['is_visit'] == 1) {
|
$visitCheck = $model->checkVisitLimit($data['visit_supplier_id'], $data['visit_supplier_name'], $data['activity_id']);
|
if ($visitCheck) {
|
$this->error = '该企业30天内已被走访,还需等待' . $visitCheck['remaining_days'] . '天才可以重新走访';
|
return false;
|
}
|
}
|
//报名时间
|
$data['register_start_time'] = strtotime($data['reg_date'][0]);
|
$data['register_end_time'] = strtotime($data['reg_date'][1]);
|
//活动时间
|
$data['activity_start_time'] = strtotime($data['act_date'][0]);
|
$data['activity_end_time'] = strtotime($data['act_date'][1]);
|
// 格式化坐标信息
|
$coordinate = explode(',', $data['coordinate']);
|
$data['latitude'] = $coordinate[0];
|
$data['longitude'] = $coordinate[1];
|
$product_list = $data['product_list']; // 促销商品
|
unset($data['create_time'], $data['update_time']);
|
$model->startTrans();
|
try {
|
$res = $model->update($data, ['activity_id' => $data['activity_id']]);
|
if(!$res){
|
$this->rollback();
|
$this->error = '活动数据保存出错';
|
return false;
|
}
|
// 先软删除原有的促销商品
|
$product->where('activity_id', '=', $data['activity_id'])->update(['is_delete' => 1]);
|
if ($product_list) {
|
foreach ($product_list as $key => &$item){
|
$item['app_id'] = $data['app_id'];
|
$item['shop_supplier_id'] = $data['visit_supplier_id'];
|
$item['activity_id'] = $data['activity_id'];
|
$item['is_delete'] = 0;
|
}
|
unset($item);
|
$res1 = $product->saveAll($product_list);
|
if(!$res1){
|
$this->rollback();
|
$this->error = '商品数据保存出错';
|
return false;
|
}
|
}
|
// 提交事务
|
$this->commit();
|
return true;
|
} catch (\Exception $e) {
|
// 回滚事务
|
$this->rollback();
|
$this->error = $e->getMessage();
|
return false;
|
}
|
}
|
|
/**
|
* 软删除
|
*/
|
public function setDelete()
|
{
|
return $this->save(['is_delete' => 1]);
|
}
|
|
/**
|
* 获取活动总数量
|
*/
|
public static function getActivityTotal($where)
|
{
|
$model = new static;
|
return $model->where($where)->where('is_delete', '=', 0)->count();
|
}
|
|
/**
|
* 开启禁止
|
*/
|
public function setStatus($status)
|
{
|
// 开启事务
|
$this->startTrans();
|
try {
|
//更改分会状态
|
$this->save(['status' => $status]);
|
$this->commit();
|
return true;
|
} catch (\Exception $e) {
|
$this->error = $e->getMessage();
|
$this->rollback();
|
return false;
|
}
|
}
|
|
public function activityGroupNum($date, $branch_id)
|
{
|
$field = 'count(*) as total,from_unixtime(create_time,\'%m-%d\') as `day`';
|
if ($date == 'year') {
|
$field = 'count(*) as total,from_unixtime(create_time,\'%m\') as `day`';
|
}
|
$model = $this->field($field)
|
->where('is_delete', '=', 0)
|
->when($date, function ($query, $date) {
|
getModelTime($query, $date, 'create_time');
|
})->when($branch_id, function ($query, $branch_id) {
|
$query->where('branch_id', $branch_id);
|
});
|
return $model->order('create_time ASC')->group('day')->select();
|
}
|
}
|