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
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();
|
|
}
|
|
}
|