You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
3.0 KiB

<?php
namespace app\integral\service;
use app\integral\model\IntegralLog;
use app\integral\model\IntegralMy;
use think\facade\Db;
class Integral extends Base
{
/**
* 更新用户积分并记录明细
* @param int $user_id 用户ID
* @param string $type 变动类型
* @param float $integral 变动数量
* @param string $show_text 显示文案
* @param string $relation_order_number 关联订单编号
* @param array $remark 关联信息
* @date 2022-11-18
*/
public function change($user_id, $type, $integral, $show_text = '', $relation_order_number = '', $remark = [])
{
$my_model = new IntegralMy();
$log_model = new IntegralLog();
// 变动数量不能为0
if (!$integral) {
return sendErrorArray(2001, '变动数量不可为0');
}
// 查找我的信息
$my = $my_model->getOneData([
['uid', '=', $this->mid],
['user_id', '=', $user_id]
],'id,user_id,integral,total_integral');
// 如果用户没有初始化则初始化,再重新获取用户数据
if (empty($my)) {
$my_data = [
'uid' => $this->mid,
'user_id' => $user_id,
'integral' => 0,
'total_integral' => 0
];
$res = $my_model->dataUpdate($my_data);
if (!$res) {
return sendErrorArray(2002, '平台初始化失败');
}
// 查找我的信息
$my = $my_model->getOneData([
['uid', '=', $this->mid],
['user_id', '=', $user_id]
],'id,user_id,integral,total_integral');
}
// 不可减为负数
if ($integral < 0 && abs($integral) > $my['integral']) {
return sendErrorArray(2003, '您的积分不足');
}
// 更新我的积分表
$my_update = [
'id' => $my['id'],
'user_id' => $user_id,
'integral' => Db::raw('integral + ' . $integral)
];
if (in_array($type, $log_model->getJoinStatisticsTypes())) {
$my_update['total_integral'] = Db::raw('total_integral + ' . $integral);
$my_update['total_integral_change_time'] = time();
}
$res = $my_model->dataUpdate($my_update);
if (!$res) {
return sendErrorArray(2004, '用户积分更新失败');
}
// 更新LOG表
$my_log_data = [
'uid' => $this->mid,
'user_id' => $user_id,
'type' => $type,
'integral' => $integral,
'after_integral' => $my['integral'] + $integral,
'show_text' => $show_text,
'relation_order_number' => $relation_order_number,
'remark' => $remark
];
$res = $log_model->dataUpdate($my_log_data);
if (!$res) {
return sendErrorArray(2005, '用户积分日志更新失败');
}
return sendSuccessArray();
}
}