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.

96 lines
2.8 KiB

<?php
namespace app\money\service;
use app\money\model\MoneyLog;
use app\money\model\MoneyMy;
use think\facade\Db;
class Money extends Base
{
/**
* 更新用户余额并记录明细
* @param int $user_id 用户ID
* @param string $type 变动类型
* @param float $money 变动数量
* @param string $show_text 显示文案
* @param string $relation_order_number 关联订单编号
* @param array $remark 关联信息
* @date 2022-11-01
*/
public function change($user_id, $type, $money, $show_text = '', $relation_order_number = '', $remark = [])
{
$my_model = new MoneyMy();
$log_model = new MoneyLog();
// 变动数量不能为0
if (!$money) {
return sendErrorArray(2001, '变动数量不可为0');
}
// 查找我的信息
$my = $my_model->getOneData([
['uid', '=', $this->mid],
['user_id', '=', $user_id]
], 'id,user_id,money,total_money');
// 如果用户没有初始化则初始化,再重新获取用户数据
if (empty($my)) {
$my_data = [
'uid' => $this->mid,
'user_id' => $user_id,
'money' => 0,
'total_money' => 0
];
$res = $my_model->dataUpdate($my_data);
if (!$res) {
return sendErrorArray(2002, '平台初始化失败');
}
// 查找我的信息
$my = $my_model->getOneData([
'user_id' => $user_id,
'uid' => $this->mid
], 'id,user_id,money,total_money');
}
// 不可减为负数
if ($money < 0 && abs($money) > $my['money']) {
return sendErrorArray(2003, '变动余额不可大于当前余额');
}
// 更新我的余额表
$my_update = [
'id' => $my['id'],
'user_id' => $user_id,
'money' => Db::raw('money + ' . $money)
];
if (in_array($type, $log_model->getJoinStatisticsTypes())) {
$my_update['total_money'] = Db::raw('total_money + ' . $money);
}
$res = $my_model->dataUpdate($my_update);
if (!$res) {
return sendErrorArray(2004, '用户余额更新失败');
}
// 更新LOG表
$my_log_data = [
'uid' => $this->mid,
'user_id' => $user_id,
'type' => $type,
'money' => $money,
'after_money' => $my['money'] + $money,
'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();
}
}