123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- <?php
- namespace app\store\model\groupbuylb;
- use app\common\model\groupbuylb\GroupBuyLbActivity as GroupBuyLbActivityModel;
- use app\common\model\groupbuylb\GroupBuyLbActivityAction as GroupBuyLbActivityActionModel;
- use app\common\model\groupbuylb\GroupBuyLbGoods as GroupBuyLbGoodsModel;
- use app\common\model\groupbuylb\GroupBuyLbCoupon as GroupBuyLbCouponModel;
- use think\facade\Log;
- /**
- * 拼团活动模型
- * @package app\store\model\coupon
- */
- class GroupBuyLbActivity extends GroupBuyLbActivityModel
- {
- protected $append = ['activity_status'];
- public function getActivityStatusAttr($value,$data){
- if($data['status'] == 0 ){
- return ['code'=>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);
- // 执行查询
- 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');
- }
- }
|