新增获取药品订单列表接口

This commit is contained in:
wucongxing 2023-03-11 14:42:01 +08:00
parent e5845adf01
commit ef2289b1f7
9 changed files with 728 additions and 440 deletions

View File

@ -84,65 +84,9 @@ class InquiryController extends AbstractController
return $this->response->json($data); return $this->response->json($data);
} }
/**
* 获取患者问诊订单列表
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function getPatientInquiryOrderList(): ResponseInterface
{
$request = $this->container->get(InquiryRequest::class);
$request->scene('getPatientInquiryOrderList')->validateResolved();
$InquiryService = new InquiryService();
$data = $InquiryService->getPatientInquiryOrderList();
return $this->response->json($data);
}
/**
* 获取患者问诊订单详情
* @return ResponseInterface
*/
public function getPatientInquiryOrderInfo(): ResponseInterface
{
$InquiryService = new InquiryService();
$data = $InquiryService->getPatientInquiryOrderInfo();
return $this->response->json($data);
}
/**
* 取消患者问诊订单
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function putCancelPatientInquiryOrder(): ResponseInterface
{
$InquiryService = new InquiryService();
$data = $InquiryService->putCancelPatientInquiryOrder();
return $this->response->json($data);
}
/**
* 删除问诊订单
* @return ResponseInterface
*/
public function deletePatientInquiryOrder(): ResponseInterface
{
$InquiryService = new InquiryService();
$data = $InquiryService->deletePatientInquiryOrder();
return $this->response->json($data);
}
/**
* 问诊订单取消支付
* @return ResponseInterface
*/
public function putPatientInquiryOrderCancelPay(): ResponseInterface
{
$InquiryService = new InquiryService();
$data = $InquiryService->putPatientInquiryOrderCancelPay();
return $this->response->json($data);
}
} }

View File

@ -0,0 +1,95 @@
<?php
namespace App\Controller;
use App\Request\InquiryRequest;
use App\Request\PatientOrderRequest;
use App\Services\InquiryService;
use App\Services\PatientOrderService;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;
/**
* 患者订单
*/
class PatientOrderController extends AbstractController
{
/**
* 获取患者问诊订单列表
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function getPatientInquiryOrderList(): ResponseInterface
{
$request = $this->container->get(PatientOrderRequest::class);
$request->scene('getPatientInquiryOrderList')->validateResolved();
$PatientOrderService = new PatientOrderService();
$data = $PatientOrderService->getPatientInquiryOrderList();
return $this->response->json($data);
}
/**
* 获取患者问诊订单详情
* @return ResponseInterface
*/
public function getPatientInquiryOrderInfo(): ResponseInterface
{
$PatientOrderService = new PatientOrderService();
$data = $PatientOrderService->getPatientInquiryOrderInfo();
return $this->response->json($data);
}
/**
* 取消患者问诊订单
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function putCancelPatientInquiryOrder(): ResponseInterface
{
$PatientOrderService = new PatientOrderService();
$data = $PatientOrderService->putCancelPatientInquiryOrder();
return $this->response->json($data);
}
/**
* 删除问诊订单
* @return ResponseInterface
*/
public function deletePatientInquiryOrder(): ResponseInterface
{
$PatientOrderService = new PatientOrderService();
$data = $PatientOrderService->deletePatientInquiryOrder();
return $this->response->json($data);
}
/**
* 问诊订单取消支付
* @return ResponseInterface
*/
public function putPatientInquiryOrderCancelPay(): ResponseInterface
{
$PatientOrderService = new PatientOrderService();
$data = $PatientOrderService->putPatientInquiryOrderCancelPay();
return $this->response->json($data);
}
/**
* 获取药品订单列表
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function getPatientProductOrderList(): ResponseInterface
{
$request = $this->container->get(PatientOrderRequest::class);
$request->scene('getPatientProductOrderList')->validateResolved();
$PatientOrderService = new PatientOrderService();
$data = $PatientOrderService->getPatientProductOrderList();
return $this->response->json($data);
}
}

View File

@ -223,6 +223,7 @@ class OrderInquiry extends Model
* 获取问诊订单分页 * 获取问诊订单分页
* 已结束 * 已结束
* @param array $params * @param array $params
* @param array $inquiry_status_params
* @param array $fields * @param array $fields
* @param int|null $page * @param int|null $page
* @param int|null $per_page * @param int|null $per_page

View File

@ -7,6 +7,8 @@ namespace App\Model;
use Hyperf\Database\Model\Collection; use Hyperf\Database\Model\Collection;
use Hyperf\Database\Model\Relations\HasMany;
use Hyperf\Database\Model\Relations\HasOne;
use Hyperf\Snowflake\Concern\Snowflake; use Hyperf\Snowflake\Concern\Snowflake;
/** /**
@ -15,11 +17,13 @@ use Hyperf\Snowflake\Concern\Snowflake;
* @property int $order_prescription_id 订单-处方id * @property int $order_prescription_id 订单-处方id
* @property int $doctor_id 医生id * @property int $doctor_id 医生id
* @property int $patient_id 患者id * @property int $patient_id 患者id
* @property int $family_id 家庭成员id就诊用户
* @property string $order_product_no 订单编号 * @property string $order_product_no 订单编号
* @property string $escrow_trade_no 第三方支付流水号 * @property string $escrow_trade_no 第三方支付流水号
* @property int $order_product_status 订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:完成 6:取消) * @property int $order_product_status 订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:取消)
* @property int $pay_channel 支付渠道1:小程序支付 2:微信扫码支付) * @property int $pay_channel 支付渠道1:小程序支付 2:微信扫码支付)
* @property int $pay_status 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款) * @property int $pay_status 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
* @property int $is_delete 删除状态0: 1:是)
* @property int $cancel_reason 订单取消原因1:主动取消 2:复核失败/库存不足 3:支付超时) * @property int $cancel_reason 订单取消原因1:主动取消 2:复核失败/库存不足 3:支付超时)
* @property string $amount_total 订单金额 * @property string $amount_total 订单金额
* @property string $payment_amount_total 实际付款金额 * @property string $payment_amount_total 实际付款金额
@ -56,10 +60,18 @@ class OrderProduct extends Model
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
*/ */
protected array $fillable = ['order_product_id', 'order_inquiry_id', 'order_prescription_id', 'doctor_id', 'patient_id', 'order_product_no', 'escrow_trade_no', 'order_product_status', 'pay_channel', 'pay_status', 'cancel_reason', 'amount_total', 'payment_amount_total', 'logistics_fee', 'logistics_no', 'pay_time', 'remarks', 'refund_status', 'cancel_remarks', 'province_id', 'province', 'city_id', 'city', 'county_id', 'county', 'address', 'address_mask', 'consignee_name', 'consignee_name_mask', 'consignee_tel', 'consignee_tel_mask', 'created_at', 'updated_at']; protected array $fillable = ['order_product_id', 'order_inquiry_id', 'order_prescription_id', 'doctor_id', 'patient_id', 'family_id', 'order_product_no', 'escrow_trade_no', 'order_product_status', 'pay_channel', 'pay_status', 'is_delete', 'cancel_reason', 'amount_total', 'payment_amount_total', 'logistics_fee', 'logistics_no', 'pay_time', 'remarks', 'refund_status', 'cancel_remarks', 'province_id', 'province', 'city_id', 'city', 'county_id', 'county', 'address', 'address_mask', 'consignee_name', 'consignee_name_mask', 'consignee_tel', 'consignee_tel_mask', 'created_at', 'updated_at'];
protected string $primaryKey = "order_product_id"; protected string $primaryKey = "order_product_id";
/**
* 关联订单商品item表
*/
public function OrderProductItem(): HasMany
{
return $this->HasMany(OrderProductItem::class, 'order_product_id','order_product_id');
}
/** /**
* 获取信息-单条 * 获取信息-单条
* @param array $params * @param array $params
@ -101,4 +113,30 @@ class OrderProduct extends Model
{ {
return self::where($params)->count(); return self::where($params)->count();
} }
/**
* 获取药品订单分页
* @param array $params
* @param array $fields
* @param int|null $page
* @param int|null $per_page
* @return array
*/
public static function getPatientOrderProductPage(array $params,array $fields = ["*"], int $page = null, ?int $per_page = 10): array
{
$result = self::with([
"OrderProductItem:product_item_id,order_product_id,product_id,product_name,amount,manufacturer,product_cover_img,product_spec",
])
->where($params)
->paginate($per_page, $fields, "page", $page);
$data = array();
$data['current_page'] = $result->currentPage();// 当前页码
$data['total'] = $result->total();// 数据总数
$data['data'] = $result->items();// 数据
$data['per_page'] = $result->perPage();// 每页个数
$data['last_page'] = $result->lastPage();// 最后一页
return $data;
}
} }

View File

@ -25,6 +25,7 @@ use Hyperf\Snowflake\Concern\Snowflake;
* @property string $product_spec 商品规格 * @property string $product_spec 商品规格
* @property \Carbon\Carbon $created_at 创建时间 * @property \Carbon\Carbon $created_at 创建时间
* @property \Carbon\Carbon $updated_at 修改时间 * @property \Carbon\Carbon $updated_at 修改时间
* @property-read Product $Product
*/ */
class OrderProductItem extends Model class OrderProductItem extends Model
{ {

View File

@ -0,0 +1,99 @@
<?php
declare(strict_types=1);
namespace App\Request;
use App\Constants\HttpEnumCode;
use Hyperf\Validation\Request\FormRequest;
class PatientOrderRequest extends FormRequest
{
protected array $scenes = [
'getPatientInquiryOrderList' => [ // 获取患者问诊订单列表
'inquiry_status',// 问诊订单状态0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消
'family_id',// 家庭成员id就诊用户
],
'getPatientProductOrderList' => [ // 获取药品订单列表
'order_product_status',// 订单状态0全部 1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
'family_id',// 家庭成员id就诊用户
],
];
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
return [
'inquiry_type' => 'required|integer|min:1|max:4',
'inquiry_mode' => 'required|integer|min:1|max:5',
'patient_id' => 'required',
'family_id' => 'required',
'disease_class_id' => 'required',
'diagnosis_date' => 'date',
'disease_desc' => 'required',
'is_allergy_history' => ['sometimes','numeric','min:0','max:1'],
'is_family_history' => ['sometimes','numeric','min:0','max:1'],
'is_pregnant' => ['sometimes','numeric','min:0','max:1'],
'client_type' => 'required|integer|min:1|max:2',
'doctor_id' => 'required',
'order_inquiry_id' => 'required',
'reply_quality' => 'required|integer|min:0|max:5',
'service_attitude' => 'required|integer|min:0|max:5',
'reply_progress' => 'required|integer|min:0|max:5',//
'inquiry_status' => 'required|integer|min:0|max:4',
];
}
/**
* 获取已定义验证规则的错误消息.
*/
public function messages(): array
{
return [
'inquiry_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_mode.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_mode.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_mode.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_mode.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'patient_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'disease_class_id.required' => "请您选择疾病",
'diagnosis_date.date' => HttpEnumCode::getMessage(HttpEnumCode::DATE_FORMAT_ERROR),
'disease_desc.required' => "请您输入病情主诉",
'is_allergy_history.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_allergy_history.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_allergy_history.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_family_history.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_family_history.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_family_history.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_pregnant.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_pregnant.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_pregnant.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'inquiry_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
];
}
}

View File

@ -487,359 +487,6 @@ class InquiryService extends BaseService
return success(); return success();
} }
//获取患者问诊订单列表
public function getPatientInquiryOrderList(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_status = $this->request->input('inquiry_status',0);
$family_id = $this->request->input('family_id');
$page = $this->request->input('page',1);
$per_page = $this->request->input('per_page',10);
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
if (!empty($family_id)){
$params['family_id'] = $family_id;
}
$inquiry_status_params = [];
if (!empty($inquiry_status) && $inquiry_status != 0){
// 问诊订单状态0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
if ($inquiry_status == 1){
$inquiry_status_params = [1];
}
if ($inquiry_status == 2){
$inquiry_status_params = [2,3];
}
if ($inquiry_status == 3){
$inquiry_status_params = [4];
}
if ($inquiry_status == 4){
$inquiry_status_params = [5,6,7];
}
}
$params['is_delete'] = 0;
$fields = [
'order_inquiry_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',
'payment_amount_total',
'patient_name',
'patient_name_mask',
'patient_sex',
'patient_age',
'created_at',
];
$order_inquiry = OrderInquiry::getPatientOrderInquiryPage($params,$inquiry_status_params,$fields);
if (empty($order_inquiry['data'])){
return success();
}
foreach ($order_inquiry['data'] as &$item){
$item['disease_desc'] = $item['OrderInquiryCase']['disease_desc'];
unset($item['OrderInquiryCase']);
// 获取医生数据
$item['user_doctor'] = [];
if (!empty($item['doctor_id'])){
$fields = [
'doctor_id',
'user_name',
'doctor_title',
'hospital_id',
];
$params = array();
$params['doctor_id'] = $item['doctor_id'];
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 转换医生职称
$user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 获取医生医院名称
$user_doctor['hospital_name'] = "";
$user_doctor['hospital_level_name'] = "";
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital_name'] = $hospital['hospital_name'];
$user_doctor['hospital_level_name'] = $hospital['hospital_level_name'];
}
$item['user_doctor'] = $user_doctor;
unset($hospital);
unset($user_doctor);
}
}
return success($order_inquiry);
}
/**
* 获取患者问诊订单详情
* @return array
*/
public function getPatientInquiryOrderInfo(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 获取病例信息
$fields = [
'disease_class_name',
'disease_desc',
];
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_case = OrderInquiryCase::getOne($params,$fields);
if (empty($order_inquiry_case)){
return fail();
}
$order_inquiry['case'] = $order_inquiry_case->toArray();
// 获取医生数据
$order_inquiry['user_doctor'] = [];
if (!empty($order_inquiry['doctor_id'])){
$fields = [
'doctor_id',
'user_name',
'doctor_title',
'hospital_id',
'avatar',
];
$params = array();
$params['doctor_id'] = $order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 转换医生职称
$user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 头像
$user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']);
// 获取医生医院名称
$user_doctor['hospital_name'] = "";
$user_doctor['hospital_level_name'] = "";
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital_name'] = $hospital['hospital_name'];
$user_doctor['hospital_level_name'] = $hospital['hospital_level_name'];
}
$order_inquiry['user_doctor'] = $user_doctor;
unset($hospital);
unset($user_doctor);
}
return success($order_inquiry->toArray());
}
/**
* 取消患者问诊订单
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function putCancelPatientInquiryOrder(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 检测订单状态
if (!in_array($order_inquiry['inquiry_status'],[1,2,3])) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR,"订单无法取消");
}
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) {
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中");
}
// 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
Db::beginTransaction();
try {
// 修改问诊订单为取消
$data = array();
$data['inquiry_status'] = 7;
$data['cancel_time'] = date("Y-m-d H:i:s",time());
$data['cancel_reason'] = 2; // 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
$data['updated_at'] = date("Y-m-d H:i:s",time());
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params,$data);
// 检测支付状态,判断是否需要退款处理
if ($order_inquiry['inquiry_pay_status'] == 2){
// 需退款
$this->inquiryRefund($order_inquiry['order_inquiry_id'],"取消问诊");
}
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
/**
* 删除问诊订单
* @return array
*/
public function deletePatientInquiryOrder(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 检测订单状态
if (!in_array($order_inquiry['inquiry_status'],[1,5])) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除");
}
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) {
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中");
}
// 修改订单删除状态
$data = array();
$data['is_delete'] = 1;
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params,$data);
return success();
}
/**
* 问诊订单取消支付
* @return array
*/
public function putPatientInquiryOrderCancelPay(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 检测订单状态
if (!in_array($order_inquiry['inquiry_status'],[1])) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除");
}
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) {
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中");
}
// 修改订单删除状态
$data = array();
$data['inquiry_status'] = 7;
$data['cancel_time'] = date("Y-m-d H:i:s",time());
$data['cancel_reason'] = 2; // 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
$data['cancel_remarks'] = "未支付取消";
$data['updated_at'] = date("Y-m-d H:i:s",time());
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params,$data);
return success();
}
/** /**
* 获取医生未接诊订单数量 * 获取医生未接诊订单数量
* @param string $doctor_id 医生id * @param string $doctor_id 医生id

View File

@ -0,0 +1,437 @@
<?php
namespace App\Services;
use App\Constants\DoctorTitleCode;
use App\Constants\HttpEnumCode;
use App\Model\Hospital;
use App\Model\OrderInquiry;
use App\Model\OrderInquiryCase;
use App\Model\OrderProduct;
use App\Model\UserDoctor;
use Hyperf\DbConnection\Db;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
/**
* 患者订单
*/
class PatientOrderService extends BaseService
{
/**
* 获取患者问诊订单列表
* @return array
*/
public function getPatientInquiryOrderList(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$inquiry_status = $this->request->input('inquiry_status',0);
$family_id = $this->request->input('family_id');
$page = $this->request->input('page',1);
$per_page = $this->request->input('per_page',10);
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
if (!empty($family_id)){
$params['family_id'] = $family_id;
}
$inquiry_status_params = [];
if (!empty($inquiry_status) && $inquiry_status != 0){
// 问诊订单状态0:全部 1:待支付 2:待接诊 3:问诊中 4:完成/取消
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
if ($inquiry_status == 1){
$inquiry_status_params = [1];
}
if ($inquiry_status == 2){
$inquiry_status_params = [2,3];
}
if ($inquiry_status == 3){
$inquiry_status_params = [4];
}
if ($inquiry_status == 4){
$inquiry_status_params = [5,6,7];
}
}
$params['is_delete'] = 0;
$fields = [
'order_inquiry_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',
'payment_amount_total',
'patient_name',
'patient_name_mask',
'patient_sex',
'patient_age',
'created_at',
];
$order_inquiry = OrderInquiry::getPatientOrderInquiryPage($params,$inquiry_status_params,$fields);
if (empty($order_inquiry['data'])){
return success();
}
foreach ($order_inquiry['data'] as &$item){
$item['disease_desc'] = $item['OrderInquiryCase']['disease_desc'];
unset($item['OrderInquiryCase']);
// 获取医生数据
$item['user_doctor'] = [];
if (!empty($item['doctor_id'])){
$fields = [
'doctor_id',
'user_name',
'doctor_title',
'hospital_id',
];
$params = array();
$params['doctor_id'] = $item['doctor_id'];
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 转换医生职称
$user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 获取医生医院名称
$user_doctor['hospital_name'] = "";
$user_doctor['hospital_level_name'] = "";
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital_name'] = $hospital['hospital_name'];
$user_doctor['hospital_level_name'] = $hospital['hospital_level_name'];
}
$item['user_doctor'] = $user_doctor;
unset($hospital);
unset($user_doctor);
}
}
return success($order_inquiry);
}
/**
* 获取患者问诊订单详情
* @return array
*/
public function getPatientInquiryOrderInfo(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 获取病例信息
$fields = [
'disease_class_name',
'disease_desc',
];
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_case = OrderInquiryCase::getOne($params,$fields);
if (empty($order_inquiry_case)){
return fail();
}
$order_inquiry['case'] = $order_inquiry_case->toArray();
// 获取医生数据
$order_inquiry['user_doctor'] = [];
if (!empty($order_inquiry['doctor_id'])){
$fields = [
'doctor_id',
'user_name',
'doctor_title',
'hospital_id',
'avatar',
];
$params = array();
$params['doctor_id'] = $order_inquiry['doctor_id'];
$user_doctor = UserDoctor::getOne($params,$fields);
if (empty($user_doctor)){
return fail(HttpEnumCode::SERVER_ERROR);
}
// 转换医生职称
$user_doctor['doctor_title'] = empty($user_doctor['doctor_title']) ? "" : DoctorTitleCode::getMessage($user_doctor['doctor_title']);
// 头像
$user_doctor['avatar'] = addAliyunOssWebsite($user_doctor['avatar']);
// 获取医生医院名称
$user_doctor['hospital_name'] = "";
$user_doctor['hospital_level_name'] = "";
$fields = [
'hospital_id',
'hospital_name',
'hospital_level_name',
];
$params = array();
$params['hospital_id'] = $user_doctor['hospital_id'];
$hospital = Hospital::getOne($params,$fields);
if (!empty($hospital)){
$user_doctor['hospital_name'] = $hospital['hospital_name'];
$user_doctor['hospital_level_name'] = $hospital['hospital_level_name'];
}
$order_inquiry['user_doctor'] = $user_doctor;
unset($hospital);
unset($user_doctor);
}
return success($order_inquiry->toArray());
}
/**
* 取消患者问诊订单
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function putCancelPatientInquiryOrder(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 检测订单状态
if (!in_array($order_inquiry['inquiry_status'],[1,2,3])) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR,"订单无法取消");
}
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) {
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中");
}
// 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
Db::beginTransaction();
try {
// 修改问诊订单为取消
$data = array();
$data['inquiry_status'] = 7;
$data['cancel_time'] = date("Y-m-d H:i:s",time());
$data['cancel_reason'] = 2; // 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
$data['updated_at'] = date("Y-m-d H:i:s",time());
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params,$data);
// 检测支付状态,判断是否需要退款处理
if ($order_inquiry['inquiry_pay_status'] == 2){
// 需退款
$inquiryService = new InquiryService();
$inquiryService->inquiryRefund($order_inquiry['order_inquiry_id'],"取消问诊");
}
} catch (\Exception $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
return success();
}
/**
* 删除问诊订单
* @return array
*/
public function deletePatientInquiryOrder(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 检测订单状态
if (!in_array($order_inquiry['inquiry_status'],[1,5])) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除");
}
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) {
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中");
}
// 修改订单删除状态
$data = array();
$data['is_delete'] = 1;
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params,$data);
return success();
}
/**
* 问诊订单取消支付
* @return array
*/
public function putPatientInquiryOrderCancelPay(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_inquiry_id = $this->request->route('order_inquiry_id');
// 获取订单数据
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
$params['order_inquiry_id'] = $order_inquiry_id;
$params['is_delete'] = 0;
$order_inquiry = OrderInquiry::getOne($params);
if (empty($order_inquiry)){
return fail();
}
// 检测订单状态
if (!in_array($order_inquiry['inquiry_status'],[1])) {
// 问诊订单状态1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
return fail(HttpEnumCode::HTTP_ERROR,"订单无法删除");
}
if (!in_array($order_inquiry['inquiry_refund_status'],[0,4,5])) {
// 问诊订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
return fail(HttpEnumCode::HTTP_ERROR,"订单正在退款中");
}
// 修改订单删除状态
$data = array();
$data['inquiry_status'] = 7;
$data['cancel_time'] = date("Y-m-d H:i:s",time());
$data['cancel_reason'] = 2; // 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
$data['cancel_remarks'] = "未支付取消";
$data['updated_at'] = date("Y-m-d H:i:s",time());
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
OrderInquiry::edit($params,$data);
return success();
}
/**
* 获取药品订单列表
* @return array
*/
public function getPatientProductOrderList(): array
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_product_status = $this->request->input('order_product_status',0);
$family_id = $this->request->input('family_id');
$page = $this->request->input('page',1);
$per_page = $this->request->input('per_page',10);
$params = array();
$params['patient_id'] = $user_info['client_user_id'];
if (!empty($family_id)){
$params['family_id'] = $family_id;
}
$inquiry_status_params = [];
if (!empty($inquiry_status_params) && $inquiry_status_params != 0){
// 入参订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
// 数据库订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
$params['inquiry_status_params'] = $family_id;
}
$params['is_delete'] = 0;
$fields = [
'order_product_id',
'order_inquiry_id',
'order_prescription_id',
'doctor_id',
'patient_id',
'family_id',
'order_product_status',
'pay_status',
'cancel_reason',
'remarks',
'refund_status',
'cancel_remarks',
'created_at',
];
$order_product = OrderProduct::getPatientOrderProductPage($params,$fields);
if (empty($order_product['data'])){
return success();
}
foreach ($order_product['data'] as $item){
foreach ($item['orderProductItem'] as &$product_item){
$product_item['product_cover_img'] = addAliyunOssWebsite($product_item['product_cover_img']);
}
}
return success($order_product);
}
}

View File

@ -23,6 +23,7 @@ use App\Controller\PatientCaseController;
use App\Controller\PatientCenterController; use App\Controller\PatientCenterController;
use App\Controller\PatientDoctorController; use App\Controller\PatientDoctorController;
use App\Controller\PatientFamilyController; use App\Controller\PatientFamilyController;
use App\Controller\PatientOrderController;
use App\Controller\SafeController; use App\Controller\SafeController;
use App\Controller\SystemController; use App\Controller\SystemController;
use App\Controller\UserController; use App\Controller\UserController;
@ -195,32 +196,19 @@ Router::addGroup('/patient', function () {
// 创建问诊订单 // 创建问诊订单
Router::post('', [InquiryController::class, 'addInquiryOrder']); Router::post('', [InquiryController::class, 'addInquiryOrder']);
// 检测是否可以接诊 // 检测是否可以接诊
Router::get('/check', [PatientDoctorController::class, 'getDoctorInquiryCheck']); Router::get('/check', [PatientDoctorController::class, 'getDoctorInquiryCheck']);
// 检测快速、购药订单分配医生状态 // 检测快速、购药订单分配医生状态
Router::get('/assign/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryAssign']); Router::get('/assign/{order_inquiry_id:\d+}', [InquiryController::class, 'getInquiryAssign']);
// 获取患者问诊订单列表
Router::get('/list', [InquiryController::class, 'getPatientInquiryOrderList']);
// 新增问诊评价 // 新增问诊评价
Router::post('/evaluation', [InquiryController::class, 'addInquiryEvaluation']); Router::post('/evaluation', [InquiryController::class, 'addInquiryEvaluation']);
// 获取患者问诊订单详情
Router::get('/{order_inquiry_id:\d+}', [InquiryController::class, 'getPatientInquiryOrderInfo']);
// 取消患者问诊订单-1:待支付 2:待分配 3:待接诊
Router::put('/cancel/{order_inquiry_id:\d+}', [InquiryController::class, 'putCancelPatientInquiryOrder']);
// 删除问诊订单-1:待支付 5:已完成
Router::delete('/{order_inquiry_id:\d+}', [InquiryController::class, 'deletePatientInquiryOrder']);
// 问诊订单取消支付-1未支付
Router::put('/cancel-pay/{order_inquiry_id:\d+}', [InquiryController::class, 'putPatientInquiryOrderCancelPay']);
// 获取药品订单列表-药品订单
Router::post('/8', [CallBackController::class, 'imCallBack']);
}); });
// 医生数据 // 医生数据
@ -289,6 +277,55 @@ Router::addGroup('/patient', function () {
Router::get('/last/{family_id:\d+}', [PatientCaseController::class, 'getLastCase']); Router::get('/last/{family_id:\d+}', [PatientCaseController::class, 'getLastCase']);
}); });
Router::addGroup('/order', function () {
Router::addGroup('/inquiry', function () {
// 获取患者问诊订单列表
Router::get('', [PatientOrderController::class, 'getPatientInquiryOrderList']);
// 获取患者问诊订单详情
Router::get('/{order_inquiry_id:\d+}', [PatientOrderController::class, 'getPatientInquiryOrderInfo']);
// 删除问诊订单-1:待支付 5:已完成
Router::delete('/{order_inquiry_id:\d+}', [PatientOrderController::class, 'deletePatientInquiryOrder']);
// 取消问诊订单-1:待支付 2:待分配 3:待接诊
Router::put('/cancel/{order_inquiry_id:\d+}', [PatientOrderController::class, 'putCancelPatientInquiryOrder']);
// 问诊订单取消支付-1未支付
Router::put('/cancel-pay/{order_inquiry_id:\d+}', [PatientOrderController::class, 'putPatientInquiryOrderCancelPay']);
});
// 药品订单
Router::addGroup('/product', function () {
// 获取药品订单列表
Router::get('', [PatientOrderController::class, 'getPatientProductOrderList']);
// 获取药品订单详情
Router::post('/8', [PatientOrderController::class, 'imCallBack']);
// 药品订单取消支付-1未支付
Router::put('/cancel-pay/{order_inquiry_id:\d+}', [PatientOrderController::class, 'putPatientInquiryOrderCancelPay']);
// 创建处方订单
Router::post('/17', [PatientOrderController::class, 'imCallBack']);
});
// 处方订单
Router::addGroup('/prescription', function () {
// 获取处方订单列表
Router::post('/14', [PatientOrderController::class, 'imCallBack']);
// 获取处方订单详情
Router::post('/8', [PatientOrderController::class, 'imCallBack']);
// 获取处方订单支付页详情-处方管理
Router::post('/16', [PatientOrderController::class, 'imCallBack']);
// 删除处方订单记录-处方管理
Router::post('/18', [PatientOrderController::class, 'imCallBack']);
});
});
}); });
// 药师端api // 药师端api
@ -425,11 +462,8 @@ Router::get('/testpay', [UserController::class, 'testpay']);
// 未开发接口 // 未开发接口
// 获取药品订单列表-药品订单
Router::post('/8', [CallBackController::class, 'imCallBack']);
// 获取药品订单详情-药品订单
Router::post('/9', [CallBackController::class, 'imCallBack']);
// 获取地址列表-地址管理 // 获取地址列表-地址管理
Router::post('/10', [CallBackController::class, 'imCallBack']); Router::post('/10', [CallBackController::class, 'imCallBack']);
@ -443,20 +477,12 @@ Router::post('/12', [CallBackController::class, 'imCallBack']);
// 删除地址-地址管理 // 删除地址-地址管理
Router::post('/13', [CallBackController::class, 'imCallBack']); Router::post('/13', [CallBackController::class, 'imCallBack']);
// 获取处方列表-处方管理
Router::post('/14', [CallBackController::class, 'imCallBack']);
// 获取处方详情-处方管理
Router::post('/15', [CallBackController::class, 'imCallBack']);
// 获取处方支付页详情-处方管理
Router::post('/16', [CallBackController::class, 'imCallBack']);
// 创建处方订单-处方管理
Router::post('/17', [CallBackController::class, 'imCallBack']);
// 删除处方记录-处方管理
Router::post('/18', [CallBackController::class, 'imCallBack']);
// 获取问诊价格列表-消息-无问诊消息时 // 获取问诊价格列表-消息-无问诊消息时
Router::post('/19', [CallBackController::class, 'imCallBack']); Router::post('/19', [CallBackController::class, 'imCallBack']);