From 2019d200b53f2ce95a87a77803209ea98904b0c2 Mon Sep 17 00:00:00 2001 From: xhxu Date: Wed, 11 May 2022 09:38:50 +0800 Subject: [PATCH] //update ordercancel --- .../controller/WxOrderController.java | 46 +++++++++++++++++-- .../controller/WxPayOrderController.java | 40 ++-------------- .../com/iformall/service/WxOrderService.java | 2 + .../iformall/service/WxPayOrderService.java | 1 + .../service/impl/WxOrderServiceImpl.java | 26 +++++++++++ .../service/impl/WxPayOrderServiceImpl.java | 39 +++++++++++++++- 6 files changed, 112 insertions(+), 42 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 536faa4ce..6cdb18ed6 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -1,7 +1,9 @@ package com.iformall.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; +import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.dto.OrderComposeSaveDto; @@ -14,6 +16,8 @@ import com.iformall.domain.vo.WxOrderCouponVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.service.*; +import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.utils.Constant; import com.iformall.utils.RedisLock; @@ -61,6 +65,15 @@ public class WxOrderController extends BaseController { @Autowired private WxRefundOrderService wxRefundOrderService; + @Autowired + private WxPayOrderService wxPayOrderService; + + @Autowired + private WxPayAccountService wxPayAccountService; + + @Autowired + private OrderFactory orderFactory; + @Autowired @Qualifier("couponDetailRedisTemplate") RedisTemplate cdRedisTemplate; @@ -142,10 +155,37 @@ public class WxOrderController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL, "orderId: " + orderIdStr + ", e: " + e.getMessage()); } try { - WxOrder order = wxOrderService.getById(orderId,getTenantInfo().getTenantId()); - if (order != null) { - wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL); + + WxPayOrder porderq = new WxPayOrder(); + porderq.updateTenantInfo(getTenantInfo()); + porderq.setOrderId(orderId); + WxPayOrder payOrder = wxPayOrderService.getByObj(porderq); + + if (null != payOrder) { + WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(payOrder.getComposeOrder()).getComposeOrder(payOrder.getOrderId(), payOrder.getTenantId()); + //查询微信订单状态并更新 + + boolean hasCompleted = wxPayOrderService.hasCompleted(composeOrder,payOrder); + if (!hasCompleted) { + WxAppinfo appInfo = wxAppinfoService.getCAppInfo(payOrder, EnumPayWay.getEnum(payOrder.getPayVendor()).getPlat()); + WxPayAccount payAccount = wxPayAccountService.getById(appInfo.getPayId()); + try { + WxPayOrder wo = wxPayOrderService.handleWxOrderQuery(payOrder, composeOrder,appInfo, payAccount, IdWorker.get(),false); + if (null == wo) { + return new ResultData(ErrorCode.PAY_ORDER_ERROR, "查询微信订单支付状态失败,请稍后!"); + } + }catch(MallinkException e) { + if(e.getErrorCode() == ErrorCode.PAY_ORDER_PAYING.getCode()){ + return new ResultData(ErrorCode.PAY_ORDER_PAYING, "查询微信订单支付中,请稍后!"); + } + } + } } + + WxBatchOrder batchOrder = new WxBatchOrder(); + batchOrder.updateTenantInfo(getTenantInfo()); + batchOrder.setId(orderId); + wxOrderService.cancelOrderBatchOrder(batchOrder,payOrder); } catch (Exception e) { logger.error("取消订单失败: " + e.getMessage()); return new ResultData(ErrorCode.ORDER_IS_FAIL.getCode(), "取消订单失败: " + e.getMessage()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java index 34be3d03a..b1ff51f35 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java @@ -178,7 +178,7 @@ public class WxPayOrderController extends BaseController { payOrder.setPayOrderStatus(status); payOrder.setFailReason(reasonStr); payOrder.updateTenantInfo(getTenantInfo()); - payOrder.setPayVendor(EnumPayWay.PAY_WAY_WECHAT.getCode()); + payOrder.setPayVendor(getPayWay().getCode()); try { //有价券支付成功 @@ -197,7 +197,7 @@ public class WxPayOrderController extends BaseController { WxComposeOrder composeOrder = orderFactory.getOrderAdapterService(payOrder.getComposeOrder()).getComposeOrder(payOrder.getOrderId(), payOrder.getTenantId()); //查询微信订单状态并更新 - boolean hasCompleted = hasCompleted(composeOrder,payOrder); + boolean hasCompleted = wxPayOrderService.hasCompleted(composeOrder,payOrder); if (hasCompleted) { return new ResultData(Result.SUCCESS, "支付状态更新成功", composeOrder); } @@ -237,41 +237,7 @@ public class WxPayOrderController extends BaseController { return new ResultData(ErrorCode.PAY_ORDER_ERROR, "支付状态更新失败3: " + payOrder.toString() + ", e:" + e.getMessage()); } } - - private boolean hasCompleted(WxComposeOrder composeOrder,WxPayOrder payOrder) { - if (EnumComposeOrder.isSingle(composeOrder.getComposeOrderType())) { - WxOrder order = composeOrder.getSingleOrder(); - if (null == order) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "未查询到Order["+payOrder.getOrderId()+"]."); - } - WxCoupon wxCoupon = wxCouponService.getById(order.getProductId(),order.getTenantId()); - if (null == wxCoupon) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "未查询到优惠券[orderId:"+payOrder.getOrderId()+"]."); - } - //拼团的订单,如果查询到是拼团待付款的,则重新查询是否已经真的支付,其他的直接返回订单信息 - if (wxPayOrderService.isOrderGroupCoupon(payOrder, wxCoupon)) { - if (!order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode())) { - return true; - } - }else { - //非拼团的订单,支付成功,关闭订单,撤销支付订单,支付转退款的,直接返回订单信息,其他需要查询真实支付状态 - if (payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_CLOSE.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REVERSE.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REFUND.getCode())) { - return true; - } - } - }else { - if (payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_CLOSE.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REVERSE.getCode())|| - payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REFUND.getCode())) { - return true; - } - } - return false; - } + @ApiOperation("分页列表接口") @GetMapping("/list") diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index 66893db2c..dc5d323de 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -252,4 +252,6 @@ public interface WxOrderService { PageInfo listBatchOrderAsPage(WxOrder wxOrder, Integer pageNum, Integer pageSize); WxBatchOrder batchOrderDetail(WxBatchOrder border); + + void cancelOrderBatchOrder(WxBatchOrder border,WxPayOrder payOrder); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java index e3ea96ed4..2d8b13c63 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java @@ -156,4 +156,5 @@ public interface WxPayOrderService { public boolean isOrderGroupCoupon(WxPayOrder record, WxCoupon wxCoupon); + boolean hasCompleted(WxComposeOrder composeOrder, WxPayOrder payOrder); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 0feb83c25..9f3ee496c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.common.collect.Lists; +import com.iformall.common.Result; import com.iformall.domain.po.*; import com.iformall.domain.po.msg.*; import com.iformall.domain.po.tt.TtCUser; @@ -3407,6 +3408,31 @@ public class WxOrderServiceImpl implements WxOrderService { return wxBatchOrder; } + @Override + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public void cancelOrderBatchOrder(WxBatchOrder border,WxPayOrder payOrder) { + WxBatchOrder wxBatchOrder = wxBatchOrderMapper.selectOne(new QueryWrapper<>(border)); + if(wxBatchOrder == null){ + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } + WxOrder orderq = new WxOrder(); + orderq.updateTenantInfo(wxBatchOrder); + orderq.setComposeOrderId(wxBatchOrder.getId()); + List orderList = wxOrderMapper.findList(orderq); + + if(payOrder == null || !EnumPayStatus.PAY_STATUS_SUCCESS.getCode().equals(payOrder.getPayOrderStatus())){ + try { + for (WxOrder o : orderList) { + this.updateOrderStatus(o, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL); + } + } catch (Exception e) { + logger.error(e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL); + } + } + + } + private Map> getBatchOrderMap(TenantEntity tenantEntity,List batchOrderIds){ WxOrder recordQ = new WxOrder(); recordQ.updateTenantInfo(tenantEntity); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 2ab52adb7..8e44300b1 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -945,8 +945,43 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { return wxCoupon.getType().equals(EnumCouponType.COUPON_GROUP.getCode()) && wxCoupon.getSalePrice().equals(record.getPayAmount()); } - - + @Override + public boolean hasCompleted(WxComposeOrder composeOrder, WxPayOrder payOrder) { + if (EnumComposeOrder.isSingle(composeOrder.getComposeOrderType())) { + WxOrder order = composeOrder.getSingleOrder(); + if (null == order) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "未查询到Order["+payOrder.getOrderId()+"]."); + } + WxCoupon wxCoupon = wxCouponMapper.selectById(order.getProductId(),order.getTenantId()); + if (null == wxCoupon) { + throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(), "未查询到优惠券[orderId:"+payOrder.getOrderId()+"]."); + } + //拼团的订单,如果查询到是拼团待付款的,则重新查询是否已经真的支付,其他的直接返回订单信息 + if (this.isOrderGroupCoupon(payOrder, wxCoupon)) { + if (!order.getOrderStatus().equals(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode())) { + return true; + } + }else { + //非拼团的订单,支付成功,关闭订单,撤销支付订单,支付转退款的,直接返回订单信息,其他需要查询真实支付状态 + if (payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_CLOSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REVERSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REFUND.getCode())) { + return true; + } + } + }else { + if (payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_SUCCESS.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_CLOSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REVERSE.getCode())|| + payOrder.getPayOrderStatus().equals(EnumPayStatus.PAY_STATUS_REFUND.getCode())) { + return true; + } + } + return false; + } + + @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public void handleMicroOrderPaySuccess(Object result,String transcationId,EnumPayWay payWay, WxPayOrder record ,WxMerchantBUser user,WxAppinfo appInfo,PayExtraParam params) {