20], [['expend_type'], 'string', 'max' => 64], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'mall_id' => '商城ID', 'cate_id' => '分类id', 'title' => '活动标题', 'start_time' => '活动开始时间', 'end_time' => '活动结束时间', 'group_num' => '成团人数', 'random_win_num' => '随机拼中人数', 'virtual_num' => '虚拟人数', 'expend_type' => '消耗类型', 'expend_num' => '消耗数量', 'attend_user_type' => '参团奖励用户 1 全部 2 拼中 3 拼不中', 'attend_award_setting' => '参团奖励设置', 'attend_prize' => '奖励金额', 'win_times' => '累计拼中次数', 'win_award_setting' => '拼中奖励设置', 'is_percent_pool_trans' => '是否按百分比算分配奖金池金额【1是 0否】', 'pool_trans_money' => '分配奖金池金额', 'enable_commison' => '是否开启分佣【1是 0否】', 'team_commission_setting' => '渠道奖佣金设置', 'equal_commission_setting' => '平级奖佣金设置', 'over_commission_setting' => '越级奖佣金设置', 'status' => '状态[-1:删除;0:禁用;1启用]', 'created_at' => 'Created At', 'updated_at' => 'Updated At', ]; } public static function setData(int $mall_id, array $data) { if (!empty($data['id'])) { $model = self::findOne(['mall_id' => $mall_id, 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED], 'id' => $data['id']]); if (empty($model)) { self::$static_error = '拼团活动数据异常'; return false; } } else { $model = new self(); $model->loadDefaultValues(); $model->status = StatusEnum::ENABLED; $model->mall_id = $mall_id; unset($data['id']); } $json_keys = ['attend_award_setting', 'win_award_setting', 'team_commission_setting', 'equal_commission_setting', 'over_commission_setting', '']; foreach ($data as $key => $val) { if (in_array($key, $json_keys) && !empty($val) && is_array($val)) { $val = json_encode($val); } $model->$key = $val; } if (!$model->save()) { self::$static_error = '保存数据失败:' . $model->getErrorMessage(); return false; } self::delCache($model['id']); return $model; } public static function deleteActivity(int $mall_id, array $data) { $transaction = \Yii::$app->db->beginTransaction(); $res_update_goods = LuckyGroupGoods::updateAll(['status' => StatusEnum::DELETE], ['mall_id' => $mall_id, 'activity_id' => $data['activity_id']]); if (false === $res_update_goods) { $transaction->rollBack(); self::$static_error = '更新拼团商品数据失败'; return false; } $params = [ 'id' => $data['activity_id'], 'status' => StatusEnum::DELETE, ]; $res_update_activity = self::setData($mall_id, $params); if (false === $res_update_activity) { $transaction->rollBack(); return false; } $transaction->commit(); return true; } // 关联模型 public function getGoods() { return $this->hasOne(Goods::class, ['id' => 'goods_id']); } /** * 获取有效活动id列表 * @Author bing * @DateTime 2021-05-15 20:16:01 * @param [type] $mall_id * @return array * @copyright: Copyright (c) 2020 广东七件事集团 */ public static function getValidActivityIds($mall_id,$category_id = 0,$ids=[]) { $where = [ ['=', 'mall_id', $mall_id], ['=', 'status', StatusEnum::ENABLED], ]; if(!$ids){ $where[] = ['<', 'start_time', date('H:i:s')]; $where[] = ['>', 'end_time', date('H:i:s')]; } if($category_id > 0){ $where[] = ['=', 'cate_id', $category_id]; } if($ids){ $where[] = ['in', 'id', $ids]; } $select = 'id'; $activity_ids = LuckyGroupActivity::lists(['where' => $where, 'select' => $select]); if ($activity_ids) { $activity_ids = array_column($activity_ids, 'id'); } return $activity_ids; } /** * @name: * @msg: 变更拼团活动:创建或者编辑 * @param {int} $mall_id * @param {array} $data * @return {*} */ public static function alterateActivity(int $mall_id, array $data): bool { $transaction = \Yii::$app->db->beginTransaction(); $goods_ids = explode(',', $data['goods_ids']); unset($data['goods_ids']); $res = self::setData($mall_id, $data); if (false === $res) { $transaction->rollBack(); return false; } $goods = LuckyGroupGoods::find() ->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'activity_id' => $res->id]) ->all(); if (!empty($goods)) { // 修改关联商品 $ids = array_column($goods, 'id'); $update_counts = LuckyGroupGoods::updateAll(['status' => StatusEnum::DELETE], ['id' => $ids]); if (false === $update_counts) { self::$static_error = '批量更新错误'; $transaction->rollBack(); return false; } foreach ($goods_ids as $good_id) { $params = [ 'goods_id' => $good_id, 'activity_id' => $res->id, 'status' => StatusEnum::ENABLED, ]; $resg = LuckyGroupGoods::setData($mall_id, $params); if (false === $resg) { break; } } } else { // 全新增加关联商品 if (!empty($goods_ids)) { $goods_datas = []; $time = time(); foreach ($goods_ids as $good_id) { $goods_datas[] = [ $mall_id, $good_id, $res->id, 0, 0, 1, $time, $time ]; } $fields = ['mall_id', 'goods_id', 'activity_id', 'join_num', 'open_times', 'status', 'created_at', 'updated_at']; $resg = \Yii::$app->db->createCommand()->batchInsert(LuckyGroupGoods::tableName(), $fields, $goods_datas)->execute(); } else { $resg = true; } } if (false === $resg) { $transaction->rollBack(); self::$static_error = LuckyGroupGoods::getStaticError(); return false; } $transaction->commit(); // 删除活动缓存数据 self::delCache($res->id); return true; } public static function getActivityData($mall_id, $activity_id) { $cache = Yii::$app->cache; $cache_key = RedisKeyEnum::suffix(RedisKeyEnum::LUCKY_GROUP_ACTIVITY, $activity_id, true); $cache_data = $cache->get($cache_key); if (empty($cache_data)) { $activity = LuckyGroupActivity::getOne([['id' => $activity_id], ['mall_id' => $mall_id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]], true); if (empty($activity)) return false; LuckyGroupActivity::intoCache($activity_id, json_encode($activity)); } else { $activity = json_decode($cache_data, true); } return $activity; } public static function intoCache($activity_id, $data) { if (empty($data)) return false; $cache = Yii::$app->cache; $cache_key = RedisKeyEnum::suffix(RedisKeyEnum::LUCKY_GROUP_ACTIVITY, $activity_id, true); $cache->set($cache_key, $data); return true; } public static function delCache($activity_id) { $cache = Yii::$app->cache; $cache_key = RedisKeyEnum::suffix(RedisKeyEnum::LUCKY_GROUP_ACTIVITY, $activity_id, true); $cache->delete($cache_key); } public static function getActiveListByDiy($mall_id, $post) { $where[] = ['mall_id' => $mall_id]; $where[] = ['status' => StatusEnum::ENABLED]; 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'] = 'activity_id,goods_id,goods_id as id,created_at'; $list = LuckyGroupGoods::listPage($params, false, true); if (!empty($list['list'])) { $activity_id_arr = array_column($list['list'], 'activity_id'); $activity_arr = LuckyGroupActivity::lists(['where' => [['id' => $activity_id_arr]], 'index' => 'id']); $balance_name = \Yii::$app->services->setting->mall->get($mall_id, 'balance.balance_name') ?? '余额'; $score_name = \Yii::$app->services->setting->mall->get($mall_id, 'score.score_name') ?? '积分'; foreach ($list['list'] as &$item) { $item['img'] = $item['goods']['cover_pic']; $item['title'] = $item['goods']['goods_name']; $item['sales_num'] = $item['goods']['sales_num'] ?? 0; $item['price'] = $item['goods']['price']; $item['original_price'] = $item['goods']['original_price']; $item['tips1'] = ''; $item['tips2'] = ''; if (isset($activity_arr[$item['activity_id']])) { $item['tips1'] = $activity_arr[$item['activity_id']]['group_num'] . '人拼团,' . $activity_arr[$item['activity_id']]['random_win_num'] . '人拼中'; $activity_arr[$item['activity_id']]['attend_user_type']; $attend_award_setting = json_decode($activity_arr[$item['activity_id']]['attend_award_setting'], true); $string = ''; if (!empty($attend_award_setting['score'])) { $string .= $attend_award_setting['score'] . $score_name.','; } if (!empty($attend_award_setting['balance'])) { $string .= $attend_award_setting['balance'] . $balance_name; } if ($string && !empty($activity_arr[$item['activity_id']]['attend_user_type'])) { $string = trim($string, ','); $item['tips2'] = LuckyGroupEnum::getAttendMap($activity_arr[$item['activity_id']]['attend_user_type']) . '立得' . $string; } } $item['original_price'] = $item['goods']['original_price']; $item['subtitle'] = ''; unset($item['goods']); } } return $list; } /** * @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['with'] = [ 'goods' => function ($query) { $query->where(['status' => StatusEnum::ENABLED]); }, ]; $function = function (&$item) { $item['price'] = $item['goods']['price']; $item['goods_name'] = $item['goods']['goods_name']; $item['cover_pic'] = $item['goods']['cover_pic']; $item['goods_id'] = $item['goods']['id']; unset($item['goods']); return $item; }; if ($is_page) { $list = self::listPage($params, false); if ($list === false) return []; if (!empty($list['list'])) { foreach ($list['list'] as &$item) { $function($item); } } } else { $list = self::lists($params); if ($list === false) return []; if (!empty($list)) { foreach ($list as &$item) { $function($item); } } } return $list; } }