新增处方详情接口

This commit is contained in:
wucongxing 2023-03-01 13:52:06 +08:00
parent 523242ff4c
commit 80b63cd73d
10 changed files with 389 additions and 23 deletions

View File

@ -227,9 +227,14 @@ class UserDoctorController extends AbstractController
/**
* 获取处方详情
* @return ResponseInterface
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function getPrescriptionInfo(): ResponseInterface
{
$request = $this->container->get(UserDoctorRequest::class);
$request->scene('getPrescriptionInfo')->validateResolved();
$UserDoctorService = new UserDoctorService();
$data = $UserDoctorService->getPrescriptionInfo();
return $this->response->json($data);

View File

@ -7,6 +7,7 @@ namespace App\Model;
use Hyperf\Contract\LengthAwarePaginatorInterface;
use Hyperf\Database\Model\Collection;
use Hyperf\Database\Model\Relations\HasMany;
use Hyperf\Database\Model\Relations\HasOne;
use Hyperf\Snowflake\Concern\Snowflake;
@ -28,8 +29,10 @@ use Hyperf\Snowflake\Concern\Snowflake;
* @property int $patient_sex 患者性别-就诊人1: 2:女)
* @property int $patient_age 患者年龄-就诊人
* @property string $prescription_img 处方图片
* @property string $doctor_advice 医嘱
* @property \Carbon\Carbon $created_at 创建时间
* @property \Carbon\Carbon $updated_at 修改时间
* @property-read \Hyperf\Database\Model\Collection|OrderPrescriptionIcd[] $OrderPrescriptionIcd
*/
class OrderPrescription extends Model
{
@ -43,7 +46,7 @@ class OrderPrescription extends Model
/**
* The attributes that are mass assignable.
*/
protected array $fillable = ['order_prescription_id', 'order_inquiry_id', 'doctor_id', 'pharmacist_id', 'prescription_status', 'pharmacist_audit_status', 'pharmacist_fail_reason', 'platform_audit_status', 'platform_fail_reason', 'is_delete', 'prescription_code', 'doctor_name', 'patient_name', 'patient_sex', 'patient_age', 'prescription_img', 'created_at', 'updated_at'];
protected array $fillable = ['order_prescription_id', 'order_inquiry_id', 'doctor_id', 'pharmacist_id', 'prescription_status', 'pharmacist_audit_status', 'pharmacist_fail_reason', 'platform_audit_status', 'platform_fail_reason', 'is_delete', 'prescription_code', 'doctor_name', 'patient_name', 'patient_sex', 'patient_age', 'prescription_img', 'doctor_advice', 'created_at', 'updated_at'];
protected string $primaryKey = "order_prescription_id";
@ -55,6 +58,28 @@ class OrderPrescription extends Model
return $this->HasMany(OrderPrescriptionIcd::class, 'order_prescription_id','order_prescription_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 $params
* @param array $fields
* @return Collection|array
*/
public static function getList(array $params = [], array $fields = ['*']): Collection|array
{
return self::where($params)->get($fields);
}
/**
* 获取是否存在
* @param array $params

View File

@ -0,0 +1,93 @@
<?php
declare(strict_types=1);
namespace App\Model;
use Hyperf\Database\Model\Collection;
use Hyperf\Snowflake\Concern\Snowflake;
/**
* @property int $order_product_id 主键id
* @property int $order_inquiry_id 订单-问诊id
* @property int $order_prescription_id 订单-处方id
* @property int $doctor_id 医生id
* @property string $order_product_no 订单编号
* @property string $escrow_trade_no 第三方支付流水号
* @property int $order_product_status 订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:已完成 6:已取消)
* @property int $pay_channel 支付渠道1:小程序支付 2:微信扫码支付)
* @property int $pay_status 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
* @property int $cancel_reason 订单取消原因1:主动取消 2:复核失败/库存不足 3:支付超时)
* @property string $amount_total 订单金额
* @property string $payment_amount_total 实际付款金额
* @property string $logistics_fee 运费金额
* @property string $logistics_no 物流编号
* @property string $pay_time 支付时间
* @property string $remarks 订单备注
* @property int $refund_status 商品订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
* @property string $cancel_remarks 订单取消备注(自动添加)
* @property int $province_id 省份id
* @property string $province 省份
* @property int $city_id 城市id
* @property string $city 城市
* @property int $county_id 区县id
* @property string $county 区县
* @property string $address 详细地址
* @property string $address_mask 详细地址(掩码)
* @property string $consignee_name 收货人姓名
* @property string $consignee_name_mask 收货人姓名(掩码)
* @property string $consignee_tel 收货人电话
* @property string $consignee_tel_mask 收货人电话(掩码)
* @property \Carbon\Carbon $created_at 创建时间
* @property \Carbon\Carbon $updated_at 修改时间
*/
class OrderProduct extends Model
{
use Snowflake;
/**
* The table associated with the model.
*/
protected ?string $table = 'order_product';
/**
* The attributes that are mass assignable.
*/
protected array $fillable = ['order_product_id', 'order_inquiry_id', 'order_prescription_id', 'doctor_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 string $primaryKey = "order_product_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 $params
* @param array $fields
* @return Collection|array
*/
public static function getList(array $params = [], array $fields = ['*']): Collection|array
{
return self::where($params)->get($fields);
}
/**
* 获取是否存在
* @param array $params
* @return bool
*/
public static function getExists(array $params): bool
{
return self::where($params)->exists();
}
}

View File

@ -0,0 +1,99 @@
<?php
declare(strict_types=1);
namespace App\Model;
use Hyperf\Database\Model\Collection;
use Hyperf\Database\Model\Relations\HasOne;
use Hyperf\Snowflake\Concern\Snowflake;
/**
* @property int $product_item_id 主键id
* @property int $order_product_id 订单-商品订单id
* @property int $order_inquiry_id 订单-问诊id
* @property int $order_prescription_id 订单-处方id
* @property int $product_id 商品id
* @property string $product_name 商品名称
* @property string $product_price 商品价格
* @property string $product_platform_code 商品处方平台编码
* @property int $amount 数量
* @property string $manufacturer 生产厂家
* @property string $product_cover_img 商品封面图
* @property string $product_spec 商品规格
* @property \Carbon\Carbon $created_at 创建时间
* @property \Carbon\Carbon $updated_at 修改时间
*/
class OrderProductItem extends Model
{
use Snowflake;
/**
* The table associated with the model.
*/
protected ?string $table = 'order_product_item';
/**
* The attributes that are mass assignable.
*/
protected array $fillable = ['product_item_id', 'order_product_id', 'order_inquiry_id', 'order_prescription_id', 'product_id', 'product_name', 'product_price', 'product_platform_code', 'amount', 'manufacturer', 'product_cover_img', 'product_spec', 'created_at', 'updated_at'];
protected string $primaryKey = "product_item_id";
/**
* 关联商品表
*/
public function Product(): HasOne
{
return $this->hasOne(Product::class, 'product_id', 'product_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 $params
* @param array $fields
* @return Collection|array
*/
public static function getList(array $params = [], array $fields = ['*']): Collection|array
{
return self::where($params)->get($fields);
}
/**
* 获取是否存在
* @param array $params
* @return bool
*/
public static function getExists(array $params): bool
{
return self::where($params)->exists();
}
/**
* 获取数据-关联商品表
* @param array $params
* @param array $fields
* @return Collection|array
*/
public static function getWithProductList(array $params = [], array $fields = ['*']): Collection|array
{
return self::with([
"Product"
])
->where($params)
->get($fields);
}
}

View File

@ -54,6 +54,10 @@ class UserDoctorRequest extends FormRequest
'doctor_id',
'evaluation_type',
],
'getPrescriptionInfo' => [ // 获取处方详情
'order_inquiry_id',
'order_prescription_id', // 处方id非必须
],
];
/**
@ -85,6 +89,7 @@ class UserDoctorRequest extends FormRequest
'words' => 'required',
'doctor_id' => 'required',
'evaluation_type' => 'required|integer|min:1|max:3',
'order_inquiry_id' => 'required',
];
}
@ -134,6 +139,7 @@ class UserDoctorRequest extends FormRequest
'evaluation_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'evaluation_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'evaluation_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'order_inquiry_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
];
}
}

View File

@ -0,0 +1,51 @@
<?php
namespace App\Services;
use App\Model\InquiryCaseProduct;
/**
* 病例
*/
class CaseService extends BaseService
{
/**
* 获取病例商品列表
* @param string|int $inquiry_case_id
* @return array
*/
public function getCaseProductlist(string|int $inquiry_case_id): array
{
if (empty($inquiry_case_id)){
return [];
}
$params = array();
$params['inquiry_case_id'] = $inquiry_case_id;
$inquiry_case_products = InquiryCaseProduct::getWithProductList($params);
if (empty($inquiry_case_products)){
return [];
}
$result = [];
foreach ($inquiry_case_products as $inquiry_case_product){
if (!empty($inquiry_case_product['Product'])){
$data = array();
$data['product_id'] = $inquiry_case_product['product_id'];
$data['case_product_num'] = $inquiry_case_product['case_product_num'];
$data['product_name'] = $inquiry_case_product['Product']['product_name'];
$data['product_price'] = $inquiry_case_product['Product']['product_price'];
$data['product_type'] = $inquiry_case_product['Product']['product_type'];
$data['product_cover_img'] = addAliyunOssWebsite($inquiry_case_product['Product']['product_cover_img']);
$data['product_spec'] = $inquiry_case_product['Product']['product_spec'];
$data['license_number'] = $inquiry_case_product['Product']['license_number'];
$data['manufacturer'] = $inquiry_case_product['Product']['manufacturer'];
$data['packaging_unit'] = $inquiry_case_product['Product']['packaging_unit'];
$result[] = $data;
}
}
return $result;
}
}

View File

@ -3,6 +3,7 @@
namespace App\Services;
use App\Model\OrderPrescription;
use App\Model\OrderProductItem;
use Hyperf\Contract\LengthAwarePaginatorInterface;
class OrderPrescriptionService extends BaseService
@ -57,4 +58,40 @@ class OrderPrescriptionService extends BaseService
return OrderPrescription::getPage($params, $fields);
}
/**
* 获取处方订单中开方商品数据
* @param string|int $order_inquiry_id
* @param string|int $order_prescription_id
* @return array
*/
public function getproductList(string|int $order_inquiry_id ,string|int $order_prescription_id): array
{
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$params['order_prescription_id'] = $order_prescription_id;
$order_product_items = OrderProductItem::getWithProductList($params);
if(empty($order_product_items)){
return [];
}
$result = [];
foreach ($order_product_items as $order_product_item){
$data = array();
$data['product_item_id'] = $order_product_item['product_item_id'];
$data['product_id'] = $order_product_item['product_id'];
$data['amount'] = $order_product_item['amount'];
$data['product_cover_img'] = addAliyunOssWebsite($order_product_item['product_cover_img']);
$data['single_unit'] = $order_product_item['Product']['single_unit'];
$data['single_use'] = $order_product_item['Product']['single_use'];
$data['packaging_unit'] = $order_product_item['Product']['packaging_unit'];
$data['frequency_use'] = $order_product_item['Product']['frequency_use'];
$result[] = $data;
}
unset($order_product_items);
return $result;
}
}

View File

@ -44,25 +44,8 @@ class PatientCaseService extends BaseService
if (!empty($order_inquiry_case['order_inquiry'])){
if ($order_inquiry_case['order_inquiry']['inquiry_type'] == 4){
// 问诊购药存在用药意向
$params = array();
$params['inquiry_case_id'] = $order_inquiry_case['inquiry_case_id'];
$inquiry_case_product = InquiryCaseProduct::getWithProductList($params);
if (!empty($inquiry_case_product)){
foreach ($inquiry_case_product as &$item){
if (!empty($item['Product'])){
$item['product_name'] = $item['Product']['product_name'];
$item['product_price'] = $item['Product']['product_price'];
$item['product_type'] = $item['Product']['product_type'];
$item['product_cover_img'] = addAliyunOssWebsite($item['Product']['product_cover_img']);
$item['product_spec'] = $item['Product']['product_spec'];
$item['license_number'] = $item['Product']['license_number'];
$item['manufacturer'] = $item['Product']['manufacturer'];
$item['packaging_unit'] = $item['Product']['packaging_unit'];
unset($item['Product']);
}
}
}
$CaseService = new CaseService();
$inquiry_case_product = $CaseService->getCaseProductlist($order_inquiry_case['inquiry_case_id']);
}
unset($order_inquiry_case['order_inquiry']);
}

View File

@ -13,10 +13,12 @@ use App\Model\DoctorBankCard;
use App\Model\DoctorExpertise;
use App\Model\DoctorInquiryConfig;
use App\Model\DoctorWord;
use App\Model\InquiryCaseProduct;
use App\Model\OrderEvaluation;
use App\Model\OrderInquiry;
use App\Model\OrderInquiryCase;
use App\Model\OrderPrescription;
use App\Model\OrderProductItem;
use App\Model\User;
use App\Model\UserDoctor;
use App\Model\UserDoctorInfo;
@ -791,17 +793,82 @@ class UserDoctorService extends BaseService
{
$user_info = $this->request->getAttribute("userInfo") ?? [];
$order_prescription_id = $this->request->route('order_prescription_id');
$order_inquiry_id = $this->request->input('order_inquiry_id');
$order_prescription_id = $this->request->input('order_prescription_id');
// 获取医生信息
$params = array();
$params['doctor_id'] = $user_info['client_user_id'];
$fields = [
'doctor_id',
'iden_auth_status',
'idcard_status',
'multi_point_status',
];
$user_doctor = UserDoctor::getOne($params, $fields);
if (empty($user_doctor)) {
return fail(HttpEnumCode::HTTP_ERROR, "非法医生");
}
$res = $this->checkDoctorAuth($user_doctor);
if ($res !== true) {
return fail(HttpEnumCode::HTTP_ERROR, $res);
}
// 获取患者病例表
$fields = [
'inquiry_case_id',
'name',
'sex',
'age',
'disease_desc',
];
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$params['status'] = 1;
$order_inquiry_case = OrderInquiryCase::getOne($params,$fields);
if (empty($order_inquiry_case)){
return fail(HttpEnumCode::HTTP_ERROR,"患者病例信息错误");
}
// 获取用药意向
$CaseService = new CaseService();
$inquiry_case_product = $CaseService->getCaseProductlist($order_inquiry_case['inquiry_case_id']);
if (!empty($order_prescription_id)){
// 获取处方数据
$params = array();
$params['order_prescription_id'] = $order_prescription_id;
$order_prescription = OrderPrescription::getOne($params);
if (empty($order_prescription)){
return fail();
}
// 订单-商品订单列表
$OrderPrescriptionService = new OrderPrescriptionService();
$order_product_items = $OrderPrescriptionService->getproductList($order_inquiry_id,$order_prescription_id);
}
$result = array();
$result['inquiry_case_product'] = $inquiry_case_product;// 用药意向
$result['order_product_items'] = $order_product_items ?? [];// 开方药品
$result['case'] = $order_inquiry_case;// 病例数据
$result['prescription']['doctor_advice'] = $order_prescription['doctor_advice'] ?? "";// 医嘱
return success($result);
}
/**
* 检测医生身份认证
* @param object|array $user_doctor 医生表数据
* @param bool $is_iden_auth 是否检测身份认证
* @param bool $is_idcard 是否检测实名认证
* @param bool $is_multi_point 是否检测多点执业认证
* @return bool|string string错误信息 bool通过
*/
public function checkDoctorAuth(object|array $user_doctor): bool|string
public function checkDoctorAuth(object|array $user_doctor,bool $is_iden_auth = true,bool $is_idcard = true,bool $is_multi_point = true): bool|string
{
if (empty($user_doctor)){
throw new BusinessException();

View File

@ -134,7 +134,7 @@ Router::addGroup('/doctor', function () {
Router::get('', [UserDoctorController::class, 'getPrescriptionList']);
// 获取处方详情
Router::get('/{order_prescription_id:\d+}', [UserDoctorController::class, 'getPrescriptionInfo']);
Router::get('/info', [UserDoctorController::class, 'getPrescriptionInfo']);
});
// 常用语