isEmpty()) { throw new \Exception('记录不存在'); } if ($record['status']!=0) { throw new \Exception('状态异常'); } //重新发起代付需修改订单号 if($record['remark_df'] != ''){ $record['sn'] = generate_sn(WithdrawRecord::class, 'sn'); } $udun = ConfigService::get('website', 'udun'); if($udun['is_open_df'] == 0){ throw new \Exception('请先开启代付'); } $method = WithdrawMethod::where(['id' => $record['method_id']])->findOrEmpty(); if ($method->isEmpty()) { throw new \Exception('提现方式不存在'); } if ($method['is_open_df'] == 0) { throw new \Exception('该记录提现方式未开启代付'); } $main_coin_type = $method['main_coin_type']; $coin_type = $method['coin_type']; $udunDispatch = UtilsService::get_udunDispatch(); //验证地址合法性 $result1 = $udunDispatch->checkAddress($main_coin_type,$record['account']); if($result1['code'] == 200){ //申请提币 $amount_df = round($record['amount']- $record['charge'],2); $result2 = $udunDispatch->withdraw($record['sn'],$main_coin_type,$coin_type,$record['account'],$amount_df); if($result2['code'] == 200){ WithdrawRecord::update([ 'id' => $record['id'], 'status2' => 1, 'remark_df' => '', 'sn' => $record['sn'] ]); } } Db::commit(); return 'success'; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return 'fail'; } } /** * @notes 同意提现 * @param array $params * @return bool * @author bd * @date 2024/01/31 14:07 */ public static function agree(array $params): bool { Db::startTrans(); try { $record = WithdrawRecord::find($params['id']); if ($record->isEmpty()) { throw new \Exception('记录不存在'); } if ($record['status']!=0) { throw new \Exception('状态异常'); } WithdrawRecord::update([ 'id' => $params['id'], 'status' => 1, 'status2' => 0, 'remark_df' => '', ]); //更新充值记录用户余额 $user = User::where(['id' => $record['user_id']])->findOrEmpty(); if ($user->isEmpty()) { throw new \Exception('用户不存在'); } //提现次数+1 User::update([ 'id' => $user['id'], 'withdraw_num' => $user['withdraw_num'] + 1 ]); WithdrawRecord::update([ 'id' => $params['id'], 'user_money' => $user['user_money'] ]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 拒绝提现 * @param array $params * @return bool * @author bd * @date 2024/01/31 14:07 */ public static function refuse(array $params): bool { Db::startTrans(); try { $record = WithdrawRecord::find($params['id']); if ($record->isEmpty()) { throw new \Exception('记录不存在'); } if ($record['status']!=0) { throw new \Exception('状态异常'); } WithdrawRecord::update([ 'id' => $params['id'], 'status' => 2, 'remark' => $params['remark'], 'status2' => 0, 'remark_df' => '', ]); //返还提现金额 //记录日志 UtilsService::user_finance_add( $record['user_id'], 3, 1, $record['amount'], $record['sn'], $params['remark'] ); //用户资金修改 UtilsService::user_money_change($record['user_id'], 1, $record['amount'],'user_money'); //提现金额修改 UtilsService::user_money_change($record['user_id'], 2, $record['amount'],'total_withdraw'); //更新充值记录用户余额 $user = User::where(['id' => $record['user_id']])->findOrEmpty(); if ($user->isEmpty()) { throw new \Exception('用户不存在'); } WithdrawRecord::update([ 'id' => $params['id'], 'user_money' => $user['user_money'] ]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 提现记录备注 * @param array $params * @return bool * @author bd * @date 2024/01/31 14:07 */ public static function remark(array $params): bool { Db::startTrans(); try { $record = WithdrawRecord::find($params['id']); if ($record->isEmpty()) { throw new \Exception('记录不存在'); } //代理操作需查询是否有权限 $user = User::where(['agent_id' => $params['admin_id']])->findOrEmpty(); if (!$user->isEmpty()) { $userRelation = UserRelationAgent::where(['user_id' => $record['user_id'],'parent_id' => $user['id']])->findOrEmpty(); if ($userRelation->isEmpty()) { throw new \Exception('参数异常'); } } WithdrawRecord::update([ 'id' => $params['id'], 'remark2' => $params['content'] ]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 提现统计 * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author bd * @date 2024/01/31 14:07 */ public static function stat() { $total = WithdrawRecord::sum('amount'); $ing = WithdrawRecord::where(['status' => 0])->sum('amount'); $success = WithdrawRecord::where(['status' => 1])->sum('amount'); $error = WithdrawRecord::where(['status' => 2])->sum('amount'); return [ 'total' => round($total, 2), 'ing' => round($ing, 2), 'success' => round($success, 2), 'error' => round($error, 2), ]; } }