[ ['or', ['venue_user_id' => $user_id], ['merchants_user_id' => $user_id]], ['status' => [StatusEnum::ENABLED, ConfigEnum::STATUS_EXPIRED]], ['mall_id' => $mall_id] ], 'select' => 'id, created_at, user_id, activity_id', 'order' => 'id desc', 'with' => ['user', 'activity' => function($query) { $query->select('id, name'); }] ]); if (!empty(AddonsBusinessActivitySigninModel::getStaticError())) return AddonsBusinessActivitySigninModel::getStaticError(); $ret['total_participate_num'] = 0; $ret['today_participate_num'] = 0; if (!empty($ret['list'])) { $ret['total_participate_num'] = AddonsBusinessActivitySigninModel::find()->where(['mall_id' => $mall_id]) ->andWhere(['or', ['venue_user_id' => $user_id], ['merchants_user_id' => $user_id]]) ->andWhere(['status' => StatusEnum::ENABLED]) ->count(); $ret['today_participate_num'] = AddonsBusinessActivitySigninModel::find()->where(['mall_id' => $mall_id]) ->andWhere(['or', ['venue_user_id' => $user_id], ['merchants_user_id' => $user_id]]) ->andWhere(['status' => StatusEnum::ENABLED]) ->andWhere(['between', 'created_at', strtotime(date('Y-m-d')), strtotime(date('Y-m-d')) + 86400]) ->count(); foreach ($ret['list'] as &$item) { $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']); } unset($item); } return $ret; } /** * 签到关系绑定过期 * @return void */ public function expired() { AddonsBusinessActivitySigninModel::updateAll(['status' => ConfigEnum::STATUS_EXPIRED], ['and', ['status' => StatusEnum::ENABLED], ['<=', 'expire_at', time()]]); } /** * 参会 * @param int $mall_id * @param int $activity_id * @param int $user_id * @return string|true */ public function create(int $mall_id, int $activity_id, int $user_id) { try { // 判断活动是否存在 $activity = AddonsBusinessActivityModel::find()->where(['mall_id' => $mall_id]) ->andWhere(['id' => $activity_id]) ->andWhere(['status' => StatusEnum::ENABLED]) ->andWhere(['activity_status' => StatusEnum::ENABLED]) ->one(); if (empty($activity)) throw new \Exception('活动不存在或已过期'); // 判断是否已经签过到 if (AddonsBusinessActivitySigninModel::find()->where(['mall_id' => $mall_id]) ->andWhere(['activity_id' => $activity_id]) ->andWhere(['user_id' => $user_id]) ->andWhere(['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]) ->count() > 0) { throw new \Exception('已经参与过该活动'); } // 累加参会人数 $activity->participate_num++; if (!$activity->save()) throw new \Exception($activity->getErrorMessage()); $t = Yii::$app->db->beginTransaction(); $expire_day = Yii::$app->services->setting->addons->get($mall_id, BusinessActivityEnum::ADDONS_NAME, 'basic.valid_duration'); $expire_day = intval($expire_day); $model = new AddonsBusinessActivitySigninModel(); $model->user_id = $user_id; $model->mall_id = $mall_id; $model->activity_id = $activity_id; $model->merchants_user_id = $activity->merchants_user_id; $model->venue_user_id = $activity->venue_user_id; $model->expire_at = time() + ($expire_day * 86400); // 绑定关系时长 if (!$model->save()) throw new \Exception($model->getErrorMessage()); $t->commit(); return true; } catch (\Exception $e) { if (!empty($t)) $t->rollBack(); return $e->getMessage(); } } /** * 通过负责人进行统计 * @param int $mall_id * @param int $user_id * @return bool|int|string|null */ public function totalByUserId(int $mall_id, int $user_id) { return AddonsBusinessActivitySigninModel::find() ->where(['mall_id' => $mall_id]) ->andWhere(['status' => StatusEnum::ENABLED]) ->andWhere(['or', ['merchants_user_id' => $user_id], ['venue_user_id' => $user_id]]) ->count(); } }