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, "患者信息错误"); } // 检测当前家庭成员是否存在未完成的问诊订单 $UserPatientService = new UserPatientService(); $res = $UserPatientService->getNotFinishedOrdeInquiry($user_info['client_user_id']); if (!empty($res)) { return fail(HttpEnumCode::HTTP_ERROR, "当前患者存在进行中的问诊订单"); } // 是否为孕妇 if (!empty($request_params['is_pregnant'])) { return fail(HttpEnumCode::HTTP_ERROR, "请您到线下问诊"); } // 检测所患疾病是否正确 $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, "疾病信息填写错误"); } // 获取当前问诊医生信息 // 专家问诊-公益问诊 if ($request_params['inquiry_type'] == 3 || $request_params['inquiry_type'] == 1) { if (empty($request_params['doctor_id'])) { 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, "当前医生无法接诊,请重新选择"); } } // 获取问诊价格 $DoctorInquiryService = new DoctorInquiryService(); $inquiry_price = $DoctorInquiryService->getDoctorInquiryPrice($request_params['inquiry_type'], $request_params['inquiry_mode'], $request_params['doctor_id'] ?? ""); // 获取可用优惠卷 $CouponService = new CouponService(); $user_coupon = $CouponService->getUserUsableCouponOne($user_info['user_id'], $request_params['inquiry_type']); Db::beginTransaction(); $generator = $this->container->get(IdGeneratorInterface::class); try { // 实际付款金额 $coupon_price = $user_coupon['coupon']['coupon_price'] ?? 0; $payment_amount_total = $inquiry_price - $coupon_price; // 生成问诊订单 $data = array(); $data['user_id'] = $user_info['user_id']; $data['patient_id'] = $user_info['client_user_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_no'] = $generator->generate();// 订单编号 $data['amount_total'] = $inquiry_price;// 订单金额 $data['payment_amount_total'] = $payment_amount_total;// 实际付款金额 $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'] = $patient_family['age'];// 患者年龄-就诊人 $order_inquiry = OrderInquiry::addOrderInquiry($data); if (empty($order_inquiry)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } // 处理复诊凭证 if (!empty($request_params['diagnose_images'])) { // 医师资格证 $diagnose_images = implode(',', $request_params['diagnose_images']); $diagnose_images = PcreMatch::pregRemoveOssWebsite($diagnose_images); } // 增加患者问诊病例 $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; // 患者性别(0:未知 1:男 2:女) $data['age'] = $patient_family['age'] ?? null; // 患者年龄 $data['height'] = $request_params['height'] ?? $patient_family['height'] ?: null; // 身高(cm) $data['weight'] = $request_params['weight'] ?? $patient_family['weight'] ?: null;; // 体重(kg) $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'] ?: null; // 确诊日期 $data['disease_desc'] = $request_params['disease_desc'] ?: null; // 病情描述(主诉) $data['diagnose_images'] = $diagnose_images ?? ""; // 复诊凭证(多个使用逗号分隔) $data['is_allergy_history'] = $request_params['is_allergy_history'] ?: 0; // 是否存在过敏史(0:否 1:是) $data['allergy_history'] = $request_params['allergy_history'] ?? null; // 过敏史描述 $data['is_family_history'] = $request_params['is_family_history'] ?: 0; // 是否存在家族病史(0:否 1:是) $data['family_history'] = $request_params['family_history'] ?? null; // 家族病史描述 $data['is_pregnant'] = $request_params['is_pregnant'] ?: 0; // 是否备孕、妊娠、哺乳期(0:否 1:是) $order_inquiry_case = OrderInquiryCase::addOrderInquiryCase($data); if (empty($order_inquiry_case)) { Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } // 增加问诊优惠卷表 if (!empty($user_coupon)){ $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']['coupon_name']; $data['coupon_use_price'] = $user_coupon['coupon']['coupon_price']; $order_inquiry_coupon = OrderInquiryCoupon::addOrderInquiryCoupon($data); if (empty($order_inquiry_coupon)){ Db::rollBack(); return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); } } // 意向用药处理 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($product['ProductPlatformAmount'])) { // if ($item['product_num'] > $product['ProductPlatformAmount']['real_stock']) { // // 此处是否需要特殊返回 // 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, "订单创建失败"); } // 锁定库存 // 实际库存-1 // $params = array(); // $params['amount_id'] = $product['ProductPlatformAmount']['amount_id']; // ProductPlatformAmount::dec($params,'real_stock',$item['product_num']); // // // 锁定库存+1 // ProductPlatformAmount::inc($params,'lock_stock',$item['product_num']); } } // 增加至退款延迟队列 $data = array(); $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; $message = new AmqpDelayDirectProducer($data); $message->setDelayMs(60 * 30 * 1000); $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(); return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage()); } $result = array(); $result['amount_total'] = $inquiry_price; // 订单金额 $result['inquiry_no'] = $order_inquiry['inquiry_no']; // 订单编号 $result['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; // 订单主键id $result['created_at'] = date('Y-m-d H:i:s',strtotime($order_inquiry['created_at'])); // 创建时间 $result['inquiry_type'] = $order_inquiry['inquiry_type']; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) return success($result); } }