www.maiwd.cn // +---------------------------------------------------------------------- namespace app\api\model\wdsxh\activity; use app\api\model\wdsxh\Base; use app\common\model\wdsxh\points\UserWechatPointsLog; /** * Class Activity * Desc 活动模型 * Create on 2024/3/11 16:29 * Create by wangyafang */ class Activity extends Base { // 表名 protected $name = 'wdsxh_activity'; // 自动写入时间戳字段 protected $autoWriteTimestamp = false; // 定义时间戳字段名 protected $createTime = false; protected $updateTime = false; protected $deleteTime = false; protected $append = [ 'actitity_state_trans' ]; public function getActitityStateTransAttr($value, $data) { if ($data['activity_state'] < 3) { $now = time(); // 如果活动未结束,则根据当前时间校验活动状态并更新状态 // 当前时间小于报名截止时间,状态流转处于:报名中 if ($now < $data['apply_time']) $value = 1; // 当前时间大于等于报名截止时间小于开始时间,状态流转处于:未开始 if ($now >= $data['apply_time'] && $now < $data['start_time']) $value = 2; // 当前时间大于等于开始时间小于等于结束时间,状态流转处于:进行中 if ($now >= $data['start_time'] && $now <= $data['end_time']) { $value = 3; } // 当前时间大于结束时间,状态流转处于:已结束 if ($now > $data['end_time']) { $value = 4; } } else { // 活动结束,状态流转就一直处理:已结束 $value = 4; } return $value; } protected static function init() { self::afterUpdate(function ($row) { // 仅当活动状态变更为"已结束"且开启积分功能时才发放积分 if ($row['points_status'] == 1) { // 获取所有已审核通过的报名用户 $activityApplyList = (new ActivityApply()) ->where('activity_id', $row['id']) ->where('state', '2') ->select(); if (empty($activityApplyList)) { return; } // 遍历所有报名用户,为每个用户发放积分 foreach ($activityApplyList as $activityApplyObj) { // 检查是否已经发放过积分,避免重复插入 $existLog = UserWechatPointsLog::where('activity_id', $row['id']) ->where('wechat_id', $activityApplyObj['wechat_id']) ->where('source', 1) ->where('memo', '参加活动') ->find(); // 如果未发放过,则发放积分 if (!$existLog) { UserWechatPointsLog::activity(1, $activityApplyObj, $row, '参加活动'); } } } }); } }