96 lines
3.8 KiB
PHP
96 lines
3.8 KiB
PHP
<?php
|
||
// +----------------------------------------------------------------------
|
||
// | 麦沃德科技赋能开发者,助力商协会发展
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2017~2024 www.wdsxh.cn All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | 沃德商协会系统并不是自由软件,不加密,并不代表开源,未经许可不可自由转售和商用
|
||
// +----------------------------------------------------------------------
|
||
// | Author: MY WORLD Team <bd@maiwd.cn> 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, '参加活动');
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
}
|