新增发起提现接口

This commit is contained in:
2023-04-08 10:16:57 +08:00
parent ac5467b951
commit cde4b9b664
6 changed files with 222 additions and 14 deletions
+136 -1
View File
@@ -3,12 +3,15 @@
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Model\BasicBank;
use App\Model\DoctorAccount;
use App\Model\DoctorAccountDay;
use App\Model\DoctorBankCard;
use App\Model\DoctorWithdrawal;
use App\Model\DoctorWithdrawalOrder;
use App\Model\OrderInquiry;
use App\Model\UserDoctor;
use Hyperf\DbConnection\Db;
/**
* 医生账户
@@ -205,10 +208,14 @@ class DoctorAccountService extends BaseService
}
}
if ($balance_account > 0){
$balance_account = floor($balance_account * 0.75 * 100) / 100;
}
// 计算医生个人所得税
$income_tax = $this->computeIndividualIncomeTax($balance_account);
$withdrawal_amount = floor(($balance_account * 0.75 - $income_tax) * 100) / 100;
$withdrawal_amount = floor(($balance_account - $income_tax) * 100) / 100;
$income_tax = floor($income_tax * 100) / 100;
@@ -295,6 +302,134 @@ class DoctorAccountService extends BaseService
}
/**
* 发起提现
* @return array
*/
public function addDoctorWithdrawal(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->input('order_inquiry_id');
$withdrawal_amount_total = $this->request->input('withdrawal_amount_total');
$bank_card_id = $this->request->input('bank_card_id');
$order_inquiry_id = explode(',',$order_inquiry_id);
if (empty($order_inquiry_id)){
return fail();
}
$amount_total = 0;
foreach ($order_inquiry_id as $value){
$params = array();
$params['order_inquiry_id'] = $value;
$params['doctor_id'] = $user_info['client_user_id'];
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail(HttpEnumCode::HTTP_ERROR,"存在不可提现订单");
}
// 验证订单状态
if ($order_inquiry['inquiry_status'] != 6){
return fail(HttpEnumCode::HTTP_ERROR,"提现失败");
}
// 验证订单提现状态
if ($order_inquiry['is_withdrawal'] != 0){
return fail(HttpEnumCode::HTTP_ERROR,"存在已提现订单");
}
// 验证订单支付状态
if ($order_inquiry['inquiry_pay_status'] != 2){
return fail(HttpEnumCode::HTTP_ERROR,"存在未支付订单");
}
// 计算订单总金额
$amount_total += $order_inquiry['amount_total'];
}
// 医生分成金额
if ($amount_total > 0){
$amount_total = floor($amount_total * 0.75 * 100) / 100;
}
// 计算医生个人所得税
$income_tax = $this->computeIndividualIncomeTax($amount_total);
// 可提现金额
$withdrawal_amount = floor(($amount_total - $income_tax) * 100) / 100;
$income_tax = floor($income_tax * 100) / 100;
if ($withdrawal_amount_total != $withdrawal_amount){
return fail(HttpEnumCode::SERVER_ERROR,"金额不符合");
}
// 检测提现银行卡
$params = array();
$params['bank_card_id'] = $bank_card_id;
$doctor_bank_card = DoctorBankCard::getOne($params);
if (empty($doctor_bank_card)){
return fail(HttpEnumCode::HTTP_ERROR,"银行卡错误");
}
// 获取银行数据
$params = array();
$params['bank_id'] = $doctor_bank_card['bank_id'];
$basic_bank = BasicBank::getOne($params);
if (empty($basic_bank)){
return fail(HttpEnumCode::HTTP_ERROR,"银行卡错误");
}
Db::beginTransaction();
try {
// 新增医生提现表
$data = array();
$data['doctor_id'] = $user_info['client_user_id'];
$data['bank_id'] = $doctor_bank_card['bank_id'];
$data['account_name'] = $basic_bank['bank_name'];
$data['bank_card_code'] = $basic_bank['bank_code'];
$data['bank_card_code_four'] = substr($basic_bank['bank_code'], -4);;
$data['applied_withdrawal_amount'] = $withdrawal_amount + $income_tax; // 提现金额
$data['actual_withdrawal_amount'] = $withdrawal_amount; // 实际提现金额
$data['income_tax'] = $income_tax; // 提现所得税金额
$data['examine_status'] = 1; // 审核状态(1:审核中 2:审核通过 3:审核未通过)
$doctor_withdrawal = DoctorWithdrawal::addDoctorWithdrawal($data);
if (empty($doctor_withdrawal)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
foreach ($order_inquiry_id as $value){
// 新增医生提现-关联订单表
$data = array();
$data['withdrawal_id'] = $doctor_withdrawal['withdrawal_id'];
$data['doctor_id'] = $user_info['client_user_id'];
$data['order_inquiry_id'] = $value;
$doctor_withdrawal_order = DoctorWithdrawalOrder::addDoctorWithdrawalOrder($data);
if (empty($doctor_withdrawal_order)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR);
}
// 修改问诊订单提现状态
$params = array();
$params['order_inquiry_id'] = $value;
$data = array();
$data['is_withdrawal'] = 2;
$data['withdrawal_time'] = date('Y-m-d H:i:s',time());
OrderInquiry::edit($params,$data);
}
Db::commit();
return success();
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR,$e->getMessage());
}
}
/**
* 获取医生账户余额
* @param string $doctor_id
+2 -2
View File
@@ -557,14 +557,14 @@ class UserDoctorService extends BaseService
$DoctorAccountService = new DoctorAccountService();
$balance_account = $DoctorAccountService->getDoctorBalanceAccount($user_info['client_user_id']);
if ($balance_account > 0) {
$balance_account = round($balance_account,2);
$balance_account = floor($balance_account * 100) / 100;
}
// 获取医生当日接诊的订单金额
$InquiryService = new InquiryService();
$estimate_income = $InquiryService->getDoctorDayAmountTotal($user_info['client_user_id'], date('Y-m-d', time()));
if (!empty($estimate_income)) {
$estimate_income = round($estimate_income,2);
$estimate_income = floor($estimate_income * 100) / 100;
}
$user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']);