$params['venue_user_id']]; if (!empty($params['merchants_user_id'])) $where[] = ['merchants_user_id' => $params['merchants_user_id']]; if (!empty($params['start_time'])) $where[] = ['>=', 'start_at', strtotime($params['start_time'])]; if (!empty($params['end_time'])) $where[] = ['<=', 'end_at', strtotime($params['end_time'])]; $data = AddonsBusinessActivityModel::listPage([ 'where' => $where, 'with' => ['merchants', 'venue'], 'page' => $params['page'], 'limit' => $params['pagesize'], 'order' => 'id desc' ]); $data['poster'] = Yii::$app->services->setting->addons->get($mall_id, BusinessActivityEnum::ADDONS_NAME, 'basic.poster'); if (!empty($data['poster'])) { $data['poster'] = Json::decode($data['poster']); } $data['h5_url'] = sprintf("%s/#/pages/index/index?sign=%s", Yii::$app->services->setting->platform->get('system.h5_url') ?? '', $mall['mall_sign']); return $data; } public function detail($mall_id, $id) { $activity = AddonsBusinessActivityModel::getOne([ ['mall_id' => $mall_id], ['id' => $id], ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]] ], true, [ 'merchants' => function ($query) { return $query->select('id, nickname, avatar_url, mobile'); }, 'venue' => function ($query) { return $query->select('id, nickname, avatar_url, mobile'); }, ]); if (!$activity) return []; $activity['start_at'] = date('Y-m-d H:i:s', $activity['start_at']); $activity['end_at'] = date('Y-m-d H:i:s', $activity['end_at']); $activity['activityTime'] = [$activity['start_at'], $activity['end_at']]; $merchants = $activity['merchants']; $venue = $activity['venue']; $activity['merchants'] = [$merchants]; $activity['venue'] = [$venue]; $goods_info = []; $goods_data = AddonsBusinessActivityGoodsModel::lists([ 'where' => [ ['mall_id' => $mall_id], ['activity_id' => $id], ['status' => StatusEnum::ENABLED] ], 'with' => [ 'goods' => function ($query) { return $query->select('id, goods_name, price, stock, cover_pic'); }, ] ]); $commission_type = -1; $is_alone_commission = -1; foreach ($goods_data as $v) { if ($commission_type <= -1) $commission_type = $v['commission_type']; if ($is_alone_commission <= -1) $is_alone_commission = $v['is_alone_commission']; $temp = $v['goods']; $temp['merchants_commission'] = $v['merchants_commission']; $temp['merchants_parent_commission'] = $v['merchants_parent_commission']; $temp['venue_commission'] = $v['venue_commission']; $temp['venue_parent_commission'] = $v['venue_parent_commission']; $goods_info[] = $temp; } $activity['commission_type'] = $commission_type; $activity['is_alone_commission'] = $is_alone_commission; $activity['goods_info'] = $goods_info; return $activity; } public function write($params) { $t = Yii::$app->db->beginTransaction(); try { $mall_id = $params['mall_id']; $goods_info = $params['goods_info']; $goods_ids = array_column($goods_info, 'id'); // 查询是否有在活动中的商品 $gModel = AddonsBusinessActivityGoodsModel::find()->where(['mall_id' => $mall_id]) ->andWhere(['status' => StatusEnum::ENABLED]) ->andWhere(['goods_id' => $goods_ids]); if (!empty($params['id'])) { $gModel->andWhere(['!=', 'activity_id', $params['id']]); } $n_goods_ids = $gModel->select('goods_id')->column(); if (!empty($n_goods_ids)) { throw new Exception("商品ID为 [{$n_goods_ids[0]}] 的商品已包含在其他活动中"); } $params['merchants_user_id'] = $params['merchants'][0]['id']; $params['venue_user_id'] = $params['venue'][0]['id']; if ($params['start_at'] <= time()) { // 如果开始时间小于等于当前时间,那么就改为活动进行中 $params['activity_status'] = StatusEnum::ENABLED; } $params['start_at'] = strtotime($params['start_at']); $params['end_at'] = strtotime($params['end_at']); $activity_model = AddonsBusinessActivityModel::setData($params); if ($activity_model === false) throw new Exception(AddonsBusinessActivityModel::getStaticError()); $activity_goods_models = AddonsBusinessActivityGoodsModel::findAll([ 'mall_id' => $mall_id, 'activity_id' => $activity_model->id, 'status' => StatusEnum::ENABLED ]); foreach ($activity_goods_models as $model) { $model->status = StatusEnum::DELETE; $model->save(); } foreach ($goods_info as &$v) { $v['activity_id'] = $activity_model->id; $v['is_alone_commission'] = $params['is_alone_commission']; $v['goods_id'] = $v['id']; $v['commission_type'] = $params['commission_type']; $v['mall_id'] = $mall_id; unset($v['id']); } unset($v); foreach ($goods_info as $value) { $res = AddonsBusinessActivityGoodsModel::setData($value); if ($res === false) throw new Exception(AddonsBusinessActivityGoodsModel::getStaticError()); } $t->commit(); return true; } catch (\Exception $e) { $t->rollBack(); $this->error = $e->getMessage(); return false; } } public function del($mall_id, $id) { $t = Yii::$app->db->beginTransaction(); try { $activity_model = AddonsBusinessActivityModel::findOne(['mall_id' => $mall_id, 'id' => $id, 'status' => StatusEnum::ENABLED]); if (!$activity_model) throw new Exception(AddonsBusinessActivityModel::getStaticError()); $activity_model->status = StatusEnum::DELETE; if (!$activity_model->save()) throw new Exception($activity_model->getErrorMessage()); AddonsBusinessActivityGoodsModel::updateAll(['status' => StatusEnum::DELETE], ['activity_id' => $id, 'mall_id' => $mall_id, 'status' => StatusEnum::ENABLED]); $t->commit(); return true; } catch (\Exception $e) { $t->rollBack(); $this->error = $e->getMessage(); return false; } } public function switch($mall_id, $id, $status) { try { $activity_model = AddonsBusinessActivityModel::findOne(['mall_id' => $mall_id, 'id' => $id]); if (!$activity_model) throw new Exception(AddonsBusinessActivityModel::getStaticError()); $activity_model->status = $status; if (!$activity_model->save()) throw new Exception($activity_model->getErrorMessage()); return true; } catch (\Exception $e) { $this->error = $e->getMessage(); return false; } } public function getSigninList($params) { $where = [ ['mall_id' => $params['mall_id']], ['>', 'status', StatusEnum::DISABLED], ['activity_id' => $params['activity_id']] ]; if (!empty($params['user_id'])) $where[] = ['user_id' => $params['user_id']]; $list = AddonsBusinessActivitySigninModel::listPage( [ 'where' => $where, 'order' => 'id desc', 'with' => [ 'user' => function ($query) { return $query->select('id, nickname, avatar_url, mobile'); } ], 'page' => $params['page'], 'limit' => $params['limit'] ?? 10 ] ); if ($list == false) throw new Exception(AddonsBusinessActivitySigninModel::getStaticError()); return $list; } public function getGoodsIds($params) { $where = [ ['mall_id' => $params['mall_id']], ['status' => StatusEnum::ENABLED], ['!=', 'activity_id', $params['activity_id']] ]; $goods_ids_list = AddonsBusinessActivityGoodsModel::lists([ 'where' => $where, 'select' => 'goods_id' ]); $goods_ids = array_column($goods_ids_list, 'goods_id') ?? []; return $goods_ids; } /** * 活动结束/完成 * @return void */ public function finish() { // 查询结束ID $expired_ids = AddonsBusinessActivityModel::find()->where(['status' => StatusEnum::ENABLED]) ->andWhere(['activity_status' => StatusEnum::ENABLED]) ->andWhere(['<=', 'end_at', time()]) ->select('id') ->column(); if (!empty($expired_ids)) { // 结束 // AddonsBusinessActivityModel::updateAll(['activity_status' => ConfigEnum::STATUS_COMPLETE], ['and', // ['status' => StatusEnum::ENABLED, 'activity_status' => StatusEnum::ENABLED], ['<=', 'end_at', time()]]); AddonsBusinessActivityModel::updateAll(['activity_status' => ConfigEnum::STATUS_COMPLETE], ['id' => $expired_ids]); // 将结束中活动的商品设置为禁用状态 AddonsBusinessActivityGoodsModel::updateAll(['status' => StatusEnum::DISABLED], ['activity_id' => $expired_ids]); } // 开始 AddonsBusinessActivityModel::updateAll(['activity_status' => StatusEnum::ENABLED], ['and', ['status' => StatusEnum::ENABLED, 'activity_status' => StatusEnum::DISABLED], ['<=', 'start_at', time()]]); } /** * 获取定制数据 * @param int $mall_id * @param int $user_id * @return array */ public function getActivityCustomByUserId(int $mall_id, int $user_id) { $list = AddonsBusinessActivityModel::find()->where(['mall_id' => $mall_id]) ->andWhere(['status' => [StatusEnum::DISABLED, StatusEnum::ENABLED]]) ->andWhere(['or', ['merchants_user_id' => $user_id], ['venue_user_id' => $user_id]]) ->select('id, name, merchants_user_id, venue_user_id')->asArray()->all(); $ret = [ 'role' => [ 'is_merchants' => StatusEnum::DISABLED, 'is_venue' => StatusEnum::DISABLED, ], 'activity' => [] ]; if (!empty($list)) { foreach ($list as $item) { if ($item['merchants_user_id'] == $user_id) { // 招商负责人 $ret['role']['is_merchants'] = StatusEnum::ENABLED; } if ($item['venue_user_id'] == $user_id) { // 场地负责人 $ret['role']['is_venue'] = StatusEnum::ENABLED; } $ret['activity'][$item['id']] = $item['name']; } } return $ret; } /** * @throws Exception */ public function getPosterQrCodeUrl(array $mall, int $id): array { $poster = PosterCode::setData($mall['id'], 0, 30, [ 'item_id' => $id, 'mall_id' => $mall['id'], 'source' => 30, // 招商活动来源 'pid' => 0 ]); if (!$poster) throw new Exception(PosterCode::getStaticError()); return [ 'url' => (Yii::$app->services->setting->platform->get('system.h5_url') ?? '') . '/#' . DiyEnum::HOME_PAGE_PATH . "?sign={$mall['mall_sign']}&scene={$poster['code']}" ]; } }