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 = MjSendActivityModel::detail($data['activity_id']); if ( $data['status'] == 1 && $this->checkGoodsValid($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 = MjSendActivityModel::detail($data['activity_id']); if ($data['audit_status'] == 1 && $this->checkGoodsValid($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->checkGoodsValid($data))return 3; $data['code'] = strval(mt_rand(100000000,999999999)); try { $this->transaction(function () use ($data) { $this->save($data); // 选择的优惠券存入 $couponActivityCouponModel = new MjSendGoodsModel(); $couponActivityCouponModel->add($this->id,$data['goods_ids']??[]); //赠品写入 $giftGoodsModel = new MjSendGiftGoodsModel(); $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['mj_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 MjSendActivityAction(); $refuseModel->save($refuse); } /** * 更新记录 * @param array $data * @return bool */ public function updOne(array $data) { if ($this->checkGoodsValid($data))return 3; try { $this->transaction(function () use ($data) { //$data['audit_status'] = 0; $this->save($data); //写入行为记录 // 选择的优惠券存入 $couponActivityCouponModel = new MjSendGoodsModel(); $couponActivityCouponModel->add($data['id'],$data['goods_ids']??[]); //赠品写入 $giftGoodsModel = new MjSendGiftGoodsModel(); $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 false */ public function checkGoodsValid($data){ $now = date('Y-m-d H:i:s'); $filter[] = ['start_time','<',$now]; $filter[] = ['end_time','>',$now]; $filter[] = ['audit_status','=',1]; $filter[] = ['status','=',1]; $goodsId = $data['goods_ids'][0]['goods_id']??0; if (!$goodsId)return false; $m = self::alias('ma')->where('ma.status',1) ->leftJoin('mj_send_goods ag','ag.mj_send_activity_id = ma.id'); if (!empty($data['id'])){ $m->where('ma.id','<>',$data['id']); } return $m->where('ag.goods_id','=',$goodsId) ->where(function ($s) use ($data){ $s->whereOr(function($query) use ($data){ $query->whereBetweenTime('ma.start_time', $data['start_time'], $data['end_time']); })->whereOr(function ($query) use ($data){ $query->whereBetweenTime('ma.end_time',$data['start_time'],$data['end_time']); })->whereOr(function ($query) use ($data){ $query->where('ma.start_time','<',$data['start_time'])->where('end_time','>',$data['end_time']); }); })->find(); } }