修改创建药品订单
This commit is contained in:
parent
93ccad2946
commit
6939dbd981
@ -1279,7 +1279,6 @@ class PatientOrderService extends BaseService
|
|||||||
if ($order_prescription['prescription_status'] == 1) {
|
if ($order_prescription['prescription_status'] == 1) {
|
||||||
return fail(HttpEnumCode::HTTP_ERROR, "处方未审核");
|
return fail(HttpEnumCode::HTTP_ERROR, "处方未审核");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($order_prescription['prescription_status'] == 4) {
|
if ($order_prescription['prescription_status'] == 4) {
|
||||||
return fail(HttpEnumCode::HTTP_ERROR, "处方已失效");
|
return fail(HttpEnumCode::HTTP_ERROR, "处方已失效");
|
||||||
}
|
}
|
||||||
@ -1291,6 +1290,14 @@ class PatientOrderService extends BaseService
|
|||||||
return fail(HttpEnumCode::HTTP_ERROR, "处方未审核");
|
return fail(HttpEnumCode::HTTP_ERROR, "处方未审核");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取问诊订单数据
|
||||||
|
$params = array();
|
||||||
|
$params['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
|
||||||
|
$order_inquiry = OrderInquiry::getOne($params);
|
||||||
|
if (empty($order_inquiry)){
|
||||||
|
return fail(HttpEnumCode::HTTP_ERROR, "创建订单失败");
|
||||||
|
}
|
||||||
|
|
||||||
// 检测收货地址
|
// 检测收货地址
|
||||||
$params = array();
|
$params = array();
|
||||||
$params['user_id'] = $user_info['user_id'];
|
$params['user_id'] = $user_info['user_id'];
|
||||||
@ -1303,8 +1310,8 @@ class PatientOrderService extends BaseService
|
|||||||
$not_enough_product_ids = [];
|
$not_enough_product_ids = [];
|
||||||
$amount_total = 0;
|
$amount_total = 0;
|
||||||
|
|
||||||
// 优惠卷商品数据
|
// 商品数据
|
||||||
$coupon_product_datas = array();
|
$product_datas = array();
|
||||||
|
|
||||||
foreach ($product_ids as $product_id) {
|
foreach ($product_ids as $product_id) {
|
||||||
// 检测药品是否存在于处方中
|
// 检测药品是否存在于处方中
|
||||||
@ -1329,35 +1336,70 @@ class PatientOrderService extends BaseService
|
|||||||
if ($order_prescription_product['prescription_product_num'] > $product['ProductPlatformAmount']['stock']) {
|
if ($order_prescription_product['prescription_product_num'] > $product['ProductPlatformAmount']['stock']) {
|
||||||
// 库存不足
|
// 库存不足
|
||||||
$not_enough_product_ids[] = $product_id;
|
$not_enough_product_ids[] = $product_id;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取订单金额
|
// 获取订单金额
|
||||||
$amount_total = bcadd($amount_total, ($product['product_price'] * $order_prescription_product['prescription_product_num']), 2);
|
$amount_total = bcadd($amount_total, ($product['product_price'] * $order_prescription_product['prescription_product_num']), 2);
|
||||||
|
|
||||||
// 优惠卷商品数据
|
// 商品数据
|
||||||
$coupon_product_data = array();
|
|
||||||
$product['product_num'] = $order_prescription_product['prescription_product_num'];
|
$product['product_num'] = $order_prescription_product['prescription_product_num'];
|
||||||
$coupon_product_data = $product->toArray();
|
$product_data = $product->toArray();
|
||||||
$coupon_product_datas[] = $coupon_product_data;
|
$product_datas[] = $product_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 库存不足返回错误
|
||||||
if (!empty($not_enough_product_ids)) {
|
if (!empty($not_enough_product_ids)) {
|
||||||
return fail(HttpEnumCode::HTTP_ERROR, "存在库存不足商品", $not_enough_product_ids);
|
return fail(HttpEnumCode::HTTP_ERROR, "存在库存不足商品", $not_enough_product_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 定义优惠卷金额默认值
|
if (empty($product_datas)) {
|
||||||
$coupon_amount_total = 0;
|
return fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理健康包赠送商品
|
||||||
|
if ($order_inquiry['inquiry_type'] == 1 && $order_inquiry['inquiry_mode'] == 8){
|
||||||
|
// 获取问诊订单关联服务包id
|
||||||
|
$params = array();
|
||||||
|
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||||
|
$order_service_package_inquiry = OrderServicePackageInquiry::getOne($params);
|
||||||
|
if (empty($order_service_package_inquiry)){
|
||||||
|
return fail();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 此处不检测未支付的商品订单,在创建订单时会进行数量的扣减
|
||||||
|
// 处理商品数量
|
||||||
|
$OrderServicePackageService = new OrderServicePackageService();
|
||||||
|
|
||||||
|
$amount_total = 0;
|
||||||
|
foreach ($product_datas as &$product_data){
|
||||||
|
// 获取服务包剩余药品数量
|
||||||
|
$remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']);
|
||||||
|
|
||||||
|
// 可用数量大于处方商品数量,此情况把商品价格置为0
|
||||||
|
if ($remaining_quantity >= $product_data['product_num']){
|
||||||
|
$product_data['product_price'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 此处重新计算药品总金额
|
||||||
|
$amount_total = bcadd(
|
||||||
|
$amount_total,
|
||||||
|
bcmul(
|
||||||
|
$product_data['product_price'],
|
||||||
|
$product_data['product_num'],
|
||||||
|
2
|
||||||
|
),
|
||||||
|
2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($coupon_product_datas)) {
|
|
||||||
// 获取患者购药可用的优惠卷
|
// 获取患者购药可用的优惠卷
|
||||||
$userCouponService = new UserCouponService();
|
$userCouponService = new UserCouponService();
|
||||||
$user_coupons = $userCouponService->getUserProductUsableCoupon($user_info['user_id'], $coupon_product_datas);
|
$user_coupons = $userCouponService->getUserProductUsableCoupon($user_info['user_id'], $product_datas);
|
||||||
|
|
||||||
// 获取可用优惠卷总金额
|
// 获取可用优惠卷总金额
|
||||||
$coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons);
|
$coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupons);
|
||||||
}
|
|
||||||
|
|
||||||
// 处理运费数据
|
// 处理运费数据
|
||||||
$app_env = config('app_env', 'prod');
|
$app_env = config('app_env', 'prod');
|
||||||
@ -1376,7 +1418,15 @@ class PatientOrderService extends BaseService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 实际支付金额=商品总金额-优惠卷金额+运费金额
|
// 实际支付金额=商品总金额-优惠卷金额+运费金额
|
||||||
$payment_amount_total = bcadd(bcsub($amount_total , $coupon_amount_total,2), $logistics_fee, 2);
|
$payment_amount_total = bcadd(
|
||||||
|
bcsub(
|
||||||
|
$amount_total ,
|
||||||
|
$coupon_amount_total,
|
||||||
|
2
|
||||||
|
),
|
||||||
|
$logistics_fee,
|
||||||
|
2
|
||||||
|
);
|
||||||
if ($app_env == "dev") {
|
if ($app_env == "dev") {
|
||||||
$payment_amount_total = 0.01;
|
$payment_amount_total = 0.01;
|
||||||
}
|
}
|
||||||
@ -1451,26 +1501,9 @@ class PatientOrderService extends BaseService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 新增药品订单详情
|
// 新增药品订单详情
|
||||||
foreach ($product_ids as $product_id) {
|
foreach ($product_datas as $product_data) {
|
||||||
$params = array();
|
$params = array();
|
||||||
$params['order_prescription_id'] = $order_prescription['order_prescription_id'];
|
$params['product_platform_code'] = $product_data['product_platform_code'];
|
||||||
$params['product_id'] = $product_id;
|
|
||||||
$order_prescription_product = OrderPrescriptionProduct::getOne($params);
|
|
||||||
if (empty($order_prescription_product)) {
|
|
||||||
Db::rollBack();
|
|
||||||
return fail(HttpEnumCode::HTTP_ERROR, "创建订单失败");
|
|
||||||
}
|
|
||||||
|
|
||||||
$params = array();
|
|
||||||
$params['product_id'] = $product_id;
|
|
||||||
$product = Product::getOne($params);
|
|
||||||
if (empty($product)) {
|
|
||||||
Db::rollBack();
|
|
||||||
return fail(HttpEnumCode::HTTP_ERROR, "处方存在未知药品");
|
|
||||||
}
|
|
||||||
|
|
||||||
$params = array();
|
|
||||||
$params['product_platform_code'] = $product['product_platform_code'];
|
|
||||||
$product_platform_amount = ProductPlatformAmount::getSharedLockOne($params);
|
$product_platform_amount = ProductPlatformAmount::getSharedLockOne($params);
|
||||||
if (empty($product_platform_amount)) {
|
if (empty($product_platform_amount)) {
|
||||||
Db::rollBack();
|
Db::rollBack();
|
||||||
@ -1481,14 +1514,14 @@ class PatientOrderService extends BaseService
|
|||||||
$data['order_product_id'] = $order_product['order_product_id'];
|
$data['order_product_id'] = $order_product['order_product_id'];
|
||||||
$data['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
|
$data['order_inquiry_id'] = $order_prescription['order_inquiry_id'];
|
||||||
$data['order_prescription_id'] = $order_prescription['order_prescription_id'];
|
$data['order_prescription_id'] = $order_prescription['order_prescription_id'];
|
||||||
$data['product_id'] = $product_id;
|
$data['product_id'] = $product_data['product_id'];
|
||||||
$data['product_name'] = $order_prescription_product['product_name'];
|
$data['product_name'] = $product_data['product_name'];
|
||||||
$data['product_price'] = $product['product_price'] * $order_prescription_product['prescription_product_num'];
|
$data['product_price'] = bcmul($product_data['product_price'],$product_data['product_num'],3);
|
||||||
$data['product_platform_code'] = $product['product_platform_code'];
|
$data['product_platform_code'] = $product_data['product_platform_code'];
|
||||||
$data['amount'] = $order_prescription_product['prescription_product_num'];
|
$data['amount'] = $product_data['product_num'];
|
||||||
$data['manufacturer'] = $order_prescription_product['manufacturer'];
|
$data['manufacturer'] = $product_data['manufacturer'];
|
||||||
$data['product_cover_img'] = $product['product_cover_img'];
|
$data['product_cover_img'] = $product_data['product_cover_img'];
|
||||||
$data['product_spec'] = $order_prescription_product['product_spec'];
|
$data['product_spec'] = $product_data['product_spec'];
|
||||||
$order_product_item = OrderProductItem::addOrderProductItem($data);
|
$order_product_item = OrderProductItem::addOrderProductItem($data);
|
||||||
if (empty($order_product_item)) {
|
if (empty($order_product_item)) {
|
||||||
Db::rollBack();
|
Db::rollBack();
|
||||||
@ -1500,14 +1533,14 @@ class PatientOrderService extends BaseService
|
|||||||
$data['use_status'] = 1;
|
$data['use_status'] = 1;
|
||||||
|
|
||||||
$params = array();
|
$params = array();
|
||||||
$params['prescription_product_id'] = $order_prescription_product['prescription_product_id'];
|
$params['prescription_product_id'] = $product_data['prescription_product_id'];
|
||||||
OrderPrescriptionProduct::edit($params, $data);
|
OrderPrescriptionProduct::edit($params, $data);
|
||||||
|
|
||||||
// 锁定库存
|
// 锁定库存
|
||||||
// 库存-1
|
// 库存-1
|
||||||
$params = array();
|
$params = array();
|
||||||
$params['amount_id'] = $product_platform_amount['amount_id'];
|
$params['amount_id'] = $product_platform_amount['amount_id'];
|
||||||
ProductPlatformAmount::dec($params, 'stock', $order_prescription_product['prescription_product_num']);
|
ProductPlatformAmount::dec($params, 'stock', $product_data['product_num']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改处方为已使用
|
// 修改处方为已使用
|
||||||
@ -1556,13 +1589,18 @@ class PatientOrderService extends BaseService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 增加至取消订单延迟队列
|
// 增加至未支付取消订单延迟队列
|
||||||
|
$time = 60 * 30;
|
||||||
|
if (\Hyperf\Config\config('app_env') == "dev"){
|
||||||
|
$time = 60 * 5;
|
||||||
|
}
|
||||||
|
|
||||||
$data = array();
|
$data = array();
|
||||||
$data['order_no'] = (string)$order_product['order_product_no'];
|
$data['order_no'] = (string)$order_product['order_product_no'];
|
||||||
$data['order_type'] = 2;
|
$data['order_type'] = 2;
|
||||||
|
|
||||||
$message = new CancelUnpayOrdersDelayDirectProducer($data);
|
$message = new CancelUnpayOrdersDelayDirectProducer($data);
|
||||||
$message->setDelayMs(1000 * 60 * 30);
|
$message->setDelayMs(1000 * $time);
|
||||||
$producer = $this->container->get(Producer::class);
|
$producer = $this->container->get(Producer::class);
|
||||||
$res = $producer->produce($message);
|
$res = $producer->produce($message);
|
||||||
if (!$res) {
|
if (!$res) {
|
||||||
@ -1846,9 +1884,9 @@ class PatientOrderService extends BaseService
|
|||||||
// 获取服务包剩余药品数量
|
// 获取服务包剩余药品数量
|
||||||
$remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']);
|
$remaining_quantity = $OrderServicePackageService->getOrderServiceProductRemainingQuantity($order_service_package_inquiry['order_service_id'],$product_data['product_id']);
|
||||||
|
|
||||||
// 可用数量大于处方商品数量,此情况把商品数量置为0
|
// 可用数量大于处方商品数量,此情况把商品价格置为0
|
||||||
if ($remaining_quantity >= $product_data['product_num']){
|
if ($remaining_quantity >= $product_data['product_num']){
|
||||||
$product_data['product_num'] = 0;
|
$product_data['product_price'] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 此处重新计算药品总金额
|
// 此处重新计算药品总金额
|
||||||
@ -2872,6 +2910,7 @@ class PatientOrderService extends BaseService
|
|||||||
$fields = [
|
$fields = [
|
||||||
'order_inquiry_id',
|
'order_inquiry_id',
|
||||||
'inquiry_status',
|
'inquiry_status',
|
||||||
|
'created_at',
|
||||||
];
|
];
|
||||||
|
|
||||||
$params = array();
|
$params = array();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user