diff --git a/admin/controllers/base/DivideAccountController.php b/admin/controllers/base/DivideAccountController.php index 7dc61e4..125da3e 100644 --- a/admin/controllers/base/DivideAccountController.php +++ b/admin/controllers/base/DivideAccountController.php @@ -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(), + ]); } }