hasOne('User', 'id', 'user_id'); } //钱包类型 public static function getMoneyType($value) { $status = [ self::MONEYTYPECOIN => '金币', self::MONEYTYPEARNINGS => '钻石' ]; return isset($status[$value]) ? $status[$value] : ''; } public static function ChangeTypeLable($type = "") { $status = [ self::OPERATION_SYSTEM => '系统调节', self::OPERATION_RECHARGE => '会员充值', self::OPERATION_WITHDRAW => '会员提现', self::OPERATION_CONSUME => '金币转增(送出)', self::DAILY_TASKS_REWARD => '任务奖励', self::OPERATION_INVITE_REBATE => '邀请用户充值返利', self::OPERATION_DECORATION => '购买装扮', self::GIFT_BOX_REWARD => '礼盒奖励', self::ROOM_SUBSIDY => '房间补贴', self::OPERATION_GIFT => '购买礼物', self::GIVE_GIFT_EARNING => '送礼增加收益', self::GUILD_SUBSIDY => '工会补贴', self::USER_RECEIVE => '会员转赠(接收)', self::MONEY_CONVERSION => '钻石兑换金币', self::FIRST_CHARGE => '首充', self::DROP_GIFT_REWARD => '天降好礼充值', self::GUILD_EXIT => '退出工会扣款', self::ROOM_OWNER_EARNINGS => '房主收益', self::HOST_EARNINGS => '主持人收益', self::HEADLINE_REWARD => '抢头条', self::GUILD_EARNINGS => '公会长收益', self::WITHDRAW_FAILURE => '提现驳回或提现失败返还', self::FINANCE_LEVEL_REWARD => '财富等级奖励金币领取', self::DELETE_RELATION_COIN => '删除关系扣金币', self::TRANSFER_COIN => '赠送好友金币', self::RECEIVE_COIN => '好友转赠所得金币', self::HOUR_RANK_COIN => '小时榜获得金币', self::NEW_USER_CHARGE_GIFT => '新人充值好礼', self::RED_PACKET_COIN => '发红包(金币)', self::RED_PACKET_DIAMOND => '发红包(钻石)', self::RED_PACKET_COIN_RECEIVE => '抢红包(金币)', self::RED_PACKET_DIAMOND_RECEIVE => '抢红包(钻石)', self::RED_PACKET_LEFT_COIN => '红包剩余退回(金币)', self::RED_PACKET_LEFT_DIAMOND => '红包剩余退回(钻石)', self::NOBILITY_PURCHASE_COIN => '爵位购买赠送(金币)', self::SIGN => '签约支出', self::SIGN_FAILURE => '签约失败退回', self::FIRST_SIGN_INCOME => '首次被签约收入', self::SIGN_MASTER_DAILY_RETURN => '签约师傅每日返还', self::BELIEVER_COMPENSATION => '解约补偿', self::SIGN_BE_SIGNED_INCOME => '被签约者收礼返佣给上级', self::RENEWAL => '续约', self::DAILY_SIGN => '每日签到', self::BOMB_COIN => '参与幸运币活动获得', self::RED_PACKET_FEE => '发红包手续费', self::BACKGROUND_RECHARGE_COIN => '后台充值金币', self::BACKGROUND_RECHARGE_DIAMOND => '后台充值钻石', self::BACKGROUND_DEDUCTION_COIN => '后台扣除金币', self::BACKGROUND_DEDUCTION_DIAMOND => '后台扣除钻石', self::GUILD_EXIT_DEACON_INCOME => "公会会员付费退出会长收入" ]; if ($type) { return $status[$type] ?? ''; } else { return $status; } } /** * 修改用户资金 * @param $user_id 用户ID * @param $change_value * @param $money_type * @param $change_type * @param $remarks * @param $from_uid * @param $from_id * @param $rid * @param $is_uid_search * @return array|void * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function change_user_money($user_id, $change_value, $money_type, $change_type, $remarks = "", $room_id = 0, $from_uid = 0, $from_id = 0) { // 确定操作的表 $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; } } $change_value = abs($change_value); // 验证用户信息 $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]; } // 验证资金类型 $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'] + $change_value; if ($after_coin > 99999999) { return ['code' => 0, 'msg' => "当前用户金币已达上限", 'data' => null]; } } elseif ($money_type == self::MONEYTYPEARNINGS) { $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 ($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 { return ['code' => 1, 'msg' => "操作成功", 'data' => null]; } } /* * 用户资金变动日志 */ public function money_change_log($user_id, $seach, $money_type = 0, $page = 0, $page_limit = 30) { if ($money_type == self::MONEYTYPECOIN) { $table_name_log = 'user_coin_log'; } else { $table_name_log = 'user_earnings_log'; } $where = []; if ($seach['stime']) { $where['createtime'] = ['>=', strtotime($seach['stime'])]; } if ($seach['etime']) { $where['createtime'] = ['<=', strtotime($seach['etime'])]; } if ($seach['change_type']) { $where['change_type'] = $seach['change_type']; } $log['count'] = Db::name($table_name_log)->where($where)->where('user_id', $user_id)->count('id'); $log_select = Db::name($table_name_log) ->where($where) ->where('user_id', $user_id) ->order('createtime desc'); if ($page) { $log_select->page($page, $page_limit); } $log['list'] = $log_select->select(); foreach ($log['list'] as $key => &$value) { $value['money_type'] = $this->getMoneyType($money_type); $change_type = $value['change_type']; $value['change_type'] = $this->ChangeTypeLable($value['change_type']); $value['createtime'] = date('Y-m-d H:i:s', $value['createtime']); if ($money_type == self::MONEYTYPECOIN) { if (in_array($change_type, $this->coin_consumption_type_array)) { $value['change_in_out'] = "支出"; $value['change_value'] = $value['coin'] * -1; } else { $value['change_value'] = $value['coin']; $value['change_in_out'] = "收入"; } } else { if (in_array($change_type, $this->diamond_consumption_type_array)) { $value['change_in_out'] = "支出"; $value['change_value'] = $value['earnings'] * -1; } else { $value['change_value'] = $value['earnings']; $value['change_in_out'] = "收入"; } } } return $log; } /* * 获取用户资金类型 */ public function getChangeTypeLableList() { return $this->ChangeTypeLable(); } }