新增获取患者已购买的某医生的服务包详情
This commit is contained in:
parent
c4a6e7cee3
commit
0f73332bfd
48
app/Controller/OrderServicePackageController.php
Normal file
48
app/Controller/OrderServicePackageController.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Request\OrderServicePackageRequest;
|
||||
use App\Request\PatientOrderRequest;
|
||||
use App\Request\UserPatientRequest;
|
||||
use App\Services\OrderServicePackageService;
|
||||
use App\Services\PatientOrderService;
|
||||
use App\Services\UserPatientService;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
class OrderServicePackageController extends AbstractController
|
||||
{
|
||||
/**
|
||||
* 获取患者已购买的某医生的服务包详情
|
||||
* @return ResponseInterface
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function getPatientBuyServiceDetail(): ResponseInterface
|
||||
{
|
||||
$request = $this->container->get(OrderServicePackageRequest::class);
|
||||
$request->scene('getPatientBuyServiceDetail')->validateResolved();
|
||||
|
||||
$OrderServicePackageService = new OrderServicePackageService();
|
||||
$data = $OrderServicePackageService->getPatientBuyServiceDetail();
|
||||
return $this->response->json($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建服务包订单
|
||||
* @return ResponseInterface
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function addPatientServiceOrder(): ResponseInterface
|
||||
{
|
||||
$request = $this->container->get(OrderServicePackageRequest::class);
|
||||
$request->scene('addPatientServiceOrder')->validateResolved();
|
||||
|
||||
$OrderServicePackageService = new OrderServicePackageService();
|
||||
$data = $OrderServicePackageService->addPatientServiceOrder();
|
||||
return $this->response->json($data);
|
||||
}
|
||||
}
|
||||
@ -296,4 +296,6 @@ class PatientOrderController extends AbstractController
|
||||
$data = $PatientOrderService->putPatientDetectionOrderCancelPay();
|
||||
return $this->response->json($data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -94,4 +94,5 @@ class UserPatientController extends AbstractController
|
||||
return $this->response->json($data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -307,6 +307,7 @@ 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 getCooperationDoctorAmountTotal(array $params, array $reception_time, array $inquiry_status_params,array $inquiry_type_not_params = []): mixed
|
||||
@ -612,4 +613,20 @@ class OrderInquiry extends Model
|
||||
->latest()
|
||||
->first($fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取患者某一时间段问诊订单-创建时间
|
||||
* @param array $params
|
||||
* @param array $created_at 接诊时间区间
|
||||
* @param array $inquiry_status_params inquiry_status字段搜索条件
|
||||
* @return Collection|array
|
||||
*/
|
||||
public static function getInquiryWithCreateTime(array $params, array $created_at, array $inquiry_status_params): Collection|array
|
||||
{
|
||||
return self::where($params)
|
||||
->whereIn('inquiry_status', $inquiry_status_params)
|
||||
->whereBetween('created_at', $created_at)
|
||||
->orderBy('created_at')
|
||||
->get();
|
||||
}
|
||||
}
|
||||
|
||||
126
app/Model/OrderServicePackage.php
Normal file
126
app/Model/OrderServicePackage.php
Normal file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Hyperf\Database\Model\Collection;
|
||||
use Hyperf\Database\Model\Model;
|
||||
use Hyperf\Snowflake\Concern\Snowflake;
|
||||
|
||||
/**
|
||||
* @property int $order_service_id 主键id
|
||||
* @property int $order_id 订单id
|
||||
* @property int $user_id 用户id-患者
|
||||
* @property int $patient_id 患者id
|
||||
* @property int $doctor_id 医生id
|
||||
* @property int $family_id 家庭成员id(就诊用户)
|
||||
* @property int $order_service_type 服务包类型(1:健康包 2:随访包)
|
||||
* @property int $order_service_status 订单状态(1:待支付 2:未开始 3:服务中 4:服务完成 5:服务取消)
|
||||
* @property int $is_delete 删除状态(0:否 1:是)
|
||||
* @property int $refund_status 订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
|
||||
* @property int $pay_channel 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付)
|
||||
* @property int $pay_status 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
|
||||
* @property string $order_service_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 $start_time 开始服务时间
|
||||
* @property string $finish_time 结束服务时间
|
||||
* @property string $cancel_time 订单取消时间
|
||||
* @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 $created_at 创建时间
|
||||
* @property Carbon $updated_at 修改时间
|
||||
*/
|
||||
class OrderServicePackage extends Model
|
||||
{
|
||||
use Snowflake;
|
||||
|
||||
/**
|
||||
* The table associated with the model.
|
||||
*/
|
||||
protected ?string $table = 'order_service_package';
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*/
|
||||
protected array $fillable = ['order_service_id', 'order_id', 'user_id', 'patient_id', 'doctor_id', 'family_id', 'order_service_type', 'order_service_status', 'is_delete', 'refund_status', 'pay_channel', 'pay_status', 'order_service_no', 'escrow_trade_no', 'amount_total', 'coupon_amount_total', 'payment_amount_total', 'pay_time', 'start_time', 'finish_time', 'cancel_time', 'cancel_remarks', 'patient_name', 'patient_name_mask', 'patient_sex', 'patient_age', 'created_at', 'updated_at'];
|
||||
|
||||
protected string $primaryKey = "order_service_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 $data
|
||||
* @return OrderServicePackage|Model
|
||||
*/
|
||||
public static function addOrderServicePackage(array $data): Model|OrderServicePackage
|
||||
{
|
||||
return self::create($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
* @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 $order_service_status
|
||||
* @param array $fields
|
||||
* @return Collection|array
|
||||
*/
|
||||
public static function getStatusList(array $params = [],array $order_service_status = [], array $fields = ['*']): Collection|array
|
||||
{
|
||||
return self::where($params)->whereIn('order_service_status',$order_service_status)->get($fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某一状态下的订单-单条
|
||||
* @param array $params
|
||||
* @param array $order_service_status
|
||||
* @param array $fields
|
||||
* @return object|null
|
||||
*/
|
||||
public static function getStatusOne(array $params = [],array $order_service_status = [], array $fields = ['*']): object|null
|
||||
{
|
||||
return self::where($params)->whereIn('order_service_status',$order_service_status)->first($fields);
|
||||
}
|
||||
}
|
||||
85
app/Model/OrderServicePackageDetail.php
Normal file
85
app/Model/OrderServicePackageDetail.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Model;
|
||||
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Hyperf\Database\Model\Collection;
|
||||
use Hyperf\Snowflake\Concern\Snowflake;
|
||||
|
||||
/**
|
||||
* @property int $order_service_detail_id 主键id
|
||||
* @property int $order_service_id 服务包订单id
|
||||
* @property int $order_id 订单id
|
||||
* @property string $order_service_no 系统订单编号
|
||||
* @property int $service_period 服务周期(天)
|
||||
* @property int $service_count 总服务次数(0表示不限次)
|
||||
* @property int $monthly_frequency 每月次数(0表示不限次)
|
||||
* @property string $single_inquiry_price 单次图文问诊价格
|
||||
* @property string $service_price 总服务价格
|
||||
* @property Carbon $created_at 创建时间
|
||||
* @property Carbon $updated_at 修改时间
|
||||
*/
|
||||
class OrderServicePackageDetail extends Model
|
||||
{
|
||||
use Snowflake;
|
||||
|
||||
/**
|
||||
* The table associated with the model.
|
||||
*/
|
||||
protected ?string $table = 'order_service_package_detail';
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*/
|
||||
protected array $fillable = ['order_service_detail_id', 'order_service_id', 'order_id', 'order_service_no', 'service_period', 'service_count', 'monthly_frequency', 'single_inquiry_price', 'service_price', 'created_at', 'updated_at'];
|
||||
|
||||
protected string $primaryKey = "order_service_detail_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 $data
|
||||
* @return OrderServicePackageDetail|\Hyperf\Database\Model\Model
|
||||
*/
|
||||
public static function addOrderServicePackageDetail(array $data): \Hyperf\Database\Model\Model|OrderServicePackageDetail
|
||||
{
|
||||
return self::create($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改
|
||||
* @param array $params
|
||||
* @param array $data
|
||||
* @return int
|
||||
*/
|
||||
public static function edit(array $params = [], array $data = []): int
|
||||
{
|
||||
return self::where($params)->update($data);
|
||||
}
|
||||
|
||||
}
|
||||
105
app/Request/OrderServicePackageRequest.php
Normal file
105
app/Request/OrderServicePackageRequest.php
Normal file
@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Request;
|
||||
|
||||
use App\Constants\HttpEnumCode;
|
||||
use Hyperf\Validation\Request\FormRequest;
|
||||
use Hyperf\Validation\Rule;
|
||||
|
||||
class OrderServicePackageRequest extends FormRequest
|
||||
{
|
||||
protected array $scenes = [
|
||||
'getPatientBuyServiceDetail' => [ // 获取患者已购买的某医生的服务包详情
|
||||
'doctor_id',
|
||||
'family_id',
|
||||
'service_type', // 服务包类型(1:健康 2:随访)
|
||||
'follow_package_item_id',
|
||||
],
|
||||
'addPatientServiceOrder' => [ // 创建服务包订单
|
||||
'doctor_id',
|
||||
'service_type',
|
||||
'follow_package_item_id',
|
||||
'patient_id',
|
||||
'family_id',
|
||||
'disease_class_id',
|
||||
'diagnosis_date',
|
||||
'disease_desc',
|
||||
'is_allergy_history',// 过敏史
|
||||
'is_family_history', // 家族病史
|
||||
'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
|
||||
'client_type', // 客户端类型(1:手机 2:电脑)
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* 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:5',
|
||||
'inquiry_mode' => 'required|integer|min:1|max:9',
|
||||
'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',
|
||||
'service_type' => ['required','integer',Rule::in([1,2])],
|
||||
'doctor_id' => 'required',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取已定义验证规则的错误消息.
|
||||
*/
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'doctor_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'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),
|
||||
'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.in' => "服务包类型错误",
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -6,6 +6,7 @@ namespace App\Request;
|
||||
|
||||
use App\Constants\HttpEnumCode;
|
||||
use Hyperf\Validation\Request\FormRequest;
|
||||
use Hyperf\Validation\Rule;
|
||||
|
||||
class PatientOrderRequest extends FormRequest
|
||||
{
|
||||
@ -53,8 +54,8 @@ class PatientOrderRequest extends FormRequest
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'inquiry_type' => 'required|integer|min:1|max:4',
|
||||
'inquiry_mode' => 'required|integer|min:1|max:5',
|
||||
'inquiry_type' => 'required|integer|min:1|max:5',
|
||||
'inquiry_mode' => 'required|integer|min:1|max:9',
|
||||
'patient_id' => 'required',
|
||||
'family_id' => 'required',
|
||||
'disease_class_id' => 'required',
|
||||
@ -64,6 +65,7 @@ class PatientOrderRequest extends FormRequest
|
||||
'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',
|
||||
'service_type' => ['required','integer',Rule::in([1,2])],
|
||||
|
||||
'doctor_id' => 'required',
|
||||
'order_inquiry_id' => 'required',
|
||||
@ -89,6 +91,7 @@ class PatientOrderRequest extends FormRequest
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'doctor_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'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),
|
||||
@ -136,6 +139,9 @@ class PatientOrderRequest extends FormRequest
|
||||
'detection_status.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'detection_status.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'detection_status.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.in' => "服务包类型错误",
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ namespace App\Request;
|
||||
|
||||
use App\Constants\HttpEnumCode;
|
||||
use Hyperf\Validation\Request\FormRequest;
|
||||
use Hyperf\Validation\Rule;
|
||||
|
||||
class UserPatientRequest extends FormRequest
|
||||
{
|
||||
@ -17,6 +18,12 @@ class UserPatientRequest extends FormRequest
|
||||
'product_id',
|
||||
'shopping_cart_num',
|
||||
],
|
||||
'getPatientBuyServiceDetail' => [ // 获取患者已购买的某医生的服务包详情
|
||||
'doctor_id',
|
||||
'family_id',
|
||||
'service_type',
|
||||
'follow_package_item_id',
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
@ -36,6 +43,9 @@ class UserPatientRequest extends FormRequest
|
||||
'user_coupon_status' => 'required|numeric|min:0|max:3',
|
||||
'product_id' => 'required',
|
||||
'shopping_cart_num' => 'required|numeric|min:0|max:999',
|
||||
'doctor_id' => 'required',
|
||||
'family_id' => 'required',
|
||||
'service_type' => ['required','integer',Rule::in([1,2])],
|
||||
];
|
||||
}
|
||||
|
||||
@ -55,6 +65,12 @@ class UserPatientRequest extends FormRequest
|
||||
'shopping_cart_num.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'shopping_cart_num.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'shopping_cart_num.max' => "请勿超出最大添加数量",
|
||||
|
||||
'doctor_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'family_id.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
|
||||
'service_type.integer' => "服务包类型错误",
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,7 +216,7 @@ class DetectionService extends BaseService
|
||||
$result['status'] = 1;
|
||||
$result['message'] = "成功";
|
||||
$result['data'] = [
|
||||
"inquiry_no" => "",
|
||||
"order_no" => "",
|
||||
"order_detection_id" => "",
|
||||
];
|
||||
|
||||
|
||||
@ -2125,4 +2125,44 @@ class InquiryService extends BaseService
|
||||
return $time;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取患者在某一时间段的服务包问诊订单-创建时间
|
||||
* @param string|int $order_service_type
|
||||
* @param string $patient_id
|
||||
* @param string $doctor_id
|
||||
* @param string $start_date
|
||||
* @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
|
||||
{
|
||||
if ($order_service_type == 1){
|
||||
$inquiry_type = 1;
|
||||
$inquiry_mode = 8;
|
||||
}else{
|
||||
$inquiry_type = 1;
|
||||
$inquiry_mode = 9;
|
||||
}
|
||||
|
||||
// 获取医生当日接诊订单金额
|
||||
$params = array();
|
||||
$params['patient_id'] = $patient_id;
|
||||
$params['doctor_id'] = $doctor_id;
|
||||
$params['inquiry_type'] = $inquiry_type;
|
||||
$params['inquiry_mode'] = $inquiry_mode;
|
||||
$params['inquiry_refund_status'] = 0; // 问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
|
||||
$params['inquiry_pay_status'] = 2; // 支付状态(1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
|
||||
|
||||
$created_at = [$start_date, $end_date];
|
||||
|
||||
$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)){
|
||||
return [];
|
||||
}
|
||||
|
||||
return $result->toArray();
|
||||
}
|
||||
|
||||
}
|
||||
@ -522,7 +522,6 @@ class OrderService extends BaseService
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检测问诊订单可退款状态
|
||||
* @param string $order_no
|
||||
|
||||
634
app/Services/OrderServicePackageService.php
Normal file
634
app/Services/OrderServicePackageService.php
Normal file
@ -0,0 +1,634 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer;
|
||||
use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer;
|
||||
use App\Constants\HttpEnumCode;
|
||||
use App\Model\DiseaseClass;
|
||||
use App\Model\DoctorConfigFollowPackageItem;
|
||||
use App\Model\InquiryCaseProduct;
|
||||
use App\Model\Order;
|
||||
use App\Model\OrderCoupon;
|
||||
use App\Model\OrderInquiry;
|
||||
use App\Model\OrderInquiryCase;
|
||||
use App\Model\OrderInquiryCoupon;
|
||||
use App\Model\OrderServicePackage;
|
||||
use App\Model\OrderServicePackageDetail;
|
||||
use App\Model\PatientFamily;
|
||||
use App\Model\PatientFamilyHealth;
|
||||
use App\Model\PatientFamilyPersonal;
|
||||
use App\Model\Product;
|
||||
use App\Model\SystemInquiryConfig;
|
||||
use App\Model\UserCoupon;
|
||||
use App\Model\UserDoctor;
|
||||
use App\Utils\Log;
|
||||
use App\Utils\PcreMatch;
|
||||
use Hyperf\Amqp\Producer;
|
||||
use Hyperf\DbConnection\Db;
|
||||
use Hyperf\Snowflake\IdGeneratorInterface;
|
||||
use Psr\Container\ContainerExceptionInterface;
|
||||
use Psr\Container\NotFoundExceptionInterface;
|
||||
|
||||
class OrderServicePackageService extends BaseService
|
||||
{
|
||||
/**
|
||||
* 获取患者已购买的某医生的服务包详情
|
||||
* @return array
|
||||
*/
|
||||
public function getPatientBuyServiceDetail(): array
|
||||
{
|
||||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||||
|
||||
$doctor_id = $this->request->input("doctor_id");
|
||||
$family_id = $this->request->input("family_id");
|
||||
$service_type = $this->request->input("service_type");// 服务包类型 1:健康 2:随访
|
||||
$follow_package_item_id = $this->request->input("follow_package_item_id");
|
||||
|
||||
if ($service_type == 2){
|
||||
if (empty($follow_package_item_id)){
|
||||
return fail();
|
||||
}
|
||||
}
|
||||
|
||||
$result = array();
|
||||
$result['status'] = 1;
|
||||
$result['message'] = "";
|
||||
$result['data'] = NULL;
|
||||
|
||||
// 检测家庭成员是否存在
|
||||
$params = array();
|
||||
$params['family_id'] = $family_id;
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$params['status'] = 1;
|
||||
$patient_family = PatientFamily::getOne($params);
|
||||
if (empty($patient_family)) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "患者信息错误");
|
||||
}
|
||||
|
||||
if ($service_type == 1){
|
||||
$inquiry_mode = 8;
|
||||
}else{
|
||||
$inquiry_mode = 9;
|
||||
}
|
||||
// 检测是否存在同类型未完成的问诊订单
|
||||
$PatientOrderService = new PatientOrderService();
|
||||
$order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry(1,$inquiry_mode,$user_info['client_user_id']);
|
||||
if (!empty($order_inquiry_id)) {
|
||||
// 获取问诊订单数据
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $order_inquiry_id;
|
||||
$order_inquiry = OrderInquiry::getOne($params);
|
||||
if (empty($order_inquiry)){
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
$result['status'] = 4;
|
||||
$result['message'] = "当前患者存在进行中的问诊订单";
|
||||
$result['data'] = $order_inquiry['inquiry_no'];
|
||||
return success($result);
|
||||
}
|
||||
|
||||
// 检测当前医生是否和患者存在未完成问诊订单
|
||||
$InquiryService = new InquiryService();
|
||||
$order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $doctor_id);
|
||||
if (!empty($order_inquiry)) {
|
||||
$result['status'] = 4;
|
||||
$result['message'] = "您和当前医生存在问诊中订单,无法够买服务包";
|
||||
$result['data'] = $order_inquiry['inquiry_no'];
|
||||
return success($result);
|
||||
}
|
||||
|
||||
// 检测患者是否购买服务包
|
||||
$params = array();
|
||||
$params['user_id'] = $user_info['user_id'];
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$params['doctor_id'] = $doctor_id;
|
||||
$params['family_id'] = $family_id;
|
||||
$params['order_service_type'] = $service_type;
|
||||
|
||||
$order_service_status = ['1','2','3'];
|
||||
$order_service_package = OrderServicePackage::getStatusOne($params,$order_service_status);
|
||||
if (empty($order_service_package)){
|
||||
$result['message'] = "未购买";
|
||||
return success($result);
|
||||
}
|
||||
|
||||
// 检测服务包订单订单状态
|
||||
if ($order_service_package['order_service_status'] == 1){
|
||||
$result['status'] = 2;
|
||||
$result['message'] = "存在未支付订单";
|
||||
$result['data'] = $order_service_package['order_service_no'];
|
||||
return success($result);
|
||||
}
|
||||
|
||||
if ($order_service_package['order_service_status'] == 2){
|
||||
$result['status'] = 2;
|
||||
$result['message'] = "您已购买该服务包,请耐心等待医生接诊";
|
||||
$result['data'] = $order_service_package['order_service_no'];
|
||||
return success($result);
|
||||
}
|
||||
|
||||
// 获取服务包订单详情
|
||||
$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)){
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
// 检测随访包
|
||||
if ($service_type == 2){
|
||||
// 检测服务周期是否相同,相同表示购买的同一个随访包
|
||||
$params = array();
|
||||
$params['follow_package_item_id'] = $follow_package_item_id;
|
||||
$doctor_config_follow_package_item = DoctorConfigFollowPackageItem::getOne($params);
|
||||
if (empty($doctor_config_follow_package_item)){
|
||||
return fail(HttpEnumCode::HTTP_ERROR,"随访包选择错误");
|
||||
}
|
||||
|
||||
if ($order_service_package_detail['service_period'] != $doctor_config_follow_package_item['service_period']){
|
||||
$result['message'] = "未购买";
|
||||
return success($result);
|
||||
}
|
||||
}
|
||||
|
||||
// 处理问诊次数
|
||||
// 3.5号购买,每月2次问诊次数。今天5.3,属于第几个月,这个月的开始时间和结束时间
|
||||
if ($order_service_package_detail['monthly_frequency'] != 0){
|
||||
$month_inquiry_count = 0; // 当前所属月问诊次数
|
||||
|
||||
// 获取当月问诊次数
|
||||
// 获取开启服务日期和今日的相差天数
|
||||
$diff = abs(time() - strtotime($order_service_package['start_time']));
|
||||
$diff_days = ceil($diff / (60 * 60 * 24)); // 转换为天数
|
||||
|
||||
// 获取当前月次
|
||||
$month_time = ceil($diff_days / 30);
|
||||
|
||||
$days = (int)$month_time * 30;
|
||||
|
||||
// 获取开始日期
|
||||
$end_date = date('Y-m-d 23:59:59', strtotime($order_service_package['start_time'] . " +$days days"));
|
||||
$start_date = date('Y-m-d 00:00:00', strtotime($end_date . "-30 days"));
|
||||
|
||||
$InquiryService = new InquiryService();
|
||||
$order_inquiry = $InquiryService->getPatientServiceInquiry($service_type,$user_info['client_user_id'],$doctor_id,$start_date,$end_date);
|
||||
if (!empty($order_inquiry)){
|
||||
$month_inquiry_count = count($order_inquiry);
|
||||
}
|
||||
|
||||
if ($month_inquiry_count >= $order_service_package_detail['monthly_frequency']){
|
||||
// 超出当月问诊次数
|
||||
$result['status'] = 3;
|
||||
$result['message'] = "超出服务包所包含的当月问诊次数";
|
||||
$result['data'] = $order_service_package['order_service_no'];
|
||||
return success($result);
|
||||
}
|
||||
}
|
||||
|
||||
// 未超出当月问诊次数或次数无限制
|
||||
$result['status'] = 5;
|
||||
$result['message'] = "已购买,未超出当月问诊次数";
|
||||
$result['data'] = $order_service_package['order_service_no'];
|
||||
return success($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建服务包订单
|
||||
* @return array
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function addPatientServiceOrder(): array
|
||||
{
|
||||
$result = array();
|
||||
$result['status'] = 1;
|
||||
$result['message'] = "成功";
|
||||
$result['data'] = [
|
||||
"order_no" => "",
|
||||
"order_id" => "",
|
||||
];
|
||||
|
||||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||||
$request_params = $this->request->all();
|
||||
|
||||
// 检测家庭成员是否存在
|
||||
$params = array();
|
||||
$params['family_id'] = $request_params['family_id'];
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$params['status'] = 1;
|
||||
$patient_family = PatientFamily::getOne($params);
|
||||
if (empty($patient_family)) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "患者信息错误");
|
||||
}
|
||||
|
||||
// 获取患者家庭成员信息表-健康情况
|
||||
$params = array();
|
||||
$params['family_id'] = $request_params['family_id'];
|
||||
$patient_family_health = PatientFamilyHealth::getOne($params);
|
||||
|
||||
// 获取患者家庭成员信息表-个人情况
|
||||
$params = array();
|
||||
$params['family_id'] = $request_params['family_id'];
|
||||
$patient_family_personal = PatientFamilyPersonal::getOne($params);
|
||||
|
||||
// 检测是否存在同类型未完成的问诊订单
|
||||
$PatientOrderService = new PatientOrderService();
|
||||
$order_inquiry_id = $PatientOrderService->getNotFinishedOrderInquiry($request_params['inquiry_type'],$request_params['inquiry_mode'],$user_info['client_user_id']);
|
||||
if (!empty($order_inquiry_id)) {
|
||||
// 获取问诊订单数据
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $order_inquiry_id;
|
||||
$order_inquiry = OrderInquiry::getOne($params);
|
||||
if (empty($order_inquiry)){
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
$result['status'] = 2;
|
||||
$result['message'] = "当前患者存在进行中的问诊订单";
|
||||
$result['data']['order_no'] = $order_inquiry['inquiry_no'];
|
||||
$result['data']['order_id'] = $order_inquiry['order_id'];
|
||||
return success($result);
|
||||
}
|
||||
|
||||
// 检测所患疾病是否正确
|
||||
$params = array();
|
||||
$params['disease_class_id'] = $request_params['disease_class_id'];
|
||||
$params['disease_class_status'] = 1;
|
||||
$disease_class = DiseaseClass::getOne($params);
|
||||
if (empty($disease_class)) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "疾病信息填写错误");
|
||||
}
|
||||
|
||||
// 获取当前问诊医生信息
|
||||
$params = array();
|
||||
$params['doctor_id'] = $request_params['doctor_id'];
|
||||
$doctor = UserDoctor::getOne($params);
|
||||
if (empty($doctor)) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "未知医生");
|
||||
}
|
||||
|
||||
if ($doctor['idcard_status'] != 1) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "当前医生无法接诊,请重新选择");
|
||||
}
|
||||
|
||||
if ($doctor['iden_auth_status'] != 1) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "当前医生无法接诊,请重新选择");
|
||||
}
|
||||
|
||||
// 检测当前医生是否和患者存在未完成问诊订单
|
||||
$InquiryService = new InquiryService();
|
||||
$order_inquiry = $InquiryService->checkPatientDoctorProgressInquiry($user_info['client_user_id'], $request_params['doctor_id']);
|
||||
if (!empty($order_inquiry)) {
|
||||
$result['status'] = 2;
|
||||
$result['message'] = "您和当前医生存在问诊中订单,无法再次发起问诊";
|
||||
$result['data']['order_no'] = $order_inquiry['inquiry_no'];
|
||||
$result['data']['order_id'] = $order_inquiry['order_id'];
|
||||
return success($result);
|
||||
}
|
||||
|
||||
// 确定支付渠道
|
||||
// 支付渠道(1:小程序支付 2:微信扫码支付)
|
||||
if ($request_params['client_type'] == 1) {
|
||||
$inquiry_pay_channel = 1;
|
||||
} elseif ($request_params['client_type'] == 2) {
|
||||
$inquiry_pay_channel = 2;
|
||||
}
|
||||
|
||||
// 处理复诊凭证
|
||||
if (!empty($request_params['diagnose_images'])) {
|
||||
// 医师资格证
|
||||
$diagnose_images = implode(',', $request_params['diagnose_images']);
|
||||
$diagnose_images = PcreMatch::pregRemoveOssWebsite($diagnose_images);
|
||||
}
|
||||
|
||||
// 沟通次数,沟通时长
|
||||
$params = array();
|
||||
$params['inquiry_type'] = $request_params['inquiry_type'];
|
||||
$params['inquiry_mode'] = $request_params['inquiry_mode'];
|
||||
$system_inquiry_config = SystemInquiryConfig::getOne($params);
|
||||
if (empty($system_inquiry_config)) {
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
|
||||
Db::beginTransaction();
|
||||
|
||||
$generator = $this->container->get(IdGeneratorInterface::class);
|
||||
|
||||
try {
|
||||
$inquiry_price = 0;
|
||||
$coupon_amount_total = 0;
|
||||
// 实际付款金额
|
||||
$payment_amount_total = bcsub($inquiry_price, $coupon_amount_total, 2);
|
||||
if ($payment_amount_total < 0) {
|
||||
$payment_amount_total = 0;
|
||||
}
|
||||
|
||||
// 生成订单表
|
||||
$data = array();
|
||||
$data['user_id'] = $user_info['user_id'];
|
||||
$data['patient_id'] = $user_info['client_user_id'];
|
||||
if (isset($request_params['doctor_id'])) {
|
||||
if (!empty($request_params['doctor_id'])) {
|
||||
$data['doctor_id'] = $request_params['doctor_id'];
|
||||
}
|
||||
}
|
||||
$data['order_type'] = 1; // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单)
|
||||
$data['inquiry_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付)
|
||||
$data['pay_status'] = 1;// 1:待支付
|
||||
$data['order_no'] = "I" . $generator->generate();// 订单编号
|
||||
$data['amount_total'] = $inquiry_price;// 订单金额
|
||||
$data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额
|
||||
$data['payment_amount_total'] = $payment_amount_total;// 实际付款金额
|
||||
$order = Order::addOrder($data);
|
||||
if (empty($order)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
|
||||
// 生成问诊订单
|
||||
$data = array();
|
||||
$data['order_id'] = $order['order_id'];
|
||||
$data['user_id'] = $user_info['user_id'];
|
||||
$data['patient_id'] = $user_info['client_user_id'];
|
||||
if (isset($request_params['doctor_id'])) {
|
||||
if (!empty($request_params['doctor_id'])) {
|
||||
$data['doctor_id'] = $request_params['doctor_id'];
|
||||
}
|
||||
}
|
||||
|
||||
$data['family_id'] = $request_params['family_id'];
|
||||
$data['inquiry_type'] = $request_params['inquiry_type'];
|
||||
$data['inquiry_mode'] = $request_params['inquiry_mode'];
|
||||
$data['inquiry_status'] = 1;// 1:待支付
|
||||
$data['inquiry_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付)
|
||||
$data['inquiry_no'] = $order['order_no'];// 订单编号
|
||||
$data['amount_total'] = $inquiry_price;// 订单金额
|
||||
$data['coupon_amount_total'] = $coupon_amount_total;// 优惠卷总金额
|
||||
$data['payment_amount_total'] = $payment_amount_total;// 实际付款金额
|
||||
$data['times_number'] = $system_inquiry_config['times_number'];// 沟通次数(0为不限制次数)
|
||||
$data['duration'] = $system_inquiry_config['duration'];// 沟通时长(分钟,0为不限制时长)
|
||||
$data['patient_name'] = $patient_family['card_name'];// 患者姓名-就诊人
|
||||
$data['patient_name_mask'] = $patient_family['card_name_mask'];// 患者姓名-就诊人(掩码)
|
||||
$data['patient_sex'] = $patient_family['sex'];// 患者性别-就诊人(0:未知 1:男 2:女)
|
||||
$data['patient_age'] = getIdCardAge($patient_family['id_number']);// 患者年龄-就诊人
|
||||
$order_inquiry = OrderInquiry::addOrderInquiry($data);
|
||||
if (empty($order_inquiry)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
|
||||
// 增加患者问诊病例
|
||||
$data = array();
|
||||
$data['user_id'] = $user_info['user_id'];
|
||||
$data['patient_id'] = $user_info['client_user_id'];
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
|
||||
$data['family_id'] = $patient_family['family_id']; // 家庭成员id
|
||||
$data['relation'] = $patient_family['relation']; // 与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 )
|
||||
$data['name'] = $patient_family['card_name']; // 患者名称
|
||||
$data['sex'] = $patient_family['sex']; // 患者性别(0:未知 1:男 2:女)
|
||||
$data['disease_class_id'] = $disease_class['disease_class_id']; // 疾病分类id-系统
|
||||
$data['disease_class_name'] = $disease_class['disease_class_name']; // 疾病名称-系统
|
||||
$data['diagnosis_date'] = $request_params['diagnosis_date']; // 确诊日期
|
||||
$data['disease_desc'] = $request_params['disease_desc']; // 病情描述(主诉)
|
||||
$data['diagnose_images'] = $diagnose_images ?? ""; // 复诊凭证(多个使用逗号分隔)
|
||||
|
||||
if ($patient_family['age'] != null) {
|
||||
$data['age'] = getIdCardAge($patient_family['id_number']);// 患者年龄
|
||||
}
|
||||
|
||||
// 身高(cm)
|
||||
if ($patient_family['height'] != null) {
|
||||
$data['height'] = $patient_family['height'];
|
||||
}
|
||||
|
||||
// 体重(kg)
|
||||
if ($patient_family['weight'] != null) {
|
||||
$data['weight'] = $patient_family['weight'];
|
||||
}
|
||||
|
||||
// 职业id-职业名称
|
||||
if ($patient_family['job_id'] != null) {
|
||||
$data['job_id'] = $patient_family['job_id'];
|
||||
if ($patient_family['job_name'] != null) {
|
||||
$data['job_name'] = $patient_family['job_name'];
|
||||
}
|
||||
}
|
||||
|
||||
// 民族id-民族名称
|
||||
if ($patient_family['nation_id'] != null) {
|
||||
$data['nation_id'] = $patient_family['nation_id'];
|
||||
if ($patient_family['nation_name'] != null) {
|
||||
$data['nation_name'] = $patient_family['nation_name'];
|
||||
}
|
||||
}
|
||||
|
||||
// 婚姻状况
|
||||
if ($patient_family['marital_status'] != null) {
|
||||
$data['marital_status'] = $patient_family['marital_status'];
|
||||
}
|
||||
|
||||
// 家庭成员-健康情况
|
||||
if (!empty($patient_family_health)) {
|
||||
if ($patient_family_health['diagnosis_hospital'] != null) {
|
||||
$data['diagnosis_hospital'] = $patient_family_health['diagnosis_hospital']; // 确诊医院
|
||||
}
|
||||
|
||||
if ($patient_family_health['is_take_medicine'] != null) {
|
||||
$data['is_take_medicine'] = $patient_family_health['is_take_medicine']; // 正在服药
|
||||
if ($patient_family_health['drugs_name'] != null) {
|
||||
$data['drugs_name'] = $patient_family_health['drugs_name']; // 正在服药名称
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 家庭成员-个人情况
|
||||
if (!empty($patient_family_personal)) {
|
||||
if ($patient_family_personal['drink_wine_status'] != null) {
|
||||
$data['drink_wine_status'] = $patient_family_personal['drink_wine_status']; // 饮酒状态
|
||||
}
|
||||
|
||||
if ($patient_family_personal['smoke_status'] != null) {
|
||||
$data['smoke_status'] = $patient_family_personal['smoke_status']; // 吸烟状态
|
||||
}
|
||||
|
||||
if ($patient_family_personal['chemical_compound_status'] != null) {
|
||||
$data['chemical_compound_status'] = $patient_family_personal['chemical_compound_status']; // 化合物状态
|
||||
if ($patient_family_personal['chemical_compound_describe'] != null) {
|
||||
$data['chemical_compound_describe'] = $patient_family_personal['chemical_compound_describe']; // 化合物描述
|
||||
}
|
||||
}
|
||||
|
||||
if ($patient_family_personal['is_operation'] != null) {
|
||||
$data['is_operation'] = $patient_family_personal['is_operation']; // 是否存在手术
|
||||
if ($patient_family_personal['operation'] != null) {
|
||||
$data['operation'] = $patient_family_personal['operation']; // 手术描述
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 过敏史
|
||||
if (array_key_exists("is_allergy_history", $request_params)) {
|
||||
if ($request_params['is_allergy_history'] !== null) {
|
||||
$data['is_allergy_history'] = $request_params['is_allergy_history']; // 是否存在过敏史(0:否 1:是)
|
||||
if ($request_params['allergy_history'] != "") {
|
||||
$data['allergy_history'] = $request_params['allergy_history']; // 过敏史描述
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 家族病史
|
||||
if (array_key_exists("is_family_history", $request_params)) {
|
||||
if ($request_params['is_family_history'] !== null) {
|
||||
$data['is_family_history'] = $request_params['is_family_history']; // 是否存在家族病史(0:否 1:是)
|
||||
if ($request_params['family_history'] != "") {
|
||||
$data['family_history'] = $request_params['family_history']; // 家族病史描述
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 是否备孕、妊娠、哺乳期(0:否 1:是)
|
||||
if (array_key_exists("is_pregnant", $request_params)) {
|
||||
if ($request_params['is_pregnant'] !== null) {
|
||||
$data['is_pregnant'] = $request_params['is_pregnant']; // 是否备孕、妊娠、哺乳期(0:否 1:是)
|
||||
}
|
||||
}
|
||||
|
||||
// 是否存在禁忌药物(0:否 1:是)问诊购药时存在
|
||||
if (array_key_exists("is_taboo", $request_params)) {
|
||||
if ($request_params['is_taboo'] !== null) {
|
||||
$data['is_taboo'] = $request_params['is_taboo']; // 是否存在禁忌药物(0:否 1:是)问诊购药时存在
|
||||
}
|
||||
}
|
||||
|
||||
$order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data);
|
||||
if (empty($order_inquiry_case)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
|
||||
// 处理优惠卷数据
|
||||
if (!empty($user_coupons)) {
|
||||
foreach ($user_coupons as $user_coupon) {
|
||||
// 增加订单优惠卷表
|
||||
$data = array();
|
||||
$data['order_id'] = $order['order_id'];// 订单id
|
||||
$data['user_coupon_id'] = $user_coupon['user_coupon_id'];
|
||||
$data['coupon_name'] = $user_coupon['coupon_name'];
|
||||
$data['coupon_use_price'] = $user_coupon['coupon_price'];
|
||||
$order_coupon = OrderCoupon::addOrderCoupon($data);
|
||||
if (empty($order_coupon)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
|
||||
// 增加问诊优惠卷表
|
||||
$data = array();
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];// 订单-问诊id
|
||||
$data['user_coupon_id'] = $user_coupon['user_coupon_id'];
|
||||
$data['coupon_name'] = $user_coupon['coupon_name'];
|
||||
$data['coupon_use_price'] = $user_coupon['coupon_price'];
|
||||
$order_inquiry_coupon = OrderInquiryCoupon::addOrderInquiryCoupon($data);
|
||||
if (empty($order_inquiry_coupon)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
|
||||
// 修改优惠卷使用状态
|
||||
$data = array();
|
||||
$data['user_coupon_status'] = 1;
|
||||
$data['coupon_use_date'] = date('Y-m-d H:i:s', time());
|
||||
|
||||
$params = array();
|
||||
$params['user_coupon_id'] = $user_coupon['user_coupon_id'];
|
||||
UserCoupon::edit($params, $data);
|
||||
}
|
||||
}
|
||||
|
||||
// 意向用药处理
|
||||
if ($request_params['inquiry_type'] == 4 && !empty($request_params['product'])) {
|
||||
foreach ($request_params['product'] as $item) {
|
||||
$params = array();
|
||||
$params['product_id'] = $item['product_id'];
|
||||
$product = Product::getWithAmountOne($params);
|
||||
if (empty($product)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "意向药品错误");
|
||||
}
|
||||
|
||||
// 用药意向是否和过敏史重叠
|
||||
if (!empty($request_params['allergy_history'])) {
|
||||
$res = strpos($request_params['allergy_history'], $product['product_name']);
|
||||
if ($res !== false) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "过敏史中存在意向用药,请您仔细检查");
|
||||
}
|
||||
}
|
||||
|
||||
// 新增病例商品表
|
||||
$data = array();
|
||||
$data['inquiry_case_id'] = $order_inquiry_case['inquiry_case_id'];
|
||||
$data['product_id'] = $item['product_id'];
|
||||
$data['case_product_num'] = $item['product_num'];
|
||||
$inquiry_case_product = InquiryCaseProduct::addInquiryCaseProduct($data);
|
||||
if (empty($inquiry_case_product)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 增加至未支付取消订单延迟队列
|
||||
$time = 60 * 30;
|
||||
if (\Hyperf\Config\config('app_env') == "dev"){
|
||||
$time = 60 * 5;
|
||||
}
|
||||
|
||||
$data = array();
|
||||
$data['order_no'] = $order_inquiry['inquiry_no'];
|
||||
$data['order_type'] = 1;
|
||||
|
||||
$message = new CancelUnpayOrdersDelayDirectProducer($data);
|
||||
$message->setDelayMs(1000 * $time);
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$res = $producer->produce($message);
|
||||
if (!$res) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
|
||||
// 加入未接诊取消订单延迟队列
|
||||
// 专家问诊-公益问诊
|
||||
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"){
|
||||
$time = 60 * 10;
|
||||
}
|
||||
|
||||
$data = array();
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$data['order_no'] = $order_inquiry['inquiry_no'];
|
||||
$message = new CancelUnInquiryOrdersDelayDirectProducer($data);
|
||||
$message->setDelayMs(1000 * $time);
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$res = $producer->produce($message);
|
||||
if (!$res) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
|
||||
}
|
||||
}
|
||||
|
||||
Db::commit();
|
||||
} catch (\Exception $e) {
|
||||
Db::rollBack();
|
||||
Log::getInstance()->error("错误:" . $e->getMessage());
|
||||
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
|
||||
}
|
||||
|
||||
$result['status'] = 1;
|
||||
$result['data']['order_inquiry_id'] = (string)$order_inquiry['order_inquiry_id']; // 订单主键id
|
||||
$result['data']['inquiry_no'] = (string)$order_inquiry['inquiry_no']; // 订单编号
|
||||
return success($result);
|
||||
}
|
||||
}
|
||||
@ -3,14 +3,17 @@
|
||||
namespace App\Services;
|
||||
|
||||
use App\Amqp\Producer\AssignDoctorDelayDirectProducer;
|
||||
use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer;
|
||||
use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer;
|
||||
use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer;
|
||||
use App\Constants\DoctorTitleCode;
|
||||
use App\Constants\HttpEnumCode;
|
||||
use App\Model\BasicLogisticsCompany;
|
||||
use App\Model\DetectionProject;
|
||||
use App\Model\DiseaseClass;
|
||||
use App\Model\DoctorInquiryConfig;
|
||||
use App\Model\Hospital;
|
||||
use App\Model\InquiryCaseProduct;
|
||||
use App\Model\Order;
|
||||
use App\Model\OrderCoupon;
|
||||
use App\Model\OrderDetection;
|
||||
@ -25,15 +28,20 @@ use App\Model\OrderProduct;
|
||||
use App\Model\OrderProductCoupon;
|
||||
use App\Model\OrderProductItem;
|
||||
use App\Model\OrderProductLogistic;
|
||||
use App\Model\PatientFamily;
|
||||
use App\Model\PatientFamilyHealth;
|
||||
use App\Model\PatientFamilyPersonal;
|
||||
use App\Model\PatientFollow;
|
||||
use App\Model\Product;
|
||||
use App\Model\ProductPlatformAmount;
|
||||
use App\Model\SystemInquiryConfig;
|
||||
use App\Model\UserCoupon;
|
||||
use App\Model\UserDoctor;
|
||||
use App\Model\UserDoctorInfo;
|
||||
use App\Model\UserPharmacistInfo;
|
||||
use App\Model\UserShipAddress;
|
||||
use App\Utils\Log;
|
||||
use App\Utils\PcreMatch;
|
||||
use Extend\Prescription\Prescription;
|
||||
use Extend\Wechat\WechatPay;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
@ -4,7 +4,10 @@ namespace App\Services;
|
||||
|
||||
use App\Constants\HttpEnumCode;
|
||||
use App\Model\Coupon;
|
||||
use App\Model\DoctorConfigFollowPackageItem;
|
||||
use App\Model\OrderInquiry;
|
||||
use App\Model\OrderServicePackage;
|
||||
use App\Model\PatientFamily;
|
||||
use App\Model\PatientHistoryInquiry;
|
||||
use App\Model\Product;
|
||||
use App\Model\ProductPlatformAmount;
|
||||
|
||||
@ -22,6 +22,7 @@ use App\Controller\InquiryController;
|
||||
use App\Controller\LoginController;
|
||||
use App\Controller\CodeController;
|
||||
use App\Controller\MessageNoticeController;
|
||||
use App\Controller\OrderServicePackageController;
|
||||
use App\Controller\PatientCaseController;
|
||||
use App\Controller\PatientDoctorController;
|
||||
use App\Controller\PatientFamilyController;
|
||||
@ -578,6 +579,15 @@ Router::addGroup('/patient', function () {
|
||||
// 删除家庭成员病情记录
|
||||
Router::delete('/{pathography_id:\d+}', [PatientPathographyController::class, 'deleteFamilyPathography']);
|
||||
});
|
||||
|
||||
// 服务包
|
||||
Router::addGroup('/service', function () {
|
||||
// 获取患者已购买的某医生的服务包详情
|
||||
Router::get('/detail', [OrderServicePackageController::class, 'getPatientBuyServiceDetail']);
|
||||
|
||||
// 创建服务包订单
|
||||
Router::post('', [OrderServicePackageController::class, 'addPatientServiceOrder']);
|
||||
});
|
||||
});
|
||||
|
||||
// 药师端api
|
||||
@ -933,7 +943,6 @@ Router::addGroup('/doctor', function () {
|
||||
Router::get('/inquiry/{doctor_id:\d+}', [UserDoctorController::class, 'getDoctorInfoInquiry']);
|
||||
});
|
||||
|
||||
|
||||
// 问诊
|
||||
Router::addGroup('/inquiry', function () {
|
||||
// 服务
|
||||
@ -947,9 +956,5 @@ Router::addGroup('/doctor', function () {
|
||||
Router::get('/item/{doctor_id:\d+}', [DoctorInquiryConfigController::class, 'getDoctorInquiryFollowItemConfig']);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user