10、问诊订单退款

11、药品订单退款
12、问诊订单模拟退款
13、药品订单模拟退款
This commit is contained in:
2023-11-08 20:01:39 +08:00
parent 2336d96915
commit fa2d402aa0
7 changed files with 207 additions and 98 deletions
+28 -63
View File
@@ -21,6 +21,7 @@ use App\Model\OrderInquiryCase;
use App\Model\OrderInquiryCoupon;
use App\Model\OrderInquiryRefund;
use App\Model\OrderPrescription;
use App\Model\OrderProductCoupon;
use App\Model\PatientFamily;
use App\Model\PatientFamilyHealth;
use App\Model\PatientFamilyPersonal;
@@ -1264,8 +1265,21 @@ class InquiryService extends BaseService
// 模拟退款时手动退还优惠卷
if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) {
$InquiryService = new InquiryService();
$InquiryService->returnInquiryCoupon($order_inquiry['order_inquiry_id'], $order_inquiry['user_id']);
// 获取该订单全部优惠卷数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_coupons = OrderInquiryCoupon::getList($params);
if (!empty($order_inquiry_coupons)){
$userCouponService = new UserCouponService();
foreach ($order_inquiry_coupons as $order_inquiry_coupon){
// 退还优惠卷
$userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']);
// 发送站内消息-优惠卷退还
$MessagePush = new MessagePush($order_inquiry['user_id']);
$MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']);
}
}
}
}
@@ -1378,17 +1392,20 @@ class InquiryService extends BaseService
// 处理订单优惠卷
if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) {
$InquiryService = new InquiryService();
$InquiryService->returnInquiryCoupon($order_inquiry['order_inquiry_id'], $order_inquiry['user_id']);
// 获取用户优惠卷信息
// 获取该订单全部优惠卷数据
$params = array();
$params['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
$order_inquiry_coupon = OrderInquiryCoupon::getOne($params);
if (!empty($order_inquiry_coupon)) {
// 发送站内消息-优惠卷退还
$MessagePush = new MessagePush($order_inquiry['user_id'], $order_inquiry['order_inquiry_id']);
$MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']);
$order_inquiry_coupons = OrderInquiryCoupon::getList($params);
if (!empty($order_inquiry_coupons)){
$userCouponService = new UserCouponService();
foreach ($order_inquiry_coupons as $order_inquiry_coupon){
// 退还优惠卷
$userCouponService->returnUserCoupon($order_inquiry_coupon['user_coupon_id']);
// 发送站内消息-优惠卷退还
$MessagePush = new MessagePush($order_inquiry['user_id']);
$MessagePush->patientRefundCoupon($order_inquiry_coupon['coupon_name']);
}
}
}
@@ -1456,58 +1473,6 @@ class InquiryService extends BaseService
return true;
}
/**
* 退还问诊订单优惠卷
* @param string $order_inquiry_id 问诊订单id
* @param string $patient_user_id 患者用户id
* @return bool
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function returnInquiryCoupon(string $order_inquiry_id, string $patient_user_id): bool
{
try {
// 获取用户优惠卷信息
$params = array();
$params['order_inquiry_id'] = $order_inquiry_id;
$order_inquiry_coupon = OrderInquiryCoupon::getOne($params);
if (empty($order_inquiry_coupon)) {
// 订单未使用优惠卷,无需退还
return true;
}
// 获取用户优惠卷数据
$params = array();
$params['user_coupon_id'] = $order_inquiry_coupon['user_coupon_id'];
$user_coupon = UserCoupon::getOne($params);
if (empty($user_coupon)) {
// 无该优惠卷数据,无需处理
return true;
}
// 恢复优惠卷
$data = array();
// 检测优惠卷过期时间。判断是否需要退还
if (strtotime($user_coupon['valid_end_time']) <= time()) {
// 超出过期时间,置为已过期
$data['user_coupon_status'] = 3;
} else {
$data['user_coupon_status'] = 0;
$data['coupon_use_date'] = null;
}
$params = array();
$params['user_coupon_id'] = $order_inquiry_coupon['user_coupon_id'];
UserCoupon::edit($params, $data);
return true;
} catch (\Exception $e) {
Log::getInstance()->error("退还用户优惠卷失败" . $e->getMessage());
return false;
}
}
/**
* 检测当前是否符合系统问诊时间
* @param string $inquiry_type 接诊类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
+61 -1
View File
@@ -4,14 +4,17 @@ namespace App\Services;
use App\Constants\HttpEnumCode;
use App\Exception\BusinessException;
use App\Model\OrderInquiryCoupon;
use App\Model\OrderInquiryRefund;
use App\Model\OrderPrescription;
use App\Model\OrderPrescriptionProduct;
use App\Model\OrderProduct;
use App\Model\OrderProductCoupon;
use App\Model\OrderProductItem;
use App\Model\OrderProductRefund;
use App\Model\Product;
use App\Model\ProductPlatformAmount;
use App\Model\UserPatient;
use Extend\Wechat\WechatPay;
use Hyperf\DbConnection\Db;
use Hyperf\Snowflake\IdGeneratorInterface;
@@ -41,6 +44,8 @@ class OrderProductService extends BaseService
* @param string|int $cancel_reason 订单取消原因(1:主动取消 2:复核失败/库存不足 3:支付超时
* @param string $cancel_remarks 订单取消原因
* @return array
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function cancelUnpayProductOrder(string|int $order_no,string|int $cancel_reason,string $cancel_remarks): array
{
@@ -87,6 +92,16 @@ class OrderProductService extends BaseService
return $result;
}
// 获取患者数据
$params = array();
$params['patient_id'] = $order_product['patient_id'];
$user_patient = UserPatient::getOne($params);
if (empty($user_patient)){
$result['status'] = 0;
$result['message'] = "取消未支付的问诊订单失败:未查询到对应用户数据";
return $result;
}
// 取消药品订单
$data = array();
$data['order_product_status'] = 5;
@@ -134,7 +149,6 @@ class OrderProductService extends BaseService
return $result;
}
// 库存+订单商品数量
$params = array();
$params['amount_id'] = $product_platform_amount['amount_id'];
@@ -181,6 +195,25 @@ class OrderProductService extends BaseService
OrderPrescriptionProduct::edit($params, $data);
}
// 处理订单优惠卷
if (!empty($order_product['coupon_amount_total']) && $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)){
$userCouponService = new UserCouponService();
foreach ($order_product_coupons as $order_product_coupon){
// 退还优惠卷
$userCouponService->returnUserCoupon($order_product_coupon['user_coupon_id']);
// 发送站内消息-优惠卷退还
$MessagePush = new MessagePush($user_patient['user_id']);
$MessagePush->patientRefundCoupon($order_product_coupon['coupon_name']);
}
}
}
return $result;
}
@@ -233,6 +266,14 @@ class OrderProductService extends BaseService
throw new BusinessException("订单支付状态错误,无法退款");
}
// 获取患者数据
$params = array();
$params['patient_id'] = $order_product['patient_id'];
$user_patient = UserPatient::getOne($params);
if (empty($user_patient)){
throw new BusinessException("未查询到对应用户数据");
}
// 系统退款编号
$generator = $this->container->get(IdGeneratorInterface::class);
$product_refund_no = $generator->generate();
@@ -281,6 +322,25 @@ class OrderProductService extends BaseService
$refund_status = 3;
$refund_id = "模拟退款:" . $generator->generate();
$success_time = date("Y-m-d H:i:s", time());
// 模拟退款时手动退还优惠卷
if (!empty($order_product['coupon_amount_total']) && $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)){
$userCouponService = new UserCouponService();
foreach ($order_product_coupons as $order_product_coupon){
// 退还优惠卷
$userCouponService->returnUserCoupon($order_product_coupon['user_coupon_id']);
// 发送站内消息-优惠卷退还
$MessagePush = new MessagePush($user_patient['user_id']);
$MessagePush->patientRefundCoupon($order_product_coupon['coupon_name']);
}
}
}
}
// 新增退款表
+1 -1
View File
@@ -641,7 +641,7 @@ class PatientOrderService extends BaseService
}
Db::commit();
} catch (\Exception $e) {
} catch (\Throwable $e) {
Db::rollBack();
return fail(HttpEnumCode::HTTP_ERROR, $e->getMessage());
}
+42
View File
@@ -2,8 +2,10 @@
namespace App\Services;
use App\Model\OrderInquiryCoupon;
use App\Model\Product;
use App\Model\UserCoupon;
use App\Utils\Log;
/**
* 用户优惠卷
@@ -209,4 +211,44 @@ class UserCouponService extends BaseService
return $selected_coupons;
}
/**
* 退还用户优惠卷
* @param string|int $user_coupon_id
* @return bool
*/
public function returnUserCoupon(string|int $user_coupon_id): bool
{
try {
// 获取用户优惠卷数据
$params = array();
$params['user_coupon_id'] = $user_coupon_id;
$user_coupon = UserCoupon::getOne($params);
if (empty($user_coupon)) {
// 无该优惠卷数据,无需处理
return true;
}
// 恢复优惠卷
$data = array();
// 检测优惠卷过期时间。判断是否需要退还
if (strtotime($user_coupon['valid_end_time']) <= time()) {
// 超出过期时间,置为已过期
$data['user_coupon_status'] = 3;
} else {
$data['user_coupon_status'] = 0;
$data['coupon_use_date'] = null;
}
$params = array();
$params['user_coupon_id'] = $user_coupon_id;
UserCoupon::edit($params, $data);
}catch (\Throwable $e){
Log::getInstance("UserCouponService-returnUserCoupon")->error($e->getMessage());
return false;
}
return true;
}
}