@@ -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 );
}
}