From 5d79f4795b7eaa02d9b15b727cbf1a51f4cca6e8 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Mon, 22 Apr 2024 14:30:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E8=B4=A6=E6=88=B7=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BF=AE=E6=94=B9-=E8=8E=B7=E5=8F=96=E6=88=91?= =?UTF-8?q?=E7=9A=84=E8=B4=A6=E6=88=B7=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...pleteServicePackageDelayDirectConsumer.php | 119 +++++++++++++++- app/Controller/TestController.php | 134 ++++++------------ app/Model/DoctorAccountDay.php | 5 +- app/Model/Order.php | 88 +++++++++++- app/Model/OrderInquiry.php | 6 +- app/Model/OrderServicePackage.php | 36 ++++- app/Services/DoctorAccountService.php | 37 +++-- app/Services/InquiryService.php | 129 +++++------------ app/Services/OrderServicePackageService.php | 77 ++++++++++ 9 files changed, 426 insertions(+), 205 deletions(-) diff --git a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php index f89d3f5..acf4589 100644 --- a/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php +++ b/app/Amqp/Consumer/AutoCompleteServicePackageDelayDirectConsumer.php @@ -5,7 +5,10 @@ declare(strict_types=1); namespace App\Amqp\Consumer; use App\Amqp\Producer\AutoCompleteServicePackageDelayDirectProducer; +use App\Model\DoctorAccount; +use App\Model\DoctorAccountDay; use App\Model\OrderServicePackage; +use App\Model\OrderServicePackageDetail; use App\Model\OrderServicePackageInquiry; use App\Model\UserDoctor; use App\Services\MessagePush; @@ -70,7 +73,7 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage $params['order_service_no'] = $data['order_no']; $order_service_package = OrderServicePackage::getOne($params); if (empty($order_service_package)){ - Log::getInstance("queue-AutoCompleteServicePackage")->error("入参错误" ); + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单错误" ); return Result::ACK; } @@ -94,6 +97,14 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage return Result::DROP; } + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $data['order_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (empty($order_service_package_detail)){ + Log::getInstance("queue-AutoCompleteServicePackage")->error("订单详情错误" ); + return Result::ACK; + } }catch (\Throwable $e){ Log::getInstance("queue-AutoCompleteServicePackage")->error($e->getMessage()); return Result::REQUEUE; @@ -110,6 +121,33 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage $params['order_service_id'] = $order_service_package['order_service_id']; OrderServicePackage::edit($params,$data); + // 处理统计问题 + if ($order_service_package['amount_total'] > 0) { + // 计算本次问诊服务包问诊金额 + $amount_total = bcmul( + (string)$order_service_package_detail['service_count'], + bcmul( + (string)$order_service_package_detail['single_inquiry_price'], + 0.75, + 3), + 3 + ); + + // 处理医生账户总表 + $res = $this->handleDoctorAccount($amount_total,$order_service_package['doctor_id']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; + } + + // 处理医生账户表-日 + $res = $this->handleDoctorAccountDay($amount_total,$order_service_package['doctor_id'],$order_service_package['start_time']); + if (!$res) { + Db::rollBack(); + return Result::REQUEUE; + } + } + Db::commit(); }catch (\Throwable $e){ Db::rollBack(); @@ -262,4 +300,83 @@ class AutoCompleteServicePackageDelayDirectConsumer extends ConsumerMessage return true; } + + /** + * 处理医生账户总表 + * 创建/修改医生账户总表中总金额、账户余额数据 + * @param string|int $amount_total + * @param string|int $doctor_id + * @return bool + */ + protected function handleDoctorAccount(string|int $amount_total,string|int $doctor_id): bool + { + $amount_total = bcmul((string)$amount_total,"0.75",8); + + $params = array(); + $params['doctor_id'] = $doctor_id; + $doctor_account = DoctorAccount::getOne($params); + if (empty($doctor_account)) { + // 首次 + $data = array(); + $data['doctor_id'] = $doctor_id; + $data['total_amount'] = $amount_total; + $data['balance_account'] = $amount_total; + $data['applied_withdrawal_amount'] = 0; + $data['actual_withdrawal_amount'] = 0; + $data['income_tax'] = 0; + $doctor_account = DoctorAccount::addDoctorAccount($data); + if (empty($doctor_account)) { + return false; + } + } else { + // 非首次 + // 总金额(已结束订单的总金额) + $params = array(); + $params['account_id'] = $doctor_account['account_id']; + DoctorAccount::inc($params, 'total_amount', (float)$amount_total); + + // 账户余额 + DoctorAccount::inc($params, 'balance_account', (float)$amount_total); + } + + return true; + } + + /** + * 处理医生账户表-日 + * @param string|int $amount_total + * @param string|int $doctor_id + * @param string $start_time + * @return bool + */ + protected function handleDoctorAccountDay(string|int $amount_total,string|int $doctor_id,string $start_time): bool + { + $amount_total = bcmul((string)$amount_total,"0.75",8); + + $params = array(); + $params['doctor_id'] = $doctor_id; + $params['date'] = date('Y-m-d', strtotime($start_time)); + $doctor_account_day = DoctorAccountDay::getOne($params); + if (empty($doctor_account_day)) { + // 当日首次 + $data = array(); + $data['doctor_id'] = $doctor_id; + $data['year'] = date('Y', strtotime($start_time)); + $data['month'] = date('m', strtotime($start_time)); + $data['day'] = date('d', strtotime($start_time)); + $data['date'] = date('Y-m-d', strtotime($start_time)); + $data['total_amount'] = $amount_total; + $doctor_account_day = DoctorAccountDay::addDoctorAccountDay($data); + if (empty($doctor_account_day)) { + return false; + } + } else { + // 非当日首次 + $params = array(); + $params['account_detail_id'] = $doctor_account_day['account_detail_id']; + DoctorAccountDay::inc($params, 'total_amount', (float)$amount_total); + } + + return true; + } } diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 6ac091c..6472c79 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -12,6 +12,7 @@ use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Factory\CacheFactory; use App\Factory\ProdRedisFactory; +use App\Model\DoctorAccountDay; use App\Model\DoctorConfigFollowPackage; use App\Model\DoctorConfigFollowPackageItem; use App\Model\DoctorConfigHealthPackage; @@ -454,112 +455,61 @@ class TestController extends AbstractController } public function test_17(){ + + + $user_info = $this->request->getAttribute("userInfo") ?? []; + + $year = $this->request->input('date'); + + $date = date('Y-m-d',strtotime("2024-04-15")); + + // 获取医生数据 + $params = array(); + $params['doctor_id'] = "516900370252341248"; + $user_doctor = UserDoctor::getOne($params); + if (empty($user_doctor)){ + return fail(); + } + $params = array(); $params['doctor_id'] = "516900370252341248"; - // 获取当月开始时间 - $start_date = date('Y-m-01 00:00:00', strtotime("2024-04-19")); + // 获取当天开始时间 + $start_date = date('Y-m-d 00:00:00', strtotime($date)); - // 获取当月结束时间 - // 获取给定月份的下一个月的第一天,然后减去一天得到当月的最后一天 - $end_date = date("Y-m-d 23:59:59", strtotime("+1 month", strtotime($start_date)) - 1); + // 获取当天结束时间 + $end_date = date('Y-m-d 23:59:59', strtotime($date)); $date_params = [$start_date, $end_date]; - $results = Order::getDoctorCreatedDateOrderInquiryPage($params,$date_params,1,["*"]); - if (!empty($results['data'])) { - foreach ($results['data'] as &$result) { - // 入账金额 - $result['estimate_income'] = bcmul((string)$result['amount_total'],"0.75",2); - // 入账状态-问诊订单 - if (!empty($result['OrderInquiry'])){ - if ($result['OrderInquiry']['inquiry_status'] == 4 || $result['OrderInquiry']['inquiry_status'] == 5){ - $result['entry_status'] = 1;// 入账中 - }elseif ($result['OrderInquiry']['inquiry_status'] == 6){ - $result['entry_status'] = 2;// 入账成功 - }elseif ($result['OrderInquiry']['inquiry_status'] == 7){ - $result['entry_status'] = 3;// 入账失败 - // 获取退款数据 - $params = array(); - $params['inquiry_no'] = $result['OrderInquiry']['inquiry_no']; - $order_inquiry_refunds = OrderInquiryRefund::getList($params); - if (!empty($order_inquiry_refunds)){ - $refund_total = 0; - foreach ($order_inquiry_refunds as $order_inquiry_refund){ - $refund_total = $refund_total + $order_inquiry_refund['refund_total']; - } + $inquiryService = new InquiryService(); - // 订单退款金额 - $result['refund_total'] = $refund_total; + // 获取医生当日接诊的订单金额 + $doctor_today_inquiry_total = Order::getDoctorDayAmountTotal($params,$date_params,1); - if (($result['OrderInquiry']['payment_amount_total'] - $refund_total) > 0){ - $result['entry_status'] = 2;// 入账成功 - }else{ - $result['entry_status'] = 3;// 入账失败 - } - } + // 获取医生当日已完成待入帐的订单金额 + $doctor_day_completed_amount_total = Order::getDoctorDayCompletedAmountTotal($params,$date_params,0); - if (!empty($result['OrderInquiry']['cancel_reason'])){ - $result['cancel_remarks'] = inquiryCancelReasonToPushString($result['OrderInquiry']['cancel_reason']); - } - }else{ - $result['entry_status'] = 0;// 未知 - } + if ($user_doctor['is_platform_deep_cooperation'] == 0){ +// // 获取医生当日接诊的订单金额 +// $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_info['client_user_id'],$date); - $result['patient_name'] = $result['OrderInquiry']['patient_name']; - $result['patient_name_mask'] = $result['OrderInquiry']['patient_name_mask']; - $result['patient_sex'] = $result['OrderInquiry']['patient_sex']; - $result['patient_age'] = $result['OrderInquiry']['patient_age']; - $result['start_time'] = $result['OrderInquiry']['reception_time']; - $result['finish_time'] = $result['OrderInquiry']['finish_time']; - $result['inquiry_type'] = $result['OrderInquiry']['inquiry_type']; - $result['inquiry_mode'] = $result['OrderInquiry']['inquiry_mode']; - } + // 获取医生当日已完成未结束的订单金额 +// $doctor_day_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_info['client_user_id'],$date); + }else{ +// // 获取医生当日接诊的订单金额-坐班医生 +// $doctor_today_inquiry_total = $inquiryService->getCooperationDoctorDayAmountTotal($user_info['client_user_id'],$date); - // 入账状态-服务包订单 - if (!empty($result['OrderServicePackage'])){ - if ($result['OrderServicePackage']['order_service_status'] == 3){ - $result['entry_status'] = 1;// 入账中 - }elseif ($result['OrderServicePackage']['order_service_status'] == 4){ - $result['entry_status'] = 2;// 入账成功 - }elseif ($result['OrderServicePackage']['order_service_status'] == 5){ - // 获取退款数据 - $params = array(); - $params['order_service_no'] = $result['OrderServicePackage']['order_service_no']; - $order_service_package_refunds = OrderServicePackageRefund::getList($params); - if (!empty($order_service_package_refunds)){ - $refund_total = 0; - foreach ($order_service_package_refunds as $order_service_package_refund){ - $refund_total = $refund_total + $order_service_package_refund['refund_total']; - } - - // 订单退款金额 - $result['refund_total'] = $refund_total; - - if (($result['OrderServicePackage']['payment_amount_total'] - $refund_total) > 0){ - $result['entry_status'] = 2;// 入账成功 - }else{ - $result['entry_status'] = 3;// 入账失败 - } - } - }else{ - $result['entry_status'] = 0;// 未知 - } - - $result['patient_name'] = $result['OrderServicePackage']['patient_name']; - $result['patient_name_mask'] = $result['OrderServicePackage']['patient_name_mask']; - $result['patient_sex'] = $result['OrderServicePackage']['patient_sex']; - $result['patient_age'] = $result['OrderServicePackage']['patient_age']; - $result['start_time'] = $result['OrderServicePackage']['start_time']; - $result['finish_time'] = $result['OrderServicePackage']['finish_time']; - } - - unset($result['OrderInquiry']); - unset($result['OrderServicePackage']); - } + // 获取医生当日已完成未结束的订单金额-坐班医生 +// $doctor_day_completed_amount_total = $inquiryService->getCooperationDoctorCompletedAmountTotal($user_info['client_user_id'],$date); } - return success($results); + + + $result = array(); + $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_inquiry_total,"0.75",2); // 今日接诊收入 + + return success($result); } } \ No newline at end of file diff --git a/app/Model/DoctorAccountDay.php b/app/Model/DoctorAccountDay.php index 9e406cf..1c348f6 100644 --- a/app/Model/DoctorAccountDay.php +++ b/app/Model/DoctorAccountDay.php @@ -115,9 +115,10 @@ class DoctorAccountDay extends Model */ public static function getDoctorMonth(array $params,array $fields = ['*']): \Hyperf\Collection\Collection { - return self::select(['month',Db::raw('SUM(total_amount) AS `total_amount`')]) + return self::select(['year','month',Db::raw('SUM(total_amount) AS `total_amount`')]) ->where($params) - ->groupBy(['month']) + ->groupBy(['year','month']) + ->orderBy('year') ->orderBy('month') ->get($fields); } diff --git a/app/Model/Order.php b/app/Model/Order.php index daf8aa5..1f71093 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -118,9 +118,9 @@ class Order extends Model * @param array $fields * @param int|null $page * @param int|null $per_page - * @return int|mixed|string + * @return array */ - public static function getDoctorCreatedDateOrderInquiryPage(array $params, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed + public static function getDoctorCreatedDateOrderInquiryPage(array $params, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array { $query = self::with(['OrderInquiry', 'OrderServicePackage'])->where($params); @@ -156,4 +156,88 @@ class Order extends Model return $data; } + + /** + * 获取医生当日预计的订单金额 + * @param array $params + * @param array $date_params 时间区间 + * @param string|int $is_platform_deep_cooperation + * @return int|null|string + */ + public static function getDoctorDayAmountTotal(array $params, array $date_params,string|int $is_platform_deep_cooperation): int|null|string + { + $query = self::where($params); + + // 问诊订单 + $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ + $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } + + $subQuery->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [4,5]) + ->whereBetween('reception_time', $date_params) + ->where('inquiry_refund_status', 0) + ->where('inquiry_pay_status', 2) + ->where('is_withdrawal', 0) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) use ($date_params) { + $subQuery->from('order_service_package') + ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') + ->whereIn('order_service_status', [3]) + ->whereBetween('start_time', $date_params) + ->where('refund_status', 0) + ->where('pay_status', 2); + }); + }); + + $result = $query->orderBy('created_at') + ->sum("amount_total");; + return $result; + } + + /** + * 获取医生当日已完成待入帐的订单金额 + * @param array $params + * @param array $date_params 时间区间 + * @param string|int $is_platform_deep_cooperation + * @return int|null|string + */ + public static function getDoctorDayCompletedAmountTotal(array $params, array $date_params,string|int $is_platform_deep_cooperation): int|null|string + { + $query = self::where($params); + + // 问诊订单 + $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation){ + $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation){ + $subQuery->from('order_inquiry'); + if ($is_platform_deep_cooperation == 1){ + $subQuery->whereNotIn('inquiry_type', [2,4]); + } + + $subQuery->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [5]) + ->whereBetween('reception_time', $date_params) + ->where('inquiry_refund_status', 0) + ->where('inquiry_pay_status', 2) + ->where('is_withdrawal', 0) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) use ($date_params) { + $subQuery->from('order_service_package') + ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') + ->whereIn('order_service_status', [3]) + ->where('finish_time','>', $date_params[0]) + ->where('refund_status', 0) + ->where('pay_status', 2); + }); + }); + + $result = $query->orderBy('created_at') + ->sum("amount_total");; + return $result; + } } diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 07c628d..9857fc6 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -292,11 +292,15 @@ class OrderInquiry extends Model * @param array $params * @param array $reception_time 接诊时间区间 * @param array $inquiry_status_params inquiry_status字段搜索条件 + * @param array $inquiry_type_not_params * @return int|mixed|string */ - public static function getDoctorAmountTotal(array $params, array $reception_time, array $inquiry_status_params): mixed + public static function getDoctorAmountTotal(array $params, array $reception_time, array $inquiry_status_params,array $inquiry_type_not_params = []): mixed { return self::where($params) + ->when($inquiry_type_not_params, function ($query, $inquiry_type_not_params) { + $query->whereNotIn('inquiry_type', $inquiry_type_not_params); + }) ->whereIn('inquiry_status', $inquiry_status_params) ->whereBetween('reception_time', $reception_time) ->orderBy('reception_time') diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index 92fa5ff..f070671 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -171,7 +171,7 @@ class OrderServicePackage extends Model /** * 获取某一时间段服务包订单-结束时间 * @param array $params - * @param array $finish_time_params 接诊时间区间 + * @param array $finish_time_params 结束时间区间 * @return Collection|array */ public static function getInquiryWithFinishTime(array $params, array $finish_time_params): Collection|array @@ -181,4 +181,38 @@ class OrderServicePackage extends Model ->orderBy('finish_time') ->get(); } + + /** + * 获取医生当日的服务包订单 + * @param array $params + * @param array $order_service_status_params + * @param array $start_time_params 开始时间区间 + * @return Collection|array + */ + public static function getDoctorDayOrderServiceWithStartTime(array $params, array $order_service_status_params,array $start_time_params): Collection|array + { + return self::where($params) + ->whereIn('order_service_status',$order_service_status_params) + ->whereIn('refund_status',[0,4,5]) + ->whereBetween('start_time', $start_time_params) + ->orderBy('start_time') + ->get(); + } + + /** + * 获取医生当日未结束的服务包订单 + * @param array $params + * @param array $order_service_status_params + * @param string $finish_time_params 当前时间 + * @return Collection|array + */ + public static function getDoctorDayNoFinishOrderService(array $params, array $order_service_status_params,string $finish_time_params): Collection|array + { + return self::where($params) + ->whereIn('order_service_status',$order_service_status_params) + ->whereIn('refund_status',[0,4,5]) + ->where('finish_time','>', $finish_time_params) + ->orderBy('start_time') + ->get(); + } } diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index f376111..9271e15 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -44,23 +44,34 @@ class DoctorAccountService extends BaseService } $inquiryService = new InquiryService(); + $OrderServicePackageService = new OrderServicePackageService(); - if ($user_doctor['is_platform_deep_cooperation'] == 0){ - // 获取医生当日接诊的订单金额 - $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_info['client_user_id'],$date); + // 获取医生当日的接诊订单金额 + $doctor_today_inquiry_total = $inquiryService->getDoctorDayAmountTotal($user_doctor['doctor_id'],$date,$user_doctor['is_platform_deep_cooperation']); - // 获取医生当日已完成未结束的订单金额 - $doctor_day_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_info['client_user_id'],$date); - }else{ - // 获取医生当日接诊的订单金额-坐班医生 - $doctor_today_inquiry_total = $inquiryService->getCooperationDoctorDayAmountTotal($user_info['client_user_id'],$date); + // 获取医生当日的服务包订单问诊金额-开始时间 + $doctor_today_service_package_total = $OrderServicePackageService->getDoctorDayAmountTotal($user_doctor['doctor_id'],$date); - // 获取医生当日已完成未结束的订单金额-坐班医生 - $doctor_day_completed_amount_total = $inquiryService->getCooperationDoctorCompletedAmountTotal($user_info['client_user_id'],$date); - } + // 医生当日的订单金额 + $doctor_today_total = bcadd($doctor_today_inquiry_total,$doctor_today_service_package_total,2); + + // 获取医生当日已完成未结束的问诊订单金额 + $doctor_day_inquiry_completed_amount_total = $inquiryService->getDoctorDayCompletedAmountTotal($user_doctor['doctor_id'],$date,$user_doctor['is_platform_deep_cooperation']); + + // 获取医生当日未完成的服务包订单问诊金额-结束时间 + $doctor_day_service_package_completed_amount_total = $OrderServicePackageService->getDoctorDayNoFinishAmountTotal($user_doctor['doctor_id'],$date); + + // 已完成待入账金额 + $doctor_day_completed_amount_total = bcadd($doctor_day_inquiry_completed_amount_total,$doctor_day_service_package_completed_amount_total,2); // 获取医生账户余额 - $balance_account = $this->getDoctorBalanceAccount($user_info['client_user_id']); + $balance_account = 0; + $params = array(); + $params['doctor_id'] = $user_info['client_user_id']; + $doctor_account = DoctorAccount::getOne($params); + if (!empty($doctor_account)) { + $balance_account = $doctor_account['balance_account']; + } // 获取医生每月账单数据 $bill = []; @@ -80,7 +91,7 @@ class DoctorAccountService extends BaseService } $result = array(); - $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_inquiry_total,"0.75",2); // 今日接诊收入 + $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_total,"0.75",2); // 今日预计收入 $result['doctor_day_completed_amount_total'] = bcmul((string)$doctor_day_completed_amount_total ,"0.75",2); // 今日已完成收入 $result['balance_account'] = bcmul((string)$balance_account ,"1",2); // 账户余额 $result['bill'] = $bill; // 账单 diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index 8917e2e..e22ab0e 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -107,7 +107,7 @@ class InquiryService extends BaseService // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); - $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'],$request_params['inquiry_mode'],$user_info['client_user_id']); + $order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'], $request_params['inquiry_mode'], $user_info['client_user_id']); if (!empty($order_inquiry_id)) { $result['status'] = 2; $result['message'] = "当前患者存在进行中的问诊订单"; @@ -170,7 +170,7 @@ class InquiryService extends BaseService } // 问诊购药 - if ($request_params['inquiry_type'] == 4){ + if ($request_params['inquiry_type'] == 4) { // 检测当前是否符合系统问诊时间 $inquiryService = new InquiryService(); $is_system_time_pass = $inquiryService->checkSystemInquiryTime($request_params['inquiry_type']); @@ -485,7 +485,7 @@ class InquiryService extends BaseService // 增加至未支付取消订单延迟队列 $time = 60 * 30; - if (\Hyperf\Config\config('app_env') == "dev"){ + if (\Hyperf\Config\config('app_env') == "dev") { $time = 60 * 5; } @@ -506,7 +506,7 @@ class InquiryService extends BaseService // 专家问诊-公益问诊 if (!empty($request_params['doctor_id']) && ($request_params['inquiry_type'] == 1 || $request_params['inquiry_type'] == 3)) { $time = 60 * 60 * 24; - if (\Hyperf\Config\config('app_env') == "dev"){ + if (\Hyperf\Config\config('app_env') == "dev") { $time = 60 * 10; } @@ -974,19 +974,19 @@ class InquiryService extends BaseService // 处理问诊回合数及时长-兼容旧数据 if (empty($order_inquiry['times_number']) || empty($order_inquiry['duration'])) { // 疑难问诊特殊处理 - if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 6 ){ + if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 6) { $params = array(); $params['doctor_id'] = $order_inquiry['doctor_id']; $params['inquiry_type'] = $order_inquiry['inquiry_type']; $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; $doctor_inquiry_config_service = DoctorInquiryConfigService::getOne($params); - if (empty($doctor_inquiry_config_service)){ + if (empty($doctor_inquiry_config_service)) { return fail(); } $order_inquiry['times_number'] = $doctor_inquiry_config_service['service_rounds']; // 服务回合数 $order_inquiry['duration'] = $doctor_inquiry_config_service['service_period'] * 24 * 60; // 服务周期 - }else{ + } else { $params = array(); $params['inquiry_type'] = $order_inquiry['inquiry_type']; $params['inquiry_mode'] = $order_inquiry['inquiry_mode']; @@ -1187,7 +1187,7 @@ class InquiryService extends BaseService $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $time = 60 * 60 * 24 * 3; - if (\Hyperf\Config\config("app_env") == "dev"){ + if (\Hyperf\Config\config("app_env") == "dev") { $time = 60; } @@ -1299,7 +1299,7 @@ class InquiryService extends BaseService // 检测是否存在同类型未完成的问诊订单 $PatientOrderService = new PatientOrderService(); - $result = $PatientOrderService->getNotFinishedOrderInquiry($order_inquiry['inquiry_type'],$order_inquiry['inquiry_mode'], $order_inquiry['patient_id']); + $result = $PatientOrderService->getNotFinishedOrderInquiry($order_inquiry['inquiry_type'], $order_inquiry['inquiry_mode'], $order_inquiry['patient_id']); if (!empty($result)) { return fail(HttpEnumCode::HTTP_ERROR, "当前患者存在进行中的问诊订单"); } @@ -1506,7 +1506,7 @@ class InquiryService extends BaseService $params = array(); $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $order_service_package_inquiry = OrderServicePackageInquiry::getOne($params); - if (empty($order_service_package_inquiry)){ + if (empty($order_service_package_inquiry)) { return success(); } @@ -1541,26 +1541,26 @@ class InquiryService extends BaseService if ($order_service_package_detail['monthly_frequency'] != 0 && !empty($order_service_package['start_time'])) { // 获取服务包当月已问诊次数 $OrderServicePackageService = new OrderServicePackageService(); - $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'],$order_service_package['order_service_type'],$order_service_package['user_id'], $order_service_package['doctor_id']); + $month_inquiry_count = $OrderServicePackageService->getCurrentMonthInquiryCount($order_service_package['start_time'], $order_service_package['order_service_type'], $order_service_package['user_id'], $order_service_package['doctor_id']); } // 处理剩余服务天数 $finish_day = null; - if (!empty($order_service_package['finish_time'])){ + if (!empty($order_service_package['finish_time'])) { $finish_day = ceil((strtotime($order_service_package['finish_time']) - time()) / 60 / 60 / 24); } // 获取剩余药品数量 $remaining_quantity = 0; - if ($order_service_package['order_service_type'] == 1){ + if ($order_service_package['order_service_type'] == 1) { // 健康包商品数据 $params = array(); $params['order_service_id'] = $order_service_package['order_service_id']; $order_service_package_products = OrderServicePackageProduct::getList($params); - if (!empty($order_service_package_products)){ - foreach ($order_service_package_products as $order_service_package_product){ + if (!empty($order_service_package_products)) { + foreach ($order_service_package_products as $order_service_package_product) { $remaining_quantity += $order_service_package_product['quantity'] - $order_service_package_product['used_quantity']; - if ($remaining_quantity < 0){ + if ($remaining_quantity < 0) { $remaining_quantity = 0; } } @@ -1629,9 +1629,10 @@ class InquiryService extends BaseService * 状态:已接诊 * @param string $doctor_id * @param string $date + * @param string|int $is_platform_deep_cooperation 是否坐班医生 * @return float */ - public function getDoctorDayAmountTotal(string $doctor_id, string $date): float + public function getDoctorDayAmountTotal(string $doctor_id, string $date, string|int $is_platform_deep_cooperation): float { // 获取当天开始时间 $start_date = date('Y-m-d 00:00:00', strtotime($date)); @@ -1650,41 +1651,12 @@ class InquiryService extends BaseService $inquiry_status_params = [4, 5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params); + $inquiry_type_not_params = []; + if ($is_platform_deep_cooperation) { + $inquiry_type_not_params = [2, 4]; + } - return $amount_total_sum ?: 0; - } - - /** - * 获取医生当日接诊的订单金额-坐班医生 - * 状态:已接诊 - * 排除快速-购药 - * @param string $doctor_id - * @param string $date - * @return float - */ - public function getCooperationDoctorDayAmountTotal(string $doctor_id, string $date): float - { - // 获取当天开始时间 - $start_date = date('Y-m-d 00:00:00', strtotime($date)); - - // 获取当天结束时间 - $end_date = date('Y-m-d 23:59:59', strtotime($date)); - - // 获取医生当日接诊订单金额 - $params = array(); - $params['doctor_id'] = $doctor_id; - $params['inquiry_refund_status'] = 0; // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - $params['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $params['is_withdrawal'] = 0; // 是否提现(0:否 1:是 2:提现中) - - $reception_time = [$start_date, $end_date]; - - $inquiry_status_params = [4, 5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - - $inquiry_type_not_params = [2, 4]; - - $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); + $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); return $amount_total_sum ?: 0; } @@ -1694,9 +1666,10 @@ class InquiryService extends BaseService * 状态:已完成 * @param string $doctor_id * @param string $date + * @param string|int $is_platform_deep_cooperation 是否坐班医生 * @return float */ - public function getDoctorDayCompletedAmountTotal(string $doctor_id, string $date): float + public function getDoctorDayCompletedAmountTotal(string $doctor_id, string $date,string|int $is_platform_deep_cooperation): float { // 获取当天开始时间 $start_date = date('Y-m-d 00:00:00', strtotime($date)); @@ -1715,41 +1688,11 @@ class InquiryService extends BaseService $inquiry_status_params = [5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params); + if ($is_platform_deep_cooperation) { + $inquiry_type_not_params = [2, 4]; + } - return $amount_total_sum ?: 0; - } - - /** - * 获取医生当日已完成未结束的订单金额-坐班医生 - * 状态:已完成 - * 排除快速-购药 - * @param string $doctor_id - * @param string $date - * @return float - */ - public function getCooperationDoctorCompletedAmountTotal(string $doctor_id, string $date): float - { - // 获取当天开始时间 - $start_date = date('Y-m-d 00:00:00', strtotime($date)); - - // 获取当天结束时间 - $end_date = date('Y-m-d 23:59:59', strtotime($date)); - - // 获取医生当日接诊订单金额 - $params = array(); - $params['doctor_id'] = $doctor_id; - $params['inquiry_refund_status'] = 0; // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭) - $params['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) - $params['is_withdrawal'] = 0; // 是否提现(0:否 1:是 2:提现中) - - $reception_time = [$start_date, $end_date]; - - $inquiry_status_params = [5]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - - $inquiry_type_not_params = [2, 4]; - - $amount_total_sum = OrderInquiry::getCooperationDoctorAmountTotal($params, $reception_time, $inquiry_status_params, $inquiry_type_not_params); + $amount_total_sum = OrderInquiry::getDoctorAmountTotal($params, $reception_time, $inquiry_status_params,$inquiry_type_not_params); return $amount_total_sum ?: 0; } @@ -2046,7 +1989,7 @@ class InquiryService extends BaseService } } } - }catch (\Throwable $e){ + } catch (\Throwable $e) { throw new BusinessException($e->getMessage()); } @@ -2247,12 +2190,12 @@ class InquiryService extends BaseService * @param string $end_date * @return array */ - public function getPatientServiceInquiry(string|int $order_service_type,string $patient_id, string $doctor_id,string $start_date,string $end_date): array + public function getPatientServiceInquiry(string|int $order_service_type, string $patient_id, string $doctor_id, string $start_date, string $end_date): array { - if ($order_service_type == 1){ + if ($order_service_type == 1) { $inquiry_type = 1; $inquiry_mode = 8; - }else{ + } else { $inquiry_type = 1; $inquiry_mode = 9; } @@ -2268,10 +2211,10 @@ class InquiryService extends BaseService $created_at = [$start_date, $end_date]; - $inquiry_status_params = [1,2,3,4,5,6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) + $inquiry_status_params = [1, 2, 3, 4, 5, 6]; // 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) - $result = OrderInquiry::getInquiryWithCreateTime($params,$created_at,$inquiry_status_params); - if (empty($result)){ + $result = OrderInquiry::getInquiryWithCreateTime($params, $created_at, $inquiry_status_params); + if (empty($result)) { return []; } diff --git a/app/Services/OrderServicePackageService.php b/app/Services/OrderServicePackageService.php index 50aee1c..7f94f26 100644 --- a/app/Services/OrderServicePackageService.php +++ b/app/Services/OrderServicePackageService.php @@ -1359,4 +1359,81 @@ class OrderServicePackageService extends BaseService return false; } + /** + * 获取医生当日的服务包订单问诊金额-开始时间 + * @param string $doctor_id + * @param string $date + * @return int|string + */ + public function getDoctorDayAmountTotal(string $doctor_id, string $date): int|string + { + $amount_total = 0; + + // 获取当天开始时间 + $start_date = date('Y-m-d 00:00:00', strtotime($date)); + + // 获取当天结束时间 + $end_date = date('Y-m-d 23:59:59', strtotime($date)); + + // 获取医生当日服务包订单 + $params = array(); + $params['doctor_id'] = $doctor_id; + + $order_service_status_params = [3]; + + $start_time_params = [$start_date,$end_date]; + $order_service_packages = OrderServicePackage::getDoctorDayOrderServiceWithStartTime($params,$order_service_status_params,$start_time_params); + foreach ($order_service_packages as $order_service_package){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + // 计算本次问诊服务包问诊金额 + $amount_total = bcmul( + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ); + } + } + + return $amount_total; + } + + /** + * 获取医生当日未完成的服务包订单问诊金额-结束时间 + * @param string $doctor_id + * @param string $date + * @return int|string + */ + public function getDoctorDayNoFinishAmountTotal(string $doctor_id, string $date): int|string + { + $amount_total = 0; + + // 获取医生当日服务包订单 + $params = array(); + $params['doctor_id'] = $doctor_id; + + $order_service_status_params = [3]; + + $start_time_params = date('Y-m-d H:i:s', strtotime($date)); + $order_service_packages = OrderServicePackage::getDoctorDayNoFinishOrderService($params,$order_service_status_params,$start_time_params); + foreach ($order_service_packages as $order_service_package){ + // 获取订单详情数据 + $params = array(); + $params['order_service_no'] = $order_service_package['order_service_no']; + $order_service_package_detail = OrderServicePackageDetail::getOne($params); + if (!empty($order_service_package_detail)){ + // 计算本次问诊服务包问诊金额 + $amount_total = bcmul( + (string)$order_service_package_detail['service_count'], + (string)$order_service_package_detail['single_inquiry_price'], + 3 + ); + } + } + + return $amount_total; + } } \ No newline at end of file