From 1a164b7cea045eada33d36a9953ce2016f209f79 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Tue, 7 May 2024 18:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=88=91=E7=9A=84=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E6=95=B0=E6=8D=AE-=E8=8E=B7=E5=8F=96=E5=8C=BB?= =?UTF-8?q?=E7=94=9F=E6=9C=8D=E5=8A=A1=E5=8C=85=E6=AF=8F=E6=9C=88=E8=B4=A6?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Model/Order.php | 37 +++++++------ app/Model/OrderInquiry.php | 26 +++++++++ app/Model/OrderServicePackage.php | 18 +++++++ app/Services/DoctorAccountService.php | 76 ++++++++++++++++++++------- 4 files changed, 123 insertions(+), 34 deletions(-) diff --git a/app/Model/Order.php b/app/Model/Order.php index 6911d01..1789018 100644 --- a/app/Model/Order.php +++ b/app/Model/Order.php @@ -116,7 +116,7 @@ class Order extends Model /** * 获取医生某一时间段收益明细分页数据 - * @param array $params + * @param string|int $doctor_id * @param array $date_params 时间区间 * @param string|int $is_platform_deep_cooperation * @param array $fields @@ -124,27 +124,34 @@ class Order extends Model * @param int|null $per_page * @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): array + public static function getDoctorCreatedDateOrderInquiryPage(string|int $doctor_id, array $date_params,string|int $is_platform_deep_cooperation,array $fields = ["*"], int $page = null, ?int $per_page = 10): array { + $params = array(); + $params['doctor_id'] = $doctor_id; + $query = self::with(['OrderInquiry', 'OrderServicePackage']) ->whereIn('order_type',[1,4,5]) ->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]); - } + $query = $query->where(function ($query) use ($date_params,$is_platform_deep_cooperation,$doctor_id){ + $query->whereExists(function ($subQuery) use ($date_params,$is_platform_deep_cooperation,$doctor_id){ + $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', [6,7]) - ->whereBetween('reception_time', $date_params) - ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); - }) - ->orWhereExists(function ($subQuery) use ($date_params) { - $subQuery->from('order_service_package') + $subQuery->where('doctor_id', $doctor_id) + ->whereNotIn('inquiry_mode', [7,8,9]) + ->where('doctor_id', $doctor_id) + ->whereIn('inquiry_status', [6,7]) + ->whereBetween('reception_time', $date_params) + ->whereRaw('gdxz_order.order_id = gdxz_order_inquiry.order_id'); + }) + ->orWhereExists(function ($subQuery) use ($date_params,$doctor_id) { + $subQuery->from('order_service_package'); + + $subQuery->where('doctor_id', $doctor_id) ->whereRaw('gdxz_order.order_id = gdxz_order_service_package.order_id') ->whereIn('order_service_status', [4,5,6,7]) ->whereBetween('start_time', $date_params); diff --git a/app/Model/OrderInquiry.php b/app/Model/OrderInquiry.php index 5bc1425..9176d28 100644 --- a/app/Model/OrderInquiry.php +++ b/app/Model/OrderInquiry.php @@ -607,4 +607,30 @@ class OrderInquiry extends Model ->orderBy('created_at') ->get(); } + + /** + * 获取医生每月账单数据 + * @param array $params + * @param string $year + * @param string|int $is_platform_deep_cooperation + * @param array $fields + * @return \Hyperf\Collection\Collection + */ + public static function getMonthlyGroupBill(array $params, string $year,string|int $is_platform_deep_cooperation,array $fields = ["*"]): \Hyperf\Collection\Collection + { + $query = self::select([Db::raw('YEAR(reception_time) AS `year`') ,Db::raw('MONTH(reception_time) AS `month`')]) + ->where($params) + ->whereNotIn('inquiry_mode', [7,8,9]) + ->whereIn('inquiry_status', [6]) + ->where(Db::raw('YEAR(reception_time)'), $year); + + if ($is_platform_deep_cooperation == 1){ + $query->whereNotIn('inquiry_type', [2,4]); + } + + $result = $query->groupBy([Db::raw('YEAR(reception_time)'),Db::raw('MONTH(reception_time)')]) + ->get($fields); + + return $result; + } } diff --git a/app/Model/OrderServicePackage.php b/app/Model/OrderServicePackage.php index f070671..f2ca614 100644 --- a/app/Model/OrderServicePackage.php +++ b/app/Model/OrderServicePackage.php @@ -9,6 +9,7 @@ namespace App\Model; use Carbon\Carbon; use Hyperf\Database\Model\Collection; use Hyperf\Database\Model\Relations\HasOne; +use Hyperf\DbConnection\Db; use Hyperf\Snowflake\Concern\Snowflake; /** @@ -215,4 +216,21 @@ class OrderServicePackage extends Model ->orderBy('start_time') ->get(); } + + /** + * 获取医生每月账单数据 + * @param array $params + * @param string $year + * @param array $fields + * @return \Hyperf\Collection\Collection + */ + public static function getMonthlyGroupBill(array $params, string $year,array $fields = ["*"]): \Hyperf\Collection\Collection + { + return self::select([Db::raw('YEAR(start_time) AS `year`') ,Db::raw('MONTH(start_time) AS `month`')]) + ->where($params) + ->whereIn('order_service_status', [3,4,5]) + ->where(Db::raw('YEAR(start_time)'), $year) + ->groupBy([Db::raw('YEAR(start_time)'),Db::raw('MONTH(start_time)')]) + ->get($fields); + } } diff --git a/app/Services/DoctorAccountService.php b/app/Services/DoctorAccountService.php index 901cad6..3bc1f19 100644 --- a/app/Services/DoctorAccountService.php +++ b/app/Services/DoctorAccountService.php @@ -75,22 +75,26 @@ class DoctorAccountService extends BaseService $balance_account = $doctor_account['balance_account']; } - // 获取医生每月账单数据 - $bill = []; + // 获取医生问诊每月账单数据 +// $bill = []; +// +// $params = array(); +// $params['doctor_id'] = $user_info['client_user_id']; +// $params['year'] = $year; +// $doctor_account_days = DoctorAccountDay::getDoctorMonth($params); +// if (!empty($doctor_account_days)) { +// foreach ($doctor_account_days as $doctor_account_day) { +// $data = array(); +// $data['total_amount'] = bcmul((string)$doctor_account_day['total_amount'], 1, 2); +// $data['month'] = $doctor_account_day['month']; +// $bill[] = $data; +// } +// unset($doctor_account_days); +// } - $params = array(); - $params['doctor_id'] = $user_info['client_user_id']; - $params['year'] = $year; - $doctor_account_days = DoctorAccountDay::getDoctorMonth($params); - if (!empty($doctor_account_days)) { - foreach ($doctor_account_days as $doctor_account_day) { - $data = array(); - $data['total_amount'] = bcmul((string)$doctor_account_day['total_amount'], 1, 2); - $data['month'] = $doctor_account_day['month']; - $bill[] = $data; - } - unset($doctor_account_days); - } + // 获取医生服务包每月账单数据 + $year = date('Y',strtotime($year)); + $bill = $this->getDoctorMonthlyGroupBill($user_doctor,$year); $result = array(); $result['doctor_today_inquiry_total'] = bcmul((string)$doctor_today_total, "0.75", 2); // 今日预计收入 @@ -121,9 +125,6 @@ class DoctorAccountService extends BaseService return fail(); } - $params = array(); - $params['doctor_id'] = $user_doctor['doctor_id']; - // 获取当月开始时间 $start_date = date('Y-m-01 00:00:00', strtotime($date)); @@ -133,7 +134,7 @@ class DoctorAccountService extends BaseService $date_params = [$start_date, $end_date]; - $results = Order::getDoctorCreatedDateOrderInquiryPage($params, $date_params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); + $results = Order::getDoctorCreatedDateOrderInquiryPage($user_doctor['doctor_id'], $date_params, $user_doctor['is_platform_deep_cooperation'], ['*'], $page, $per_page); if (!empty($results['data'])) { $OrderService = new OrderService(); @@ -865,4 +866,41 @@ class DoctorAccountService extends BaseService return $income_tax; } + + /** + * 获取医生每月账单数据 + * @param array|object $user_doctor + * @param string $year + * @return array + */ + public function getDoctorMonthlyGroupBill(array|object $user_doctor,string $year): array + { + // 获取医生服务包每月账单数据 + $params = array(); + $params['doctor_id'] = $user_doctor['doctor_id']; + $order_service_package = OrderServicePackage::getMonthlyGroupBill($params,$year); + if (!empty($order_service_package)){ + $order_service_package = $order_service_package->toArray(); + } + + // 获取医生问诊每月账单数据 + $params = array(); + $params['doctor_id'] = $user_doctor['doctor_id'];; + $order_inquiry = OrderInquiry::getMonthlyGroupBill($params,$year,$user_doctor['is_platform_deep_cooperation']); + if (!empty($order_inquiry)){ + $order_inquiry = $order_inquiry->toArray(); + } + + // 处理月账单数据 + // 合并两个数组 + $merged = array_merge($order_service_package, $order_inquiry); + + // 去除重复的元素 + $bill = array_unique($merged, SORT_REGULAR); + + // 重新索引数组 + $bill = array_values($bill); + + return $bill; + } } \ No newline at end of file