我的账户数据修改-获取我的账户数据

This commit is contained in:
wucongxing8150 2024-04-22 14:30:46 +08:00
parent 155ce8d7aa
commit 5d79f4795b
9 changed files with 426 additions and 205 deletions

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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')

View File

@ -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();
}
}

View File

@ -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; // 账单

View File

@ -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 [];
}

View File

@ -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;
}
}