我的账户数据修改-获取我的账户数据
This commit is contained in:
parent
155ce8d7aa
commit
5d79f4795b
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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')
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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; // 账单
|
||||
|
||||
@ -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 [];
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user