4, 'text' => '已作废']; } if ($data['start_time'] > 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'] < date('Y-m-d H:i:s')) { return ['code' => 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 mixed */ 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 4://已作废 $filter[] = ['status', '=', 2]; break; 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 = QcMjSendActivityModel::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 = QcMjSendActivityModel::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) { try { //检查是否已经有有效活动时间重叠了 if ($this->checkGoodsValid($data)) { throw new \Exception('活动时间内存在其他进行中的全场满件赠活动'); } $data['code'] = strval(mt_rand(100000000, 999999999)); $this->transaction(function () use ($data) { $this->save($data); // 选择的商品存入 $goodsModel = new QcMjSendGoodsModel(); $goodsModel->add($this->id, $data['goods_ids'] ?? []); //赠品写入 $giftGoodsModel = new QcMjSendGiftGoodsModel(); $giftGoodsModel->add($this->id, $data['gift_ids']); //写入行为记录 $data['audit_status'] = 0; $this->addAction($this->id, $data); }); } catch (\Exception $e) { // dd($e->getMessage()); Log::error(__METHOD__ . '::' . $e->getMessage()); throwError($e->getMessage()); return false; } return true; } //添加行为记录 public function addAction($activity_id, $data) { $behavior = ''; switch ($data['audit_status']) { case 0: $behavior = '提交审核'; break; case 1: $behavior = '同意并发布活动'; break; case 2: $behavior = '不同意'; break; } $refuse['qc_mj_send_activity_id'] = $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 QcMjSendActivityAction(); $refuseModel->save($refuse); } /** * 更新记录 * @param array $data * @return bool */ public function updOne(array $data) { try { if ($this->checkGoodsValid($data)) { throw new \Exception('活动时间内存在其他进行中的全场满件赠活动'); } $this->transaction(function () use ($data) { $data['audit_status'] = 0; $this->save($data); //写入行为记录 $couponActivityCouponModel = new QcMjSendGoodsModel(); $couponActivityCouponModel->add($data['id'], $data['goods_ids'] ?? []); //赠品写入 $giftGoodsModel = new QcMjSendGiftGoodsModel(); $giftGoodsModel->add($data['id'], $data['gift_ids']); //写入行为记录 $this->addAction($this->id, $data); }); } catch (\Exception $e) { Log::error(__METHOD__ . '::' . $e->getMessage()); throwError($e->getMessage()); return false; } return true; } /** * 校验同款商品不能和正在有效期的活动时间交叉 * @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]??0; // if (!$goodsId)return false; $m = self::alias('ma')->where('ma.status', 1) ->leftJoin('qc_mj_send_goods ag', 'ag.qc_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(); } }