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']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); // 执行查询 return $this->alias('group_buy_lb_activity')->with(['goodsExcept']) ->leftJoin('group_buy_lb_goods gg','group_buy_lb_activity.id=gg.group_buy_lb_activity_id') ->leftJoin('goods goods','gg.goods_id=goods.goods_id') ->where($filter) ->field('group_buy_lb_activity.*') ->order(['audit_status'=>'asc','group_buy_lb_activity.create_time'=>'desc']) ->paginate($listRows)->each(function (&$item){ //成团数 $item['group_cnt'] = GroupBuyLbJoin::countActJoin($item['id']); //商品销量 $item['sale_sum'] = GroupBuyLbHelp::sumActGoodsNum($item['id']); }); } /** * 检索查询条件 * @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']}%"]; !empty($params['goods_name']) && $filter[] = ['goods.goods_name', 'like', "%{$params['goods_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]; $filter[] = ['group_buy_lb_activity.status','=',1]; break; case 2://未开始 $filter[] = ['start_time','>',date('Y-m-d H:i:s')]; $filter[] = ['group_buy_lb_activity.status','=',1]; break; case 3://已结束 $filter[] = ['end_time','<',date('Y-m-d H:i:s')]; $filter[] = ['group_buy_lb_activity.status','=',1]; break; case 4://已作废 $filter[] = ['group_buy_lb_activity.status','=',0]; break; } } // 实例化新查询对象 return $filter; } /** * 启用 禁用,0:作废,1:启用 * @param array $data * @return bool */ public function status(array $data): bool { $act = GroupBuyLbActivityModel::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 = GroupBuyLbActivityModel::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) { //检查是否已经有有效活动时间重叠了 $flag = $this->checkGoodsValid($data); if ($flag){ return 3;} $data['code'] = strval(mt_rand(100000000,999999999)); $data['status'] = 1; try { $this->transaction(function () use ($data) { $this->save($data); // 选择的拼团商品 $groupBuyLbGoodsModel = new GroupBuyLbGoodsModel(); $groupBuyLbGoodsModel->add($this->id,$data['goods']??[]); $groupBuyLbCouponModel = new GroupBuyLbCouponModel(); $groupBuyLbCouponModel->add($this->id,$data['coupons']??[]); //写入行为记录 //$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; case 3:$behavior = '再次编辑'; break; } $refuse['group_buy_lb_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 GroupBuyLbActivityActionModel(); $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) { $this->save($data); // 写入商品信息 $couponActivityCouponModel = new GroupBuyLbGoodsModel(); $couponActivityCouponModel->add($this->id,$data['goods']??[]); $groupBuyLbCouponModel = new GroupBuyLbCouponModel(); $groupBuyLbCouponModel->add($this->id,$data['coupons']??[]); //写入行为记录 $this->addAction($this->id,$data); }); }catch (\Exception $e){ Log::error(__METHOD__.'::'.$e->getMessage()); return 2; } return 1; } /** * 更新记录 * @param array $data * @return bool */ public function editOne(array $data) { try { $this->transaction(function () use ($data) { $this->save($data); $data['audit_status'] = 3; //写入行为记录 $this->addAction($this->id,$data); }); }catch (\Exception $e){ Log::error(__METHOD__.'::'.$e->getMessage()); return 2; } return 1; } //当前的进行中的活动id public function getActivityGoodIdArray($activity_id =0){ $filter[] = ['start_time','<=',date('Y-m-d H:i:s')]; $filter[] = ['end_time','>=',date('Y-m-d H:i:s')]; $filter[] = ['status','=',1]; // $filter[] = ['audit_status_zg','=',10]; // $filter[] = ['is_up','=',1]; $id_array = $this->where($filter)->column("id"); if($activity_id>0){ $id_array = array_diff($id_array,[$activity_id]); } $goods_id_array = GroupBuyLbGoodsModel::where("group_buy_lb_activity_id","in",$id_array)->column("goods_id"); return $goods_id_array; } /** * 校验同款商品不能和正在有效期的活动时间交叉 * @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'][0]['goods_id']??0; $m = self::alias('ma')->field('ag.goods_id,ag.group_buy_lb_activity_id') ->where('ma.status',1) ->leftJoin('group_buy_lb_goods ag','ag.group_buy_lb_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(); } //操作关联 public function relcoupon(){ return $this->hasMany(GroupBuyLbCouponModel::class,'group_buy_lb_activity_id','id'); } }