药品订单取消、创建药品订单
This commit is contained in:
parent
95cf4e47d5
commit
98cc84a75d
@ -108,6 +108,8 @@ class PatientOrderController extends AbstractController
|
||||
/**
|
||||
* 药品订单取消支付
|
||||
* @return ResponseInterface
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function putPatientProductOrderCancelPay(): ResponseInterface
|
||||
{
|
||||
@ -147,7 +149,7 @@ class PatientOrderController extends AbstractController
|
||||
* 模拟支付成功-金额为0时使用
|
||||
* @return ResponseInterface
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface|GuzzleException
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function addPatientOrderPay(): ResponseInterface
|
||||
{
|
||||
|
||||
@ -24,6 +24,7 @@ class PatientOrderRequest extends FormRequest
|
||||
"order_no"// 订单编号
|
||||
],
|
||||
'addPatientOrderPay' => [ // 模拟支付成功-金额为0时使用
|
||||
"order_type", // 订单类型(1:问诊订单 2:药品订单 3:检测订单 4:随访包订单 5:健康包订单)
|
||||
"order_no"// 订单编号
|
||||
],
|
||||
'addPatientProductOrder' => [ // 创建药品订单
|
||||
|
||||
@ -6,9 +6,11 @@ use App\Amqp\Producer\AssignDoctorDelayDirectProducer;
|
||||
use App\Amqp\Producer\CancelUnInquiryOrdersDelayDirectProducer;
|
||||
use App\Amqp\Producer\CancelUnpayOrdersDelayDirectProducer;
|
||||
use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer;
|
||||
use App\Amqp\Producer\GrantUserCouponDelayDirectProducer;
|
||||
use App\Constants\DoctorTitleCode;
|
||||
use App\Constants\HttpEnumCode;
|
||||
use App\Model\BasicLogisticsCompany;
|
||||
use App\Model\Coupon;
|
||||
use App\Model\DetectionProject;
|
||||
use App\Model\DiseaseClass;
|
||||
use App\Model\DoctorInquiryConfig;
|
||||
@ -654,6 +656,8 @@ class PatientOrderService extends BaseService
|
||||
/**
|
||||
* 药品订单取消支付
|
||||
* @return array
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function putPatientProductOrderCancelPay(): array
|
||||
{
|
||||
@ -661,8 +665,18 @@ class PatientOrderService extends BaseService
|
||||
|
||||
$order_product_id = $this->request->route('order_product_id');
|
||||
|
||||
Db::beginTransaction();
|
||||
$redis = $this->container->get(Redis::class);
|
||||
$redis_key = "order_product_lock_" . $order_product_id;
|
||||
$redis_lock = $redis->setnx($redis_key, 1);
|
||||
if (!$redis_lock) {
|
||||
// 设置失败,表示已经设置该值
|
||||
return fail(HttpEnumCode::HTTP_SUCCESS, "请您稍后重试");
|
||||
}
|
||||
|
||||
// 设置过期时间
|
||||
$redis->expire($redis_key, 3);
|
||||
|
||||
Db::beginTransaction();
|
||||
try {
|
||||
// 获取药品订单数据
|
||||
$params = array();
|
||||
@ -1126,123 +1140,242 @@ class PatientOrderService extends BaseService
|
||||
{
|
||||
$user_info = $this->request->getAttribute("userInfo") ?? [];
|
||||
|
||||
$order_type = $this->request->input('order_type');
|
||||
$order_no = $this->request->input('order_no');
|
||||
|
||||
Db::beginTransaction();
|
||||
try {
|
||||
// 问诊订单
|
||||
$params = array();
|
||||
$params['inquiry_no'] = $order_no;
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$order_inquiry = OrderInquiry::getOne($params);
|
||||
if (empty($order_inquiry)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法订单");
|
||||
}
|
||||
switch ($order_type) {
|
||||
case 1: // 问诊订单
|
||||
$params = array();
|
||||
$params['inquiry_no'] = $order_no;
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$order_inquiry = OrderInquiry::getOne($params);
|
||||
if (empty($order_inquiry)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法订单");
|
||||
}
|
||||
|
||||
// 获取病例数据
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$order_inquiry_case = OrderInquiryCase::getOne($params);
|
||||
if (empty($order_inquiry_case)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "患者病例错误");
|
||||
}
|
||||
// 获取病例数据
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$order_inquiry_case = OrderInquiryCase::getOne($params);
|
||||
if (empty($order_inquiry_case)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "患者病例错误");
|
||||
}
|
||||
|
||||
// 验证订单状态
|
||||
if ($order_inquiry['inquiry_status'] != 1) {
|
||||
Db::rollBack();
|
||||
// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "支付失败");
|
||||
}
|
||||
// 验证订单状态
|
||||
if ($order_inquiry['inquiry_status'] != 1) {
|
||||
// 问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "支付失败");
|
||||
}
|
||||
|
||||
// 验证支付金额
|
||||
if ($order_inquiry['payment_amount_total'] != 0) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "支付失败");
|
||||
}
|
||||
// 验证支付金额
|
||||
if ($order_inquiry['payment_amount_total'] != 0) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "支付失败");
|
||||
}
|
||||
|
||||
$generator = $this->container->get(IdGeneratorInterface::class);
|
||||
$escrow_trade_no = "GD" . $generator->generate(); // 第三方支付流水号
|
||||
// 修改问诊订单支付状态
|
||||
$data = array();
|
||||
$data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付)
|
||||
$data['inquiry_pay_status'] = 2;
|
||||
if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) {
|
||||
// 专家-公益
|
||||
$data['inquiry_status'] = 3;// 3:待接诊
|
||||
} elseif ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) {
|
||||
// 快速-购药
|
||||
$data['inquiry_status'] = 2;// 2:待分配
|
||||
}
|
||||
$generator = $this->container->get(IdGeneratorInterface::class);
|
||||
$escrow_trade_no = "GD" . $generator->generate(); // 第三方支付流水号
|
||||
|
||||
$data['escrow_trade_no'] = $escrow_trade_no;
|
||||
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
|
||||
$data['updated_at'] = date('Y-m-d H:i:s', time());
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
OrderInquiry::edit($params, $data);
|
||||
// 修改问诊订单支付状态
|
||||
$data = array();
|
||||
$data['inquiry_pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付)
|
||||
$data['inquiry_pay_status'] = 2;
|
||||
if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) {
|
||||
// 专家-公益
|
||||
$data['inquiry_status'] = 3;// 3:待接诊
|
||||
} elseif ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) {
|
||||
// 快速-购药
|
||||
$data['inquiry_status'] = 2;// 2:待分配
|
||||
}
|
||||
|
||||
// 修改订单表支付状态
|
||||
$data = array();
|
||||
$data['pay_status'] = 2;
|
||||
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
|
||||
$data['escrow_trade_no'] = $escrow_trade_no;
|
||||
$data['updated_at'] = date('Y-m-d H:i:s', time());
|
||||
$data['escrow_trade_no'] = $escrow_trade_no;
|
||||
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
|
||||
$data['updated_at'] = date('Y-m-d H:i:s', time());
|
||||
$params = array();
|
||||
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
OrderInquiry::edit($params, $data);
|
||||
|
||||
$params = array();
|
||||
$params['order_no'] = $order_inquiry['inquiry_no'];
|
||||
Order::edit($params,$data);
|
||||
// 修改订单表支付状态
|
||||
$data = array();
|
||||
$data['pay_status'] = 2;
|
||||
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
|
||||
$data['escrow_trade_no'] = $escrow_trade_no;
|
||||
$data['updated_at'] = date('Y-m-d H:i:s', time());
|
||||
|
||||
// 处理队列
|
||||
if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) {
|
||||
// 快速-购药
|
||||
// 加入分配医生队列
|
||||
$data = array();
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$params = array();
|
||||
$params['order_no'] = $order_inquiry['inquiry_no'];
|
||||
Order::edit($params,$data);
|
||||
|
||||
$message = new AssignDoctorDelayDirectProducer($data);
|
||||
$message->setDelayMs(1000 * 5);
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$res = $producer->produce($message);
|
||||
if (!$res) {
|
||||
// 加入分配医生队列-快速-购药
|
||||
if ($order_inquiry['inquiry_type'] == 2 || $order_inquiry['inquiry_type'] == 4) {
|
||||
$data = array();
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
|
||||
$message = new AssignDoctorDelayDirectProducer($data);
|
||||
$message->setDelayMs(1000 * 5);
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$res = $producer->produce($message);
|
||||
if (!$res) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "分配医生失败");
|
||||
}
|
||||
}
|
||||
|
||||
// 发送首条im消息-专家-公益
|
||||
if ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) {
|
||||
// 获取订单医生数据
|
||||
$params = array();
|
||||
$params['doctor_id'] = $order_inquiry['doctor_id'];
|
||||
$user_doctor = UserDoctor::getOne($params);
|
||||
if (empty($user_doctor)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "医生数据错误");
|
||||
}
|
||||
|
||||
// 发送im消息
|
||||
$imService = new ImService();
|
||||
|
||||
// 等待医生接诊
|
||||
$imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']);
|
||||
|
||||
// 发送站内、订阅失败发送短信消息-医生有新问诊
|
||||
$MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']);
|
||||
$MessagePush->doctorHaveNewInquiry();
|
||||
|
||||
// 加入xx时间未接诊通知队列
|
||||
$data = array();
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
|
||||
$time = 1000 * 60 * 60 * 2;
|
||||
$message = new DoctorNotYetInquiryDelayDirectProducer($data);
|
||||
$message->setDelayMs($time);
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$producer->produce($message);
|
||||
}
|
||||
|
||||
break;
|
||||
case 2: // 药品订单
|
||||
$params = array();
|
||||
$params['order_product_no'] = $order_no;
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$order_product = OrderProduct::getOne($params);
|
||||
if (empty($order_product)) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法订单");
|
||||
}
|
||||
|
||||
// 验证订单状态
|
||||
if ($order_product['order_product_status'] != 1) {
|
||||
// 订单状态(1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "支付失败");
|
||||
}
|
||||
|
||||
// 验证支付金额
|
||||
if ($order_product['payment_amount_total'] != 0) {
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "支付失败");
|
||||
}
|
||||
|
||||
$generator = $this->container->get(IdGeneratorInterface::class);
|
||||
$escrow_trade_no = "GD" . $generator->generate(); // 第三方支付流水号
|
||||
|
||||
// 修改药品订单支付状态
|
||||
$data = array();
|
||||
$data['order_product_status'] = 2;
|
||||
$data['pay_status'] = 2;
|
||||
$data['pay_channel'] = 3; // 支付渠道(1:小程序支付 2:微信扫码支付 3:模拟支付)
|
||||
$data['escrow_trade_no'] = $escrow_trade_no;
|
||||
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
|
||||
$data['updated_at'] = date('Y-m-d H:i:s', time());
|
||||
|
||||
$params = array();
|
||||
$params['order_product_id'] = $order_product['order_product_id'];
|
||||
OrderProduct::edit($params, $data);
|
||||
|
||||
// 修改订单表支付状态
|
||||
$data = array();
|
||||
$data['pay_status'] = 2;
|
||||
$data['pay_time'] = date('Y-m-d H:i:s', time());// 支付时间
|
||||
$data['escrow_trade_no'] = $escrow_trade_no;
|
||||
$data['updated_at'] = date('Y-m-d H:i:s', time());
|
||||
|
||||
$params = array();
|
||||
$params['order_no'] = $order_product['order_product_no'];
|
||||
Order::edit($params,$data);
|
||||
|
||||
try {
|
||||
if ($order_product['coupon_amount_total'] > 0){
|
||||
// 获取药品订单优惠卷数据
|
||||
$params = array();
|
||||
$params['order_product_id'] = $order_product['order_product_id'];
|
||||
$order_product_coupons = OrderProductCoupon::getList($params);
|
||||
if (!empty($order_product_coupons)){
|
||||
foreach ($order_product_coupons as $order_product_coupon){
|
||||
// 获取用户优惠卷数据
|
||||
$params = array();
|
||||
$params['user_coupon_id'] = $order_product_coupon['user_coupon_id'];
|
||||
$user_coupon = UserCoupon::getOne($params);
|
||||
if (!empty($user_coupon)){
|
||||
// 获取优惠卷数据
|
||||
$params = array();
|
||||
$params['coupon_id'] = $user_coupon['coupon_id'];
|
||||
$coupon = Coupon::getOne($params);
|
||||
if (!empty($coupon)){
|
||||
if ($coupon['reissue_interval_days'] > 0){
|
||||
$data = array();
|
||||
$data['coupon_id'] = $coupon['coupon_id'];
|
||||
$data['user_id'] = $user_coupon['user_id'];
|
||||
|
||||
$time = $coupon['reissue_interval_days'] * 24 * 60 * 60 * 1000;
|
||||
$message = new GrantUserCouponDelayDirectProducer($data);
|
||||
$message->setDelayMs($time);
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$res = $producer->produce($message);
|
||||
if (!$res) {
|
||||
Log::getInstance("PatientOrderService-addPatientOrderPay")->error("再次发放优惠卷失败");
|
||||
}
|
||||
|
||||
Log::getInstance("PatientOrderService-addPatientOrderPay")->info("再次发放优惠卷成功");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}catch (\Throwable $e){
|
||||
// 此处异常不做处理
|
||||
Log::getInstance("PatientOrderService-addPatientOrderPay")->error($e->getMessage());
|
||||
}
|
||||
|
||||
break;
|
||||
case 3: // 检测订单
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "分配医生失败");
|
||||
}
|
||||
} elseif ($order_inquiry['inquiry_type'] == 1 || $order_inquiry['inquiry_type'] == 3) {
|
||||
// 专家-公益,发送im消息
|
||||
// 获取订单医生数据
|
||||
$params = array();
|
||||
$params['doctor_id'] = $order_inquiry['doctor_id'];
|
||||
$user_doctor = UserDoctor::getOne($params);
|
||||
if (empty($user_doctor)) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型");
|
||||
|
||||
break;
|
||||
case 4: // 健康包订单
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "医生数据错误");
|
||||
}
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型");
|
||||
|
||||
// 发送im消息
|
||||
$imService = new ImService();
|
||||
break;
|
||||
case 5: // 随访包订单
|
||||
|
||||
// 等待医生接诊
|
||||
$imService->waitDoctorInquiry($order_inquiry, $user_doctor['user_id'], $order_inquiry['user_id']);
|
||||
|
||||
// 发送站内、订阅失败发送短信消息-医生有新问诊
|
||||
$MessagePush = new MessagePush($user_doctor['user_id'], $order_inquiry['order_inquiry_id']);
|
||||
$MessagePush->doctorHaveNewInquiry();
|
||||
|
||||
// 加入xx时间未接诊通知队列
|
||||
$data = array();
|
||||
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
|
||||
$time = 1000 * 60 * 60 * 2;
|
||||
$message = new DoctorNotYetInquiryDelayDirectProducer($data);
|
||||
$message->setDelayMs($time);
|
||||
$producer = $this->container->get(Producer::class);
|
||||
$producer->produce($message);
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法订单类型");
|
||||
break;
|
||||
default:
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "支付失败");
|
||||
}
|
||||
|
||||
Db::commit();
|
||||
} catch (\Exception $e) {
|
||||
}catch (\Throwable $e){
|
||||
Db::rollBack();
|
||||
return fail(HttpEnumCode::SERVER_ERROR, $e->getMessage());
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user