diff --git a/application/common/model/UserWallet.php b/application/common/model/UserWallet.php index dc8a7fa1..7980ccd3 100644 --- a/application/common/model/UserWallet.php +++ b/application/common/model/UserWallet.php @@ -241,68 +241,70 @@ class UserWallet extends Model */ public function change_user_money($user_id, $change_value, $money_type, $change_type, $remarks = "", $room_id = 0, $from_uid = 0, $from_id = 0) { - //如果是金币 则表为user_wallet_coin 否则 表为user_wallet_earnings - if ($money_type == self::MONEYTYPECOIN) { - $table_name = 'user_wallet_coin'; - } else { - $table_name = 'user_wallet_earnings'; - } - if ($change_type == 1) {//后台充值逻辑处理 - if ($money_type == self::MONEYTYPECOIN) {//金币 - if ($change_value > 0) {//大于0为增加金币 - $change_type = self::BACKGROUND_RECHARGE_COIN; - } else {//小于0为扣除金币 - $change_type = self::BACKGROUND_DEDUCTION_COIN; - } - } else {//钻石 - if ($change_value > 0) {// 大于0为增加钻石 - $change_type = self::BACKGROUND_RECHARGE_DIAMOND; - } else {// 小于0为扣除钻石 - $change_type = self::BACKGROUND_DEDUCTION_DIAMOND; - } + // 确定操作的表 + $table_name = $money_type == self::MONEYTYPECOIN ? 'user_wallet_coin' : 'user_wallet_earnings'; + + // 如果是后台操作(change_type == 1),则根据金额正负自动设置具体的变更类型 + if ($change_type == 1) { + if ($money_type == self::MONEYTYPECOIN) { + $change_type = $change_value > 0 ? self::BACKGROUND_RECHARGE_COIN : self::BACKGROUND_DEDUCTION_COIN; + } else { + $change_type = $change_value > 0 ? self::BACKGROUND_RECHARGE_DIAMOND : self::BACKGROUND_DEDUCTION_DIAMOND; } - - } + + // 验证用户信息 $user_info = db::name('user')->find($user_id); if (empty($user_info['id'])) { return ['code' => 0, 'msg' => "用户信息错误", 'data' => null]; } + + // 获取用户钱包信息 $user_wallet = db::name($table_name)->where(['user_id' => $user_id])->find(); if (empty($user_wallet['id'])) { - return ['code' => 0, 'msg' => "用户信息错误", 'data' => null]; + return ['code' => 0, 'msg' => "用户钱包信息错误", 'data' => null]; } + + // 验证资金类型 $money_type_str = $this->getMoneyType($money_type); if (empty($money_type_str)) { return ['code' => 0, 'msg' => "非法资金类型", 'data' => null]; } + + // 检查金额是否为数字 + if (!is_numeric($change_value)) { + return ['code' => 0, 'msg' => "变动的数值必须为数字", 'data' => null]; + } + + // 验证并检查余额上限 if ($money_type == self::MONEYTYPECOIN) { - $after_coin = $user_wallet['coin']; - $after_coin += $change_value; + $after_coin = $user_wallet['coin'] + $change_value; if ($after_coin > 99999999) { return ['code' => 0, 'msg' => "当前用户金币已达上限", 'data' => null]; } } elseif ($money_type == self::MONEYTYPEARNINGS) { - $after_earnings = $user_wallet['earnings']; - $after_earnings += $change_value; + $after_earnings = $user_wallet['earnings'] + $change_value; if ($after_earnings > 99999999) { return ['code' => 0, 'msg' => "当前用户钻石已达上限", 'data' => null]; } } else { return ['code' => 0, 'msg' => "非法资金类型", 'data' => null]; } + + // 验证变更类型 $change_name = $this->ChangeTypeLable($change_type); if (empty($change_name)) { return ['code' => 0, 'msg' => "非法资金变动类型", 'data' => null]; } - if (!is_numeric($change_value)) { - return ['code' => 0, 'msg' => "变动的数值必须为数字", 'data' => null]; - } + + // 记录资金变动日志 if ($money_type == self::MONEYTYPECOIN) { $return = model('api/UserWallet')->change_user_cion_log($user_id, $change_value, $room_id, $change_type, $remarks); } else { $return = model('api/UserWallet')->change_user_earnings_log($user_id, $change_value, $room_id, $change_type, $remarks); } + + // 修正返回值逻辑:如果日志记录成功,返回成功;如果日志记录失败,返回失败 if ($return) { return ['code' => 0, 'msg' => "请重试", 'data' => null]; } else {