hospital-applets-api/app/Services/OrderProductService.php

174 lines
7.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Model\OrderPrescription;
use App\Model\OrderPrescriptionProduct;
use App\Model\OrderProduct;
use App\Model\OrderProductItem;
use App\Model\Product;
use App\Model\ProductPlatformAmount;
use Hyperf\DbConnection\Db;
class OrderProductService extends BaseService
{
/**
* 获取患者某一状态下的商品订单数量
* @param string $patient_id 患者id
* @param int $order_product_status 订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:已完成 6:已取消)
* @return int
*/
public function getPatientProductWithStatus(string $patient_id,int $order_product_status): int
{
$params = array();
$params['patient_id'] = $patient_id;
$params['order_product_status'] = $order_product_status;
return OrderProduct::getCount($params);
}
/**
* 取消未支付的药品订单
* 外层需加事物
* @param string|int $order_no 系统订单编号
* @param string|int $cancel_reason 订单取消原因1:主动取消 2:复核失败/库存不足 3:支付超时
* @param string $cancel_remarks 订单取消原因
* @return array
*/
public function cancelUnpayProductOrder(string|int $order_no,string|int $cancel_reason,string $cancel_remarks): array
{
$result = array();
$result['status'] = 1;
$result['message'] = "成功";
// 获取药品订单数据
$params = array();
$params['order_product_no'] = $order_no;
$order_product = OrderProduct::getOne($params);
if (empty($order_product)){
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单失败:未查询到对应订单数据";
return $result;
}
// 检测订单状态
if ($order_product['order_product_status'] == 5){
// 订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
$result['status'] = 2;
$result['message'] = "取消未支付的问诊订单:订单已取消";
return $result;
}
if ($order_product['order_product_status'] != 1){
// 订单状态1:待支付 2:待发货 3:已发货 4:已签收 5:已取消)
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单:订单状态为" . $order_product['order_product_status'] . "无法执行";
return $result;
}
if (!in_array($order_product['refund_status'],[0,4,5])) {
// 商品订单退款状态0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭)
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单:订单正在退款中";
return $result;
}
if ($order_product['inquiry_pay_status'] == 2) {
// 支付状态1:未支付 2:已支付 3:支付中 4:支付失败 5:支付超时 6:支付关闭 7:已撤销 8:转入退款)
$result['status'] = 2;
$result['message'] = "取消未支付的问诊订单:订单已支付";
return $result;
}
// 取消药品订单
$data = array();
$data['order_product_status'] = 5;
$data['cancel_time'] = date("Y-m-d H:i:s",time());
$data['cancel_reason'] = $cancel_reason; // 订单取消原因1:主动取消 2:复核失败/库存不足 3:支付超时
$data['cancel_remarks'] = $cancel_remarks; // 取消订单原因1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
$data['updated_at'] = date("Y-m-d H:i:s",time());
$params = array();
$params['order_inquiry_id'] = $order_product['order_inquiry_id'];
OrderProduct::edit($params,$data);
// 获取订单商品订单列表
$params = array();
$params['order_product_id'] = $order_product['order_product_id'];
$order_product_item = OrderProductItem::getList($params);
if (empty($order_product_item)){
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单失败:未查询到对应订单商品订单列表";
return $result;
}
foreach ($order_product_item as $item){
// 释放锁定库存
$params = array();
$params['product_id'] = $item['product_id'];
$product = Product::getOne($params);
if (empty($product)){
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单失败:未查询到对应订单商品订单列表";
return $result;
}
$params = array();
$params['product_platform_code'] = $product['product_platform_code'];
$product_platform_amount = ProductPlatformAmount::getSharedLockOne($params);
if (empty($product_platform_amount)){
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单失败:无商品库存数据";
return $result;
}
// 库存+订单商品数量
$params = array();
$params['amount_id'] = $product_platform_amount['amount_id'];
ProductPlatformAmount::inc($params, 'stock', (float)$item['amount']);
}
// 获取处方数据
$params = array();
$params['order_prescription_id'] = $order_product['order_prescription_id'];
$order_prescription = OrderPrescription::getOne($params);
if (empty($order_prescription)){
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单失败:未查询到对应订单处方";
return $result;
}
// 修改处方状态为未使用
if ($order_prescription['prescription_status'] == 4){
$data = array();
$data['prescription_status'] = 2;
$params = array();
$params['order_prescription_id'] = $order_prescription['order_prescription_id'];
OrderPrescription::edit($params, $data);
}
// 获取处方商品数据
$params = array();
$params['order_prescription_id'] = $order_prescription['order_prescription_id'];
$order_prescription_product = OrderPrescriptionProduct::getList($params);
if (empty($order_prescription_product)) {
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单失败:未查询到对应订单处方商品数据";
return $result;
}
// 修改处方商品为未使用
foreach ($order_prescription_product as $item){
$data = array();
$data['use_status'] = 0;
$params = array();
$params['prescription_product_id'] = $item['prescription_product_id'];
OrderPrescriptionProduct::edit($params, $data);
}
return $result;
}
}