浏览代码

fix:订单取消

liujunchi 2 年之前
父节点
当前提交
a7bc303f97

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -15,13 +15,12 @@ import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.dal.vo.StudentPaymentOrderVo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.MallCreateOrderModel;
+import com.ym.mec.common.entity.OrderCancelModel;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import org.apache.ibatis.annotations.Param;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -99,7 +98,7 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      * @param checkTime
      * @return
      */
-    Boolean updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception;
+    OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception;
 
     //退优惠券和余额
     void quitCouponAndBalance(StudentPaymentOrder order);

+ 10 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -19,6 +19,7 @@ import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.MallCreateOrderModel;
+import com.ym.mec.common.entity.OrderCancelModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
@@ -315,7 +316,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional
-    public Boolean updateOrderStatus(Date date,  Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception {
+    public OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception {
         if (payConfigMap == null) {
             throw new BizException("payConfigMap 不能为空");
         }
@@ -328,6 +329,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             }
             payConfigMap.put(payingOrder.getTenantId(), hfMerchantConfig);
         }
+        OrderCancelModel  model = new OrderCancelModel();
 
         Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
         LOGGER.info("订单[{}]交易主动查询接口返回:{}", payingOrder.getTransNo(), payment);
@@ -336,27 +338,32 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         rpMap.put("merOrderNo", payingOrder.getOrderNo());
         rpMap.put("orderNo", payingOrder.getTransNo());
         rpMap.put("channelType", (String) payment.get("pay_channel"));
+        model.setPayChannel((String) payment.get("pay_channel"));
         String status = (String) payment.get("status");
         if (payment.containsKey("error_msg")) {
             rpMap.put("remarks", (String) payment.get("error_msg"));
         }
         if (status.equals("succeeded")) {
             rpMap.put("tradeState", "1");
+            model.setStatus(true);
         } else if (status.equals("failed") || !checkTime
                 || (DateUtil.minutesBetween(DateUtil.addHours(payingOrder.getUpdateTime(), 2),date) > 0)) {
             rpMap.put("tradeState", "0");
+            model.setStatus(false);
         }
 
         if (status.equals("succeeded") ||
                 (status.equals("failed") || !checkTime || payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
             try {
                 updateOrder(rpMap); //更新订单
+                model.setSuccess(true);
             } catch (Exception e) {
                 e.printStackTrace();
-                return false;
+                model.setSuccess(false);
+                return model;
             }
         }
-        return true;
+        return model;
     }
 
     @Transactional(rollbackFor = Exception.class)

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/web/WebFeignService.java

@@ -3,6 +3,7 @@ package com.ym.mec.web;
 import com.ym.mec.common.config.FeignConfiguration;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.MallCreateOrderModel;
+import com.ym.mec.common.entity.OrderCancelModel;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.web.fallback.WebFeignServiceFallback;
@@ -47,4 +48,7 @@ public interface WebFeignService {
 
 	@PostMapping("/api/updateOrder")
 	HttpResponseResult updateOrder(@RequestBody Map map);
+
+	@PostMapping("/api/cancelOrder")
+	HttpResponseResult<OrderCancelModel> cancelOrder(@RequestParam("orderNo") String orderNo);
 }

+ 6 - 0
mec-client-api/src/main/java/com/ym/mec/web/fallback/WebFeignServiceFallback.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.fallback;
 
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.MallCreateOrderModel;
+import com.ym.mec.common.entity.OrderCancelModel;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import org.springframework.stereotype.Component;
@@ -69,4 +70,9 @@ public class WebFeignServiceFallback implements WebFeignService {
 	public HttpResponseResult updateOrder(Map map) {
 		return null;
 	}
+
+	@Override
+	public HttpResponseResult<OrderCancelModel> cancelOrder(String orderNo) {
+		return null;
+	}
 }

+ 14 - 4
mec-common/common-core/src/main/java/com/ym/mec/common/entity/OrderCancelModel.java

@@ -8,18 +8,28 @@ package com.ym.mec.common.entity;
  */
 public class OrderCancelModel {
 
-    // 修改状态  true:支付失败,false 支付成功
-    private boolean status;
+    // 修改状态  true:支付成功,false 取消成功
+    private Boolean status;
 
+    // 支付方式
+    private String payChannel;
 
     // 调用状态  true:成功  false 失败
     private Boolean success;
 
-    public boolean isStatus() {
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public Boolean getStatus() {
         return status;
     }
 
-    public void setStatus(boolean status) {
+    public void setStatus(Boolean status) {
         this.status = status;
     }
 

+ 1 - 1
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -176,7 +176,7 @@ public class OmsPortalOrderController {
                        .runIfLockCanGet(OrderCacheEnum.LOCK_ORDER_NO_MALL.getRedisKey(omsOrder.getOrderSn())
                                , () -> {
                                        if (omsOrder.getStatus() == 0 || omsOrder.getStatus() == 6) {
-                                           portalOrderService.paySuccess(orderId, payType);
+                                           portalOrderService.paymentSucceededHandle(omsOrder.getOrderSn(),omsOrder.getPayAmount(),"wx_pub");
 
                                        } else {
                                            throw new BizException("订单已支付或已取消");

+ 3 - 2
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java

@@ -51,8 +51,9 @@ public class PaymentController extends BaseController {
     @Autowired
     private RedissonClient redissonClient;
 
-    @ApiOperation(value = "订单付款")
-    @PostMapping("/orderPay")
+    // 调用管乐迷里的
+    // @ApiOperation(value = "订单付款")
+    // @PostMapping("/orderPay")
     public HttpResponseResult<OrderPayRes> orderPay(@Valid @RequestBody Map payReq, HttpServletRequest request) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {

+ 17 - 2
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.map.MapUtil;
 import com.github.pagehelper.PageHelper;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.MallCreateOrderModel;
+import com.ym.mec.common.entity.OrderCancelModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.web.WebFeignService;
@@ -422,6 +423,20 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         OmsOrder cancelOrder = cancelOrderList.get(0);
         if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6)) {
 
+            HttpResponseResult<OrderCancelModel> responseResult = webFeignService.cancelOrder(cancelOrder.getOrderSn());
+            if (!responseResult.getStatus()) {
+                throw new BizException("远程取消失败");
+            }
+            OrderCancelModel data = responseResult.getData();
+            if (!data.getSuccess()) {
+                throw new BizException("远程取消失败");
+            }
+            if (data.getStatus()) {
+                LOG.info("订单支付成功,修改订单状态");
+                orderSuccess(cancelOrder,cancelOrder.getPayAmount(),data.getPayChannel());
+                return;
+            }
+
             //修改订单状态为取消
             cancelOrder.setStatus(4);
             orderMapper.updateByPrimaryKeySelective(cancelOrder);
@@ -746,9 +761,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             LOG.error("订单金额和实际支付金额不符");
             throw new BizException("订单金额和实际支付金额不符");
         } else {
-            if ("alipay".equals(payChannel) || "ali_app".equals(payChannel)) {
+            if ("alipay_qr".equals(payChannel) || "alipay_wap".equals(payChannel)) {
                 paySuccess(detail.getId(), 1);
-            } else if ("wx_lite".equals(payChannel) || "wx_app".equals(payChannel)) {
+            } else if ("wx_pub".equals(payChannel) || "wx_app".equals(payChannel)) {
                 paySuccess(detail.getId(), 2);
             }
         }

+ 21 - 3
mec-web/src/main/java/com/ym/mec/web/controller/APIController.java

@@ -2,10 +2,12 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.dto.PaymentParam;
 import com.ym.mec.biz.dal.dto.StudentVipGroupShowListDto;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.StudentVipGroupQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.MallCreateOrderModel;
+import com.ym.mec.common.entity.OrderCancelModel;
 import io.swagger.annotations.Api;
 
 import io.swagger.annotations.ApiImplicitParam;
@@ -26,6 +28,8 @@ import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.common.controller.BaseController;
 
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -171,16 +175,30 @@ public class APIController extends BaseController {
 	}
 
 
+	/**
+	 * 取消订单接口
+	 *
+	 * @param orderNo
+	 * @return
+	 */
 	@PostMapping("/cancelOrder")
-	public HttpResponseResult cancelOrder(@RequestBody Map map) {
+	public HttpResponseResult<OrderCancelModel> cancelOrder(@RequestParam String orderNo) {
 
 		try {
-			studentPaymentOrderService.updateOrder(map);
+			OrderCancelModel cancelModel = new OrderCancelModel();
+			StudentPaymentOrder orderByOrderNo = studentPaymentOrderService.findOrderByOrderNo(orderNo);
+			if (orderByOrderNo == null) {
+				cancelModel.setSuccess(true);
+				cancelModel.setStatus(false);
+				return succeed(cancelModel);
+			}
+			cancelModel = studentPaymentOrderService.updateOrderStatus(new Date(), new HashMap<>(),
+																						 orderByOrderNo, false);
+			return succeed(cancelModel);
 		} catch (Exception e) {
 			e.printStackTrace();
 			return failed();
 		}
-		return succeed();
 	}
 
 }