| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- <?php
- namespace addons\BusinessActivity\common\service;
- use addons\BusinessActivity\common\enums\BusinessActivityEnum;
- use addons\BusinessActivity\common\enums\ConfigEnum;
- use addons\BusinessActivity\common\models\AddonsBusinessActivityModel;
- use addons\BusinessActivity\common\models\AddonsBusinessActivitySigninModel;
- use common\enums\StatusEnum;
- use Yii;
- class SignInService
- {
- /**
- * @param int $mall_id
- * @param int $user_id
- * @return array|mixed|string
- */
- public function page(int $mall_id, int $user_id)
- {
- $ret = AddonsBusinessActivitySigninModel::listPage([
- 'where' => [
- ['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();
- }
- }
|