255], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => '拼团商品活动id', 'mall_id' => '商城id', 'cate_id' => '拼团分类', 'goods_id' => '商品id;对应goods主表', 'start_at' => '拼团开始时间', 'end_at' => '拼团结束时间', 'effective_time' => '拼团有效时间(分钟)', 'group_size' => '成团人数', 'give_score' => '团长赠送积分', 'give_balance' => '团长赠送余额', 'virtual_group_type' => '虚拟成团类型【1全部 2拼团人数大于】', 'virtual_group_size' => '虚拟成团人数', 'gt_group_size' => '拼团人数大于N,则虚拟成团', 'goods_stock' => '拼团库存', 'limit_buy_num' => '限制购买数量', 'commander_level_limit' => '团长等级限制', 'user_level_limit' => '团员等级限制', 'is_virtual' => '是否开启虚拟成团', 'group_status' => '拼团商品状态;0未开始;1开团中;已结束2', 'status' => '状态[-1:删除;0:禁用;1启用]', 'created_at' => 'Created At', 'updated_at' => 'Update At', 'is_initiator_free' => '发起人是否免费', 'virtual_group_sub_type' => 'Virtual Group Sub Type', 'expired_auto_complete_min_num' => 'Expired Auto Complete Min Num', 'is_show_participant_nickname' => '是否显示参团人员昵称', 'is_show_virtual_avatar' => '是否显示虚拟拼团头像', 'restrict_rule_num' => '参团限制次数', 'title' => '拼团活动名称', ]; } // 关联模型 public function getGoods() { return $this->hasOne(Goods::class, ['id' => 'goods_id']); } public function getActiveGoodsAttr() { return $this->hasMany(GroupBuyActiveGoodsAttr::class, ['group_buy_active_id' => 'id'])->andWhere(['status' => [StatusEnum::ENABLED]]); } public static function setData(array $params) { $t = Yii::$app->db->beginTransaction(); try { $param = $params['group_buy_goods']; $param['mall_id'] = $params['mall_id']; $model = new self(); $model->loadDefaultValues(); if (!empty($param['start_at']))$param['start_at'] = strtotime($param['start_at']); if (!empty($param['end_at'])) $param['end_at'] = strtotime($param['end_at']); if (!$model->load($param, '')) throw new \Exception($model->getErrorMessage()); if ($model->start_at < time()) $model->group_status = GroupBuyEnum::OPEN_GROUP; if ($model->end_at < time()) $model->group_status = GroupBuyEnum::GROUP_FINISH; if($param['is_virtual']){ if($param['virtual_group_type']==1 || $param['virtual_group_type'] == 3){ $model->virtual_group_size = $param['group_size']-1; }else{ $model->virtual_group_size = $param['group_size'] - $param['gt_group_size']; } } if($params['form']['is_attr']) $model->goods_stock = array_sum(array_column($params['form']['attr'],'stock')); if (!$model->save()) throw new \Exception($model->getErrorMessage()); $params['group_buy_active_id'] = $model->id; $res = GroupBuyActiveGoodsAttr::setData($params); if ($res == false) throw new \Exception(GroupBuyActiveGoodsAttr::getStaticError()); $param['marketing_id'] = $model->id; $param['marketing_type'] = GroupBuyEnum::ADDONS_NAME; $res = GoodsMarketing::setData($param); if ($res == false) throw new \Exception(GoodsMarketing::getStaticError()); $t->commit(); return $model; } catch (\Exception $e) { $t->rollBack(); self::$static_error = $e->getMessage(); return false; } } public static function delData($params) { $t = Yii::$app->db->beginTransaction(); try { $res = GroupBuyOrder::findOne(['group_buy_active_id'=>$params['id'],'order_status'=>[GroupBuyEnum::JOINING],'status'=>StatusEnum::ENABLED]); if($res) throw new \Exception('该活动有会员参团'); $res = self::updateAll(['status' => StatusEnum::DELETE], ['mall_id' => $params['mall_id'], 'id' => $params['id']]); if ($res == false) throw new \Exception(GroupBuyActiveGoodsAttr::getStaticError()); GroupBuyActiveGoodsAttr::updateAll(['status' => StatusEnum::DELETE], ['mall_id' => $params['mall_id'], 'group_buy_active_id' => $params['id']]); $params['marketing_id'] = $params['id']; $params['marketing_type'] = GroupBuyEnum::ADDONS_NAME; $params['status'] = StatusEnum::DELETE; $res = GoodsMarketing::setData($params); if ($res == false) throw new \Exception(GoodsMarketing::getStaticError()); $t->commit(); return true; } catch (\Exception $e) { $t->rollBack(); self::$static_error = $e->getMessage(); return false; } } public static function getActiveListByDiy($mall_id,$post){ $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; $where[] = ['group_status' => [GroupBuyEnum::OPEN_GROUP]]; if (!empty($post['keyword'])) { $goods_list = Goods::lists(['where' => [['mall_id' => $mall_id], ['like', 'goods_name', trim($post['keyword']) . '%', false], ['status' => StatusEnum::ENABLED]], 'select' => 'id']); $goods_id_arr = array_column($goods_list, 'id'); $where[] = ['goods_id' => $goods_id_arr]; } $params['where'] = $where; $params['order'] = 'id DESC'; $params['with'] = ['goods' => function ($query) { $query->where(['status' => StatusEnum::ENABLED]); }]; $params['limit'] = 10; $params['select']='id,goods_id,created_at,title'; $list = GroupBuyActive::listPage($params,false,true); if(!empty($list['list'])){ foreach ($list['list'] as &$item){ $item['img'] = $item['goods']['cover_pic']; $item['sales_num'] = $item['goods']['sales_num']; $item['price'] = ''; $item['original_price'] = ''; $item['subtitle'] = ''; unset($item['goods']); unset($item['goods_id']); } } return $list; } public static function checkActive($id, $mall_id) { $active = self::findOne(['mall_id' => $mall_id, 'id' => $id]); if ($active->start_at < time()) $active->group_status = GroupBuyEnum::OPEN_GROUP; if ($active->end_at < time()) $active->group_status = GroupBuyEnum::GROUP_FINISH; $active->save(); } /** * @desc:活动列表 * @Author: hua * @Date: 2021/12/22 * @Time: 18:41 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $where * @param false $is_page * @return array|mixed|void */ public static function getActiveList($where,$is_page=false){ $params['where'] = $where; $params['order'] = 'id DESC'; $params['select'] = 'id,goods_id,start_at,end_at,group_size,total_num,group_status,title'; $params['with'] = [ 'goods' => function ($query) { $query->where(['status' => StatusEnum::ENABLED])->select('id,goods_name,cover_pic'); }, 'activeGoodsAttr' => function ($query) { $query->where(['status' => StatusEnum::ENABLED])->select('attr_id,group_buy_active_id,group_buy_price,goods_id') ->with(['goodsAttr']); } ]; $function = function(&$item){ $item['group_buy_price'] = $item['activeGoodsAttr'][0]['group_buy_price']; $item['price'] = $item['activeGoodsAttr'][0]['goodsAttr']['price']; $item['sheng'] = $item['price']>$item['group_buy_price']?bcsub($item['price'] , $item['group_buy_price'],2):0; $item['goods_name'] = $item['goods']['goods_name']; $item['cover_pic'] = $item['goods']['cover_pic']; $item['goods_id'] = $item['goods']['id']; $item['title'] = empty($item['title']) ? $item['goods_name'] : $item['title']; unset($item['activeGoodsAttr']); unset($item['goods']); return $item; }; if($is_page){ $list = GroupBuyActive::listPage($params, false); if ($list === false) return []; if(!empty($list['list'])){ foreach ($list['list'] as &$item){ $function($item); } } }else{ // $params['index']= 'id'; $list = GroupBuyActive::lists($params); if ($list === false) return []; if(!empty($list)){ foreach ($list as &$item){ $function($item); } } } return $list; } }