提现申请测试

This commit is contained in:
2025-04-26 10:28:02 +08:00
parent 21a48829c6
commit 1c0f07be5c

View File

@@ -275,196 +275,206 @@ class DivideAccountController extends BaseAdminController
*/
public function actionApplyAgree()
{
// 获取前端传递的POST数据
$post = \Yii::$app->request->post();
try {
// 获取前端传递的POST数据
$post = \Yii::$app->request->post();
// 对POST数据进行验证确保必要的字段不为空
$this->requestValidate($post, [
[['id', 'check_result', 'user_type'], 'required'],
]);
// 对POST数据进行验证确保必要的字段不为空
$this->requestValidate($post, [
[['id', 'check_result', 'user_type'], 'required'],
]);
// 获取当前用户身份
$user = \Yii::$app->user->identity;
// 获取当前用户身份
$user = \Yii::$app->user->identity;
// 检查用户角色,如果不是超级管理员,则抛出异常
if ($user->role != UserRoleEnum::SUPER_ADMIN) throw new Exception('你不是超级管理员,没有分账申请打款审核权限');
// 检查用户角色,如果不是超级管理员,则抛出异常
if ($user->role != UserRoleEnum::SUPER_ADMIN) throw new Exception('你不是超级管理员,没有分账申请打款审核权限');
// 根据POST数据查找现金申请信息确保该申请存在且待审核
$CashApply = CashApply::find()->where([
'id' => $post['id'],
'user_type' => $post['user_type'],
'check_status' => 1
])->one();
if (!$CashApply) throw new Exception('申请不存在');
// 根据用户类型(诊所或平台)查找对应的账户信息和配置
if ($post['user_type'] == 1) { // 诊所
$Account = CashAccount::find()->where([
'user_id' => $CashApply->user_id,
'user_type' => $CashApply->user_type
// 根据POST数据查找现金申请信息确保该申请存在且待审核
$CashApply = CashApply::find()->where([
'id' => $post['id'],
'user_type' => $post['user_type'],
'check_status' => 1
])->one();
$config = Store::find()->where(['id' => $CashApply->user_id])->one();
} elseif($post['user_type'] == 2) { // 平台
$Account = CashAccount::find()->where([
'user_id' => 0,
'user_type' => $CashApply->user_type
])->one();
$config = Admin::find()->where(['role' => UserRoleEnum::SUPER_ADMIN])->one();
} elseif ($post['user_type'] == 3) {
$Account = AccountBalanceModel::find()->where([ 'user_id' => $CashApply->user_id, 'type' => $CashApply->user_type])->one();
$config = CardModel::find()->where(['id' => $CashApply->user_id, 'type' => $CashApply->user_type])->one();
}
if (!$CashApply) throw new Exception('申请不存在');
// 确保诊所或平台的账号存在
if (!$Account) throw new Exception('诊所或平台的账号不存在');
if ($post['user_type'] == 3) {
$CashAccount = AccountBalanceModel::find()->where([ 'user_id' => $CashApply->user_id, 'type' => $CashApply->user_type])->one();
} else {
// 再次确认现金账户信息
$CashAccount = CashAccount::find()->where([
'user_type' => $CashApply->user_type,
'user_id' => $CashApply->user_id
])->one();
}
// 根据用户类型(诊所或平台)查找对应的账户信息和配置
if ($post['user_type'] == 1) { // 诊所
$Account = CashAccount::find()->where([
'user_id' => $CashApply->user_id,
'user_type' => $CashApply->user_type
])->one();
$config = Store::find()->where(['id' => $CashApply->user_id])->one();
} elseif($post['user_type'] == 2) { // 平台
$Account = CashAccount::find()->where([
'user_id' => 0,
'user_type' => $CashApply->user_type
])->one();
$config = Admin::find()->where(['role' => UserRoleEnum::SUPER_ADMIN])->one();
} elseif ($post['user_type'] == 3) {
$Account = AccountBalanceModel::find()->where([ 'user_id' => $CashApply->user_id, 'type' => $CashApply->user_type])->one();
$config = CardModel::find()->where(['id' => $CashApply->user_id, 'type' => $CashApply->user_type])->one();
}
// 检查银行账户配置是否完整,如果有任一配置项为空,则解冻申请提现的金额,并记录审核失败
if (empty($config['bank_user_name']) || empty($config['bank_card']) || empty($config['bank_name']) || empty($config['bank_account_type'])) {
// 确保诊所或平台的账号存在
if (!$Account) throw new Exception('诊所或平台的账号不存在');
if ($post['user_type'] == 3) {
$CashAccount = AccountBalanceModel::find()->where([ 'user_id' => $CashApply->user_id, 'type' => $CashApply->user_type])->one();
} else {
// 再次确认现金账户信息
$CashAccount = CashAccount::find()->where([
'user_type' => $CashApply->user_type,
'user_id' => $CashApply->user_id
])->one();
}
$CashApply->check_id = $user->uid;
$CashApply->check_status = 4; // 提现失败
$CashApply->check_result = '银行卡相关配置不完善';
$CashApply->check_time = date('Y-m-d H:i:s', time());
$CashApply->dakuan_status = -1; // 失败
$CashApply->dakuan_time = date('Y-m-d H:i:s', time());
$CashApply->saveOrFail();
// 检查银行账户配置是否完整,如果有任一配置项为空,则解冻申请提现的金额,并记录审核失败
if (empty($config['bank_user_name']) || empty($config['bank_card']) || empty($config['bank_name']) || empty($config['bank_account_type'])) {
// 创建日志记录,记录此次审核操作的详细信息
$log = new Log();
$log->admin_id = $user->uid;
$log->operate_time = date('Y-m-d H:i:s', time());
$log->type = '分账申请打款审核';
// $log->content = '超级管理员:' . $user->uid . '打款操作,订单号:' . $CashApply->order_no . ',打款金额:' . bcadd($CashApply->true_cash, 2, 2) . '元,开户人姓名:' . $config->bank_user_name . ',银行卡号:' . $config->bank_card . ',银行名称:' . $config->bank_name . ',银行账户类型:' . $config->bank_account_type . ',打款失败,原因:银行卡相关配置不完善';
$log->content = '超级管理员:' . $user->uid . '打款操作,订单号:' . $CashApply->order_no . ',打款金额:' . $CashApply->true_cash . '元,开户人姓名:' . $config->bank_user_name . ',银行卡号:' . $config->bank_card . ',银行名称:' . $config->bank_name . ',银行账户类型:' . $config->bank_account_type . ',打款失败,原因:银行卡相关配置不完善';
$log->mold = 3; // 财务操作
$log->saveOrFail();
// 更新日志内容到数据库
\Yii::$app->db->createCommand()->update('yii_log', ['content' => Json::encode($log->attributes)], ['id' => $log->attributes['id']])->execute();
throw new \yii\db\Exception('银行卡相关配置不能为空');
}
$sendPrice = $CashApply->user_id == 0? bcadd($CashApply->true_cash, 0, 2): bcadd($CashApply->true_cash, 1, 2);
// 准备打款参数
$param = [
'order_no' => $CashApply->order_no, // 订单号
'apply_cash' => $sendPrice, // 实际打款金额 1元是银联手续费 自己的账户不需要手续费
'bank_name' => $config->bank_name, // 银行名称
'bank_account_type' => $config->bank_account_type, // 银行账户类型
'bank_no' => $config->bank_no, // 银行账号
'bank_user_name' => $config->bank_user_name, // 开户人姓名
'bank_card' => $config->bank_card, // 银行卡号
];
if ($param['bank_card'] == '19081501040002999' && $CashApply->user_id != 0) {
$param['apply_cash'] = bcsub($param['apply_cash'], 1, 2);
}
// 执行打款操作
$res = EplPayService::getInstance()->withDraw($param);
// 处理打款失败情况
if ($res['returnCode'] != '0000') {
try {
// 开始事务
$transaction = \Yii::$app->db->beginTransaction();
if ($CashApply->user_type == 3) {
// 更新用户账户信息,解冻申请提现的金额
$CashAccount->withdrawn_frozen = bcsub($CashAccount->withdrawn_frozen, $CashApply->apply_cash, 6);
$CashAccount->balance = bcadd($CashAccount->balance, $CashApply->apply_cash, 6);
} else {
// 更新用户账户信息,解冻申请提现的金额
$CashAccount->frozen_cash = bcsub($CashAccount->frozen_cash, $CashApply->apply_cash, 2);
}
$CashAccount->saveOrFail();
// 更新提现申请状态为失败
$CashApply->check_id = $user->uid;
$CashApply->check_status = 4; // 提现失败状态码
$CashApply->check_result = $res['returnMsg'];
$CashApply->check_status = 4; // 提现失败
$CashApply->check_result = '银行卡相关配置不完善';
$CashApply->check_time = date('Y-m-d H:i:s', time());
$CashApply->dakuan_status = -1; // 打款失败状态码
$CashApply->dakuan_status = -1; // 失败
$CashApply->dakuan_time = date('Y-m-d H:i:s', time());
$CashApply->saveOrFail();
// 记录代付的手续费
$this->updateChargeCashPayRecordStatusByOrderNo($CashApply->order_no, 3);
// 记录日志
// 创建日志记录,记录此次审核操作的详细信息
$log = new Log();
$log->admin_id = $user->uid;
$log->operate_time = date('Y-m-d H:i:s', time());
$log->type = '分账申请打款审核';
$log->content = '打款失败:超级管理员:' . $user->uid . '打款操作,订单号:' . $CashApply->order_no . ',打款金额:' . $CashApply->true_cash . '元,开户人姓名:' . $config->bank_user_name . ',银行卡号:' . $config->bank_card . ',银行名称:' . $config->bank_name . ',银行账户类型:' . $config->bank_account_type . ',打款失败,原因:' . $res['returnMsg'];
$log->mold = 3; // 财务操作状态码
// $log->content = '超级管理员:' . $user->uid . '打款操作,订单号:' . $CashApply->order_no . ',打款金额:' . bcadd($CashApply->true_cash, 2, 2) . '元,开户人姓名:' . $config->bank_user_name . ',银行卡号:' . $config->bank_card . ',银行名称:' . $config->bank_name . '银行账户类型:' . $config->bank_account_type . ',打款失败,原因:银行卡相关配置不完善';
$log->content = '超级管理员:' . $user->uid . '打款操作,订单号:' . $CashApply->order_no . ',打款金额:' . $CashApply->true_cash . '元,开户人姓名:' . $config->bank_user_name . ',银行卡号:' . $config->bank_card . ',银行名称:' . $config->bank_name . ',银行账户类型:' . $config->bank_account_type . ',打款失败,原因:银行卡相关配置不完善';
$log->mold = 3; // 财务操作
$log->saveOrFail();
// 更新日志内容
// 更新日志内容到数据库
\Yii::$app->db->createCommand()->update('yii_log', ['content' => Json::encode($log->attributes)], ['id' => $log->attributes['id']])->execute();
// 提交事务
$transaction->commit();
return $res;
} catch (\Exception $e) {
// 回滚事务
$transaction->rollBack();
throw new \yii\db\Exception($e->getMessage());
throw new \yii\db\Exception('银行卡相关配置不能为空');
}
} else {
// 处理打款成功情况
$t = \Yii::$app->db->beginTransaction();
try {
// 更新用户账户信息,扣除账户余额,解冻申请提现的金额,增加已提现金额和手续费
if ($CashApply->user_type == 3) {
$CashAccount->charge = bcadd($CashAccount->charge, $CashApply->charge_cash, 6);
} else {
$CashAccount->able_cash = bcsub($CashAccount->able_cash, $CashApply->apply_cash, 2);
$CashAccount->charge_cash = bcadd($CashAccount->charge_cash, $CashApply->charge_cash, 2);
$sendPrice = $CashApply->user_id == 0? bcadd($CashApply->true_cash, 0, 2): bcadd($CashApply->true_cash, 1, 2);
// 准备打款参数
$param = [
'order_no' => $CashApply->order_no, // 订单号
'apply_cash' => $sendPrice, // 实际打款金额 1元是银联手续费 自己的账户不需要手续费
'bank_name' => $config->bank_name, // 银行名称
'bank_account_type' => $config->bank_account_type, // 银行账户类型
'bank_no' => $config->bank_no, // 银行账号
'bank_user_name' => $config->bank_user_name, // 开户人姓名
'bank_card' => $config->bank_card, // 银行卡号
];
if ($param['bank_card'] == '19081501040002999' && $CashApply->user_id != 0) {
$param['apply_cash'] = bcsub($param['apply_cash'], 1, 2);
}
// 执行打款操作
$res = EplPayService::getInstance()->withDraw($param);
// 处理打款失败情况
if ($res['returnCode'] != '0000') {
try {
// 开始事务
$transaction = \Yii::$app->db->beginTransaction();
if ($CashApply->user_type == 3) {
// 更新用户账户信息,解冻申请提现的金额
$CashAccount->withdrawn_frozen = bcsub($CashAccount->withdrawn_frozen, $CashApply->apply_cash, 6);
$CashAccount->balance = bcadd($CashAccount->balance, $CashApply->apply_cash, 6);
} else {
// 更新用户账户信息,解冻申请提现的金额
$CashAccount->frozen_cash = bcsub($CashAccount->frozen_cash, $CashApply->apply_cash, 2);
}
$CashAccount->saveOrFail();
// 更新提现申请状态为失败
$CashApply->check_id = $user->uid;
$CashApply->check_status = 4; // 提现失败状态码
$CashApply->check_result = $res['returnMsg'];
$CashApply->check_time = date('Y-m-d H:i:s', time());
$CashApply->dakuan_status = -1; // 打款失败状态码
$CashApply->dakuan_time = date('Y-m-d H:i:s', time());
$CashApply->saveOrFail();
// 记录代付的手续费
$this->updateChargeCashPayRecordStatusByOrderNo($CashApply->order_no, 3);
// 记录日志
$log = new Log();
$log->admin_id = $user->uid;
$log->operate_time = date('Y-m-d H:i:s', time());
$log->type = '分账申请打款审核';
$log->content = '打款失败:超级管理员:' . $user->uid . '打款操作,订单号:' . $CashApply->order_no . ',打款金额:' . $CashApply->true_cash . '元,开户人姓名:' . $config->bank_user_name . ',银行卡号:' . $config->bank_card . ',银行名称:' . $config->bank_name . ',银行账户类型:' . $config->bank_account_type . ',打款失败,原因:' . $res['returnMsg'];
$log->mold = 3; // 财务操作状态码
$log->saveOrFail();
// 更新日志表内容
\Yii::$app->db->createCommand()->update('yii_log', ['content' => Json::encode($log->attributes)], ['id' => $log->attributes['id']])->execute();
// 提交事务
$transaction->commit();
return $res;
} catch (\Exception $e) {
// 回滚事务
$transaction->rollBack();
throw new \yii\db\Exception($e->getMessage());
}
$CashAccount->saveOrFail();
} else {
// 处理打款成功情况
$t = \Yii::$app->db->beginTransaction();
try {
// 更新用户账户信息,扣除账户余额,解冻申请提现的金额,增加已提现金额和手续费
if ($CashApply->user_type == 3) {
$CashAccount->charge = bcadd($CashAccount->charge, $CashApply->charge_cash, 6);
} else {
$CashAccount->able_cash = bcsub($CashAccount->able_cash, $CashApply->apply_cash, 2);
$CashAccount->charge_cash = bcadd($CashAccount->charge_cash, $CashApply->charge_cash, 2);
}
$CashAccount->saveOrFail();
// 更新提现申请状态为成功
$CashApply->check_id = $user->uid;
$CashApply->check_status = 2; // 提现成功状态码
$CashApply->check_result = $post['check_result'];
$CashApply->check_time = date('Y-m-d H:i:s', time());
$CashApply->dakuan_status = 1; // 打款成功状态码
$CashApply->dakuan_time = date('Y-m-d H:i:s', time());
$CashApply->saveOrFail();
// 更新提现申请状态为成功
$CashApply->check_id = $user->uid;
$CashApply->check_status = 2; // 提现成功状态码
$CashApply->check_result = $post['check_result'];
$CashApply->check_time = date('Y-m-d H:i:s', time());
$CashApply->dakuan_status = 1; // 打款成功状态码
$CashApply->dakuan_time = date('Y-m-d H:i:s', time());
$CashApply->saveOrFail();
// 记录代付的手续费
$this->updateChargeCashPayRecordStatusByOrderNo($CashApply->order_no, 2, $param['apply_cash']);
// 记录代付的手续费
$this->updateChargeCashPayRecordStatusByOrderNo($CashApply->order_no, 2, $param['apply_cash']);
// 记录日志
$log = new Log();
$log->admin_id = $user->uid;
$log->operate_time = date('Y-m-d H:i:s', time());
$log->type = '分账申请打款审核';
$log->content = $user->uid . '通过了ID为' . $post['id'] . '的打款申请,打款结果:成功';
$log->mold = 3; // 财务操作状态码
$log->save();
// 记录日志
$log = new Log();
$log->admin_id = $user->uid;
$log->operate_time = date('Y-m-d H:i:s', time());
$log->type = '分账申请打款审核';
$log->content = $user->uid . '通过了ID为' . $post['id'] . '的打款申请,打款结果:成功';
$log->mold = 3; // 财务操作状态码
$log->save();
// 更新日志表内容
\Yii::$app->db->createCommand()->update('yii_log', ['content' => Json::encode($log->attributes)], ['id' => $log->attributes['id']])->execute();
// 更新日志表内容
\Yii::$app->db->createCommand()->update('yii_log', ['content' => Json::encode($log->attributes)], ['id' => $log->attributes['id']])->execute();
// 提交事务
$t->commit();
return ['审核成功'];
} catch (\Exception $e) {
// 回滚事务
$t->rollBack();
throw new Exception($e->getMessage());
// 提交事务
$t->commit();
return ['审核成功'];
} catch (\Exception $e) {
// 回滚事务
$t->rollBack();
throw new Exception($e->getMessage());
}
}
} catch (\Exception $e) {
// 回滚事务
$transaction->rollBack();
ds([
'msg' => $e->getMessage(),
'line' => $e->getLine(),
'file' => $e->getFile(),
]);
}
}