From ac529a570f9437cbeba48a56303a84644a1fef6d Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Fri, 24 Feb 2023 09:12:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E6=8F=90?= =?UTF-8?q?=E7=8E=B0=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Services/DoctorAccountService.php | 100 +++++++++++++++++--------- 1 file changed, 68 insertions(+), 32 deletions(-) diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 46f6fa3..b793313 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -27,20 +27,23 @@ class DoctorAccountService extends BaseService // 获取医生账户余额 $balance_account = $this->getDoctorBalanceAccount($user_info['client_user_id']); - if ($balance_account > 0){ + if ($balance_account > 0) { $balance_account = $balance_account * 0.75; } // 获取医生月度余额 - $amount_total_month = $this->getDoctorMonthAmountTotal($user_info['client_user_id'],$date);; + $amount_total_month = $this->getDoctorMonthAmountTotal($user_info['client_user_id'], $date); + if ($amount_total_month > 0) { + $amount_total_month = $amount_total_month * 0.75; + } // 获取医生月度已提现金额-审核通过时间为准 $params = array(); $params['doctor_id'] = $user_info['client_user_id']; $doctor_withdrawal = DoctorWithdrawal::getOne($params); - if (empty($doctor_withdrawal)){ + if (empty($doctor_withdrawal)) { $withdrawal_amount_month = 0; - }else{ + } else { $withdrawal_amount_month = $doctor_withdrawal['actual_withdrawal_amount']; } @@ -55,11 +58,11 @@ class DoctorAccountService extends BaseService $params = array(); $params['doctor_id'] = $user_info['client_user_id']; - $params['year'] = date('Y',strtotime($date)); - $params['month'] = date('m',strtotime($date)); - $doctor_account_days = DoctorAccountDay::getList($params,$fields); - if (!empty($doctor_account_days)){ - foreach ($doctor_account_days as $doctor_account_day){ + $params['year'] = date('Y', strtotime($date)); + $params['month'] = date('m', strtotime($date)); + $doctor_account_days = DoctorAccountDay::getList($params, $fields); + if (!empty($doctor_account_days)) { + foreach ($doctor_account_days as $doctor_account_day) { $data = array(); $data['total_amount'] = $doctor_account_day['total_amount'] * 0.75; $data['month'] = $doctor_account_day['month']; @@ -91,12 +94,12 @@ class DoctorAccountService extends BaseService $per_page = $this->request->input('per_page', 10); // 获取当天开始时间 - $start_date = date('Y-m-d 00:00:00',strtotime($date)); + $start_date = date('Y-m-d 00:00:00', strtotime($date)); // 获取当天结束时间 - $end_date = date('Y-m-d 23:59:59',strtotime($date)); + $end_date = date('Y-m-d 23:59:59', strtotime($date)); - $reception_time = [$start_date,$end_date]; + $reception_time = [$start_date, $end_date]; // 获取医生当日接诊订单金额 $fields = [ @@ -119,9 +122,9 @@ class DoctorAccountService extends BaseService $params['inquiry_status'] = 6; // inquiry_status:问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) $params['inquiry_refund_status'] = 0; // inquiry_refund_status:问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - $order_inquiry = OrderInquiry::getDoctorAccountInfoPage($params,$reception_time,$fields); - if (!empty($order_inquiry['data'])){ - foreach ($order_inquiry['data'] as &$item){ + $order_inquiry = OrderInquiry::getDoctorAccountInfoPage($params, $reception_time, $fields); + if (!empty($order_inquiry['data'])) { + foreach ($order_inquiry['data'] as &$item) { $item['amount_total'] = $item['amount_total'] * 0.75; } } @@ -129,9 +132,12 @@ class DoctorAccountService extends BaseService return success($order_inquiry); } - // 获取提现数据 - public function getDoctorWithdrawal(){ - + /** + * 获取提现数据 + * @return array + */ + public function getDoctorWithdrawal(): array + { $user_info = $this->request->getAttribute("userInfo") ?? []; // 获取医生信息 @@ -155,11 +161,11 @@ class DoctorAccountService extends BaseService // 检测医生身份认证 $UserDoctorService = new UserDoctorService(); $res = $UserDoctorService->checkDoctorAuth($user_doctor); - if ($res !== true){ + if ($res !== true) { return fail(HttpEnumCode::HTTP_ERROR, $res); } - if ($user_doctor['is_bind_bank'] != 1){ + if ($user_doctor['is_bind_bank'] != 1) { return fail(HttpEnumCode::HTTP_ERROR, "未绑定结算银行卡"); } @@ -178,13 +184,20 @@ class DoctorAccountService extends BaseService $result['bank_card_code_mask'] = $doctor_bank_card['bank_card_code_mask']; - // 获取医生账户余额 $balance_account = $this->getDoctorBalanceAccount($user_info['client_user_id']); + if ($balance_account > 0) { + $balance_account = $balance_account * 0.75; + } + $result['balance_account'] = floor($balance_account * 100) / 100; // 计算医生个人所得税 + $income_tax = $this->computeIndividualIncomeTax($balance_account); + $income_tax = floor($income_tax * 100) / 100; + $result['income_tax'] = $income_tax; + return success($result); } /** @@ -197,9 +210,9 @@ class DoctorAccountService extends BaseService $params = array(); $params['doctor_id'] = $doctor_id; $doctor_account = DoctorAccount::getOne($params); - if (empty($doctor_account)){ + if (empty($doctor_account)) { $balance_account = 0; - }else{ + } else { $balance_account = $doctor_account['balance_account']; } @@ -216,25 +229,48 @@ class DoctorAccountService extends BaseService { $params = array(); $params['doctor_id'] = $doctor_id; - $params['year'] = date('Y',strtotime($date)); - $params['month'] = date('m',strtotime($date)); + $params['year'] = date('Y', strtotime($date)); + $params['month'] = date('m', strtotime($date)); $total_amount = DoctorAccountDay::getDoctorSumTotalAmount($params); - if (empty($total_amount)){ + if (empty($total_amount)) { $total_amount = 0; } return $total_amount; } - // 获取医生某月提现数据 - // 审核通过时间为准 - public function getDoctorMonthWithdrawalData(){ + /** + * 计算个人所得税 + * @param string|int $income + * @return float|int + */ + protected function computeIndividualIncomeTax(string|int $income): float|int + { + if ($income <= 800) { + return 0; + } - } + if ($income <= 4000) { + $income = $income - 800; + } - // 计算个人所得税 - protected function computeIndividualIncomeTax(){ + // 实际纳税金额 + $income = $income * 0.8; + if ($income <= 20000) { + $tax_rate = 0.2; // 税率 + $quick_deduction = 0; // 速算扣除数 + } elseif ($income <= 50000) { + $tax_rate = 0.3;// 税率 + $quick_deduction = 2000; // 速算扣除数 + } else { + $tax_rate = 0.4; + $quick_deduction = 7000; // 速算扣除数 + } + + $income_tax = $income * $tax_rate - $quick_deduction; + + return $income_tax; } } \ No newline at end of file