hospital-applets-api/app/Model/OrderInquiry.php

342 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace App\Model;
use Hyperf\Database\Model\Collection;
use Hyperf\Database\Model\Relations\HasOne;
use Hyperf\Database\Query\Builder;
use Hyperf\Snowflake\Concern\Snowflake;
/**
* @property int $order_inquiry_id 主键id
* @property int $user_id 用户id-患者
* @property int $patient_id 患者id
* @property int $doctor_id 医生id未分配时为null
* @property int $family_id 家庭成员id就诊用户
* @property int $inquiry_type 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
* @property int $inquiry_mode 订单问诊方式1:图文 2:视频 3:语音 4:电话 5:会员)
* @property int $inquiry_status 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
* @property int $is_delete 删除状态0:否 1:是)
* @property int $inquiry_refund_status 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
* @property int $inquiry_pay_channel 支付渠道1:小程序支付 2:微信扫码支付)
* @property int $inquiry_pay_status 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
* @property string $inquiry_no 系统订单编号
* @property string $escrow_trade_no 第三方支付流水号
* @property string $amount_total 订单金额
* @property string $coupon_amount_total 优惠卷总金额
* @property string $payment_amount_total 实际付款金额
* @property string $pay_time 支付时间
* @property string $reception_time 接诊时间(已接诊)
* @property string $complete_time 订单完成时间(问诊完成时间)
* @property string $finish_time 订单结束时间
* @property int $statistics_status 订单统计状态0:未统计 1:已统计 2:统计失败)
* @property string $statistics_time 订单统计时间
* @property int $is_withdrawal 是否提现0:否 1:是 2:提现中)
* @property string $withdrawal_time 提现时间
* @property string $cancel_time 订单取消时间
* @property int $cancel_reason 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
* @property string $cancel_remarks 取消订单备注(自动添加)
* @property string $patient_name 患者姓名-就诊人
* @property string $patient_name_mask 患者姓名-就诊人(掩码)
* @property int $patient_sex 患者性别-就诊人0:未知 1:男 2:女)
* @property int $patient_age 患者年龄-就诊人
* @property \Carbon\Carbon $created_at 创建时间
* @property \Carbon\Carbon $updated_at 修改时间
* @property-read OrderInquiryCase $OrderInquiryCase
* @property-read UserDoctor $UserDoctor
*/
class OrderInquiry extends Model
{
use Snowflake;
/**
* The table associated with the model.
*/
protected ?string $table = 'order_inquiry';
/**
* The attributes that are mass assignable.
*/
protected array $fillable = ['order_inquiry_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'inquiry_type', 'inquiry_mode', 'inquiry_status', 'is_delete', 'inquiry_refund_status', 'inquiry_pay_channel', 'inquiry_pay_status', 'inquiry_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'reception_time', 'complete_time', 'finish_time', 'statistics_status', 'statistics_time', 'is_withdrawal', 'withdrawal_time', 'cancel_time', 'cancel_reason', 'cancel_remarks', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at'];
protected string $primaryKey = "order_inquiry_id";
/**
* 关联医生表
*/
public function UserDoctor(): HasOne
{
return $this->hasOne(UserDoctor::class, 'doctor_id','doctor_id');
}
/**
* 关联问诊病例表
*/
public function OrderInquiryCase(): HasOne
{
return $this->hasOne(OrderInquiryCase::class, 'order_inquiry_id','order_inquiry_id');
}
/**
* 获取问诊订单-单条
* @param array $params
* @param array $fields
* @return object|null
*/
public static function getOne(array $params, array $fields = ['*']): object|null
{
return self::where($params)->first($fields);
}
/**
* 新增问诊订单-批量
* @param array $data 新增数据
* @return \Hyperf\Database\Model\Model|OrderInquiry
*/
public static function addOrderInquiry(array $data): \Hyperf\Database\Model\Model|OrderInquiry
{
return self::create($data);
}
/**
* 获取信息-多条
* @param array $params
* @param array $fields
* @return object|null
*/
public static function getList(array $params, array $fields = ['*']): object|null
{
return self::where($params)->get($fields);
}
/**
* 获取数量
* @param array $params
* @return int
*/
public static function getCount(array $params): int
{
return self::where($params)->count();
}
/**
* 获取单条,排序
* @param array $params
* @param array $fields
* @return object|null
*/
public static function getOrderOne(array $params, array $fields = ['*']): object|null
{
return self::where($params)->orderBy('created_at','desc')->first($fields);
}
// public static function
/**
* 获取医生某一时间段接诊订单分页数据
* 已结束
* @param array $params
* @param array $reception_time 接诊时间区间 ['2023-01-02','2023-01-03']
* @param array $fields
* @param int|null $page
* @param int|null $per_page
* @return int|mixed|string
*/
public static function getDoctorDateOrderInquiryPage(array $params, array $reception_time, array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed
{
$raw = self::where($params)
->whereBetween('finish_time',$reception_time)
->orderBy('finish_time')
->paginate($per_page, $fields, "page", $page);
$data = array();
$data['current_page'] = $raw->currentPage();// 当前页码
$data['total'] = $raw->total();//数据总数
$data['data'] = $raw->items();//数据
$data['per_page'] = $raw->perPage();//每页个数
$data['last_page'] = $raw->lastPage();//最后一页
return $data;
}
/**
* 获取医生接诊订单分页数据
* 已结束
* @param array $params
* @param array $fields
* @param int|null $page
* @param int|null $per_page
* @return int|mixed|string
*/
public static function getDoctorOrderInquiryPage(array $params,array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed
{
$raw = self::where($params)
->orderBy('finish_time')
->paginate($per_page, $fields, "page", $page);
$data = array();
$data['current_page'] = $raw->currentPage();// 当前页码
$data['total'] = $raw->total();//数据总数
$data['data'] = $raw->items();//数据
$data['per_page'] = $raw->perPage();//每页个数
$data['last_page'] = $raw->lastPage();//最后一页
return $data;
}
/**
* 获取医生某一时间段,某种状态的订单金额
* @param array $params
* @param array $reception_time 接诊时间区间
* @param array $inquiry_status_params inquiry_status字段搜索条件
* @return int|mixed|string
*/
public static function getOrderInquiryBetweenTimeAmountTotalSum(array $params, array $reception_time, array $inquiry_status_params): mixed
{
return self::where($params)
->whereIn('inquiry_status',$inquiry_status_params)
->whereBetween('reception_time',$reception_time)
->orderBy('reception_time')
->sum("amount_total");
}
/**
* 获取医生某种状态的订单金额
* @param array $params
* @param array $inquiry_status_params inquiry_status字段搜索条件
* @return int|mixed|string
*/
public static function getOrderInquiryAmountTotalSum(array $params, array $inquiry_status_params): mixed
{
return self::where($params)
->whereIn('inquiry_status',$inquiry_status_params)
->orderBy('reception_time')
->sum("amount_total");
}
/**
* 获取某种状态的所有订单
* @param array $params
* @param array $inquiry_status_params
* @param array $fields
* @return Collection|array
*/
public static function getInquiryStatusWithDoctorList(array $params, array $inquiry_status_params, array $fields = ["*"]): Collection|array
{
return self::with([
'UserDoctor' => function ($query){
$query->orderBy('is_platform_deep_cooperation', 'desc');
}
])
->where($params)
->whereIn('inquiry_status',$inquiry_status_params)
->get($fields);
}
/**
* 获取某种状态的所有订单
* @param array $params
* @param array $inquiry_status_params
* @param array $not_in_params
* @param array $fields
* @return Collection|array
*/
public static function getInquiryStatusWithDoctorNotInList(array $params, array $inquiry_status_params,array $not_in_params, array $fields = ["*"]): Collection|array
{
return self::with([
'UserDoctor' => function ($query){
$query->orderBy('is_platform_deep_cooperation', 'desc');
}
])
->where($params)
->whereIn('inquiry_status',$inquiry_status_params)
->whereNotIn('doctor_id',$not_in_params)
->get($fields);
}
/**
* 获取某种状态的订单
* @param array $params
* @param array $inquiry_status_params
* @param array $fields
* @return object|null
*/
public static function getInquiryStatusOne(array $params,array $inquiry_status_params,array $fields = ["*"]): object|null
{
return self::where($params)
->whereIn('inquiry_status',$inquiry_status_params)
->first($fields);
}
/**
* 修改
* @param array $params
* @param array $data
* @return int
*/
public static function edit(array $params = [], array $data = []): int
{
return self::where($params)->update($data);
}
/**
* 获取问诊订单分页
* 已结束
* @param array $params
* @param array $inquiry_status_params
* @param array $fields
* @param int|null $page
* @param int|null $per_page
* @return int|mixed|string
*/
public static function getPatientOrderInquiryPage(array $params,array $inquiry_status_params ,array $fields = ["*"], int $page = null, ?int $per_page = 10): mixed
{
$raw = self::with([
'OrderInquiryCase:inquiry_case_id,order_inquiry_id,disease_desc',
])
->where($params)
->when($inquiry_status_params, function ($query, $inquiry_status_params) {
$query->whereIn('inquiry_status',$inquiry_status_params);
})
->orderBy('created_at','desc')
->paginate($per_page, $fields, "page", $page);
$data = array();
$data['current_page'] = $raw->currentPage();// 当前页码
$data['total'] = $raw->total();//数据总数
$data['data'] = $raw->items();//数据
$data['per_page'] = $raw->perPage();//每页个数
$data['last_page'] = $raw->lastPage();//最后一页
return $data;
}
/**
* 获取信息-多条
* @param array $params
* @param array $in_params
* @param array $fields
* @return object|null
*/
public static function getInList(array $params, array $in_params,array $fields = ['*']): object|null
{
return self::where($params)->whereIn('order_inquiry_id',$in_params)->get($fields);
}
/**
* 获取某种状态的订单总数
* @param array $params
* @param array $inquiry_status_params
* @return int
*/
public static function getInquiryStatusCount(array $params, array $inquiry_status_params): int
{
return self::where($params)->whereIn("inquiry_status",$inquiry_status_params)->count();
}
}