date('Y-m-d H:i:s')){ return ['code'=>2,'text'=>'未开始']; } if($data['start_time']<=date('Y-m-d H:i:s')&&$data['end_time']>=date('Y-m-d H:i:s')){ return ['code'=>1,'text'=>'进行中']; } if($data['end_time']3,'text'=>'已结束']; } return ['code'=>1,'text'=>'进行中']; } /** * 获取列表 * @param array $param 查询条件 * @param int $listRows 分页数量 * @return mixed * @throws \think\db\exception\DbException */ public function getList(array $param = [], int $listRows = 15) { // 检索查询条件 $filter = $this->getQueryFilter($param); // 执行查询 $list = $this->with([]) ->where($filter) ->order(['audit_status'=>'asc','create_time'=>'desc']) ->paginate($listRows); return $list; } /** * 检索查询条件 * @param array $param * @return \think\db\BaseQuery */ private function getQueryFilter(array $param) { // 商品列表获取条件 $params = $this->setQueryDefaultValue($param, [ // 'is_delete' => 0, ]); // 筛选条件 $filter = []; // 活动起止时间 if (!empty($params['betweenTime'])) { $times = between_date($params['betweenTime']); $filter[] = ['start_time', '>=', $times['start_date']]; $filter[] = ['end_time', '<=', $times['end_date']]; } // 活动名称 !empty($params['name']) && $filter[] = ['name', 'like', "%{$params['name']}%"]; // 审核状态 0待审核 1审核通过 2审核不通过 if(isset($params['auditStatus'])&&$params['auditStatus']>-1){ $filter[] = ['audit_status','=',$params['auditStatus']]; } //启用状态0禁用 1启用 if(isset($params['status'])&&$params['status']>-1){ $filter[] = ['status','=',$params['status']]; } //活动状态 if(isset($params['statusText'])&&$params['statusText']>0){ switch ($params['statusText']){ case 1://进行中 $filter[] = ['start_time','<=',date('Y-m-d H:i:s')]; $filter[] = ['end_time','>=',date('Y-m-d H:i:s')]; $filter[] = ['audit_status','=',1]; break; case 2://未开始 $filter[] = ['start_time','>',date('Y-m-d H:i:s')]; break; case 3://已结束 $filter[] = ['end_time','<',date('Y-m-d H:i:s')]; break; } } // 实例化新查询对象 return $filter; } /** * 启用 禁用 * @param array $data * @return bool */ public function status(array $data): bool { $act = FullSendActivityModel::detail($data['activity_id']); if ( $data['status'] == 1 && $this->checkTimeRange1($act))return false; $this->transaction(function () use ($data) { $this->save($data); }); return true; } /** * 审核 * @param array $data * @return bool */ public function audit(array $data): bool { $act = FullSendActivityModel::detail($data['activity_id']); if ($data['audit_status'] == 1 && $this->checkTimeRange1($act))return false; $this->transaction(function () use ($data) { $this->save($data); $this->addAction($data['activity_id'],$data); }); return true; } /** * 修改记录 * @param array $data * @return int */ public function addOne(array $data) { //检查是否已经有有效活动时间重叠了 if ($this->checkTimeRange($data))return 3; $data['code'] =strval(mt_rand(100000000,999999999)); try { $this->transaction(function () use ($data) { $this->save($data); // 选择的优惠券存入 $couponActivityCouponModel = new FullSendGoodsModel(); $couponActivityCouponModel->add($this->id, $data['is_except'],$data['goods_ids']??[]); //赠品写入 $giftGoodsModel = new FullSendGiftGoodsModel(); $giftGoodsModel->add($this->id,$data['gift_ids']); //写入行为记录 //$data['audit_status'] = 0; $this->addAction($this->id,$data); }); }catch (\Exception $e){ Log::error(__METHOD__.'::'.$e->getMessage()); return 2; } return 1; } //添加行为记录 public function addAction($coupon_activity_id,$data){ $behavior = ''; switch ($data['audit_status']){ case 0:$behavior = '提交审核'; break; case 1:$behavior = '同意并发布活动'; break; case 2:$behavior = '不同意'; break; } $refuse['full_send_activity_id'] = $coupon_activity_id; $refuse['audit_status'] = $data['audit_status']; $refuse['audit_reason'] = $data['audit_reason']??''; $refuse['behavior'] = $behavior; $refuse['audit_time'] = date("Y-m-d H:i:s",time()); $refuse['audit_user'] = $data['audit_user']; $refuse['audit_admin_id'] = $data['audit_admin_id']; $refuseModel = new FullSendActivityAction(); $refuseModel->save($refuse); } /** * 更新记录 * @param array $data * @return bool */ public function updOne(array $data) { if ($this->checkTimeRange($data))return 3; try { $this->transaction(function () use ($data) { //$data['audit_status'] = 0; $this->save($data); //写入行为记录 // 选择的优惠券存入 $couponActivityCouponModel = new FullSendGoodsModel(); $couponActivityCouponModel->add($data['id'], $data['is_except'],$data['goods_ids']??[]); //赠品写入 $giftGoodsModel = new FullSendGiftGoodsModel(); $giftGoodsModel->add($data['id'],$data['gift_ids']); //写入行为记录 $this->addAction($this->id,$data); }); }catch (\Exception $e){ Log::error(__METHOD__.'::'.$e->getMessage()); return 2; } return 1; } /** * 时间和现有活动是否重叠 * @param $data * @return FullSendActivity|array|\think\Model|null * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function checkTimeRange($data){ return self::where('status',1)->where(function ($s) use ($data){ $s->whereOr(function($query) use ($data){ $query->whereBetweenTime('start_time', $data['start_time'], $data['end_time']); })->whereOr(function ($query) use ($data){ $query->whereBetweenTime('end_time',$data['start_time'],$data['end_time']); })->whereOr(function ($query) use ($data){ $query->where('start_time','<',$data['start_time'])->where('end_time','>',$data['end_time']); }); })->find(); } public function checkTimeRange1($data){ $now = date('Y-m-d H:i:s'); //所有处于 进行中、未开始 状态,且 不是禁用状态 的活动 return self::where('id','<>',$data['id'])->where('status',1) ->where('end_time','>',$now) ->where(function ($s) use ($data){ $s->whereOr(function($query) use ($data){ $query->whereBetweenTime('start_time', $data['start_time'], $data['end_time']); })->whereOr(function ($query) use ($data){ $query->whereBetweenTime('end_time',$data['start_time'],$data['end_time']); })->whereOr(function ($query) use ($data){ $query->where('start_time','<',$data['start_time'])->where('end_time','>',$data['end_time']); }); })->find(); } }