Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 2 gadi atpakaļ
vecāks
revīzija
1ed40d7ebf

+ 18 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -49,6 +49,8 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
+
 @Service
 public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, StudentPaymentOrder> implements StudentPaymentOrderService {
 
@@ -1032,6 +1034,21 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     public Map createOrder(MallCreateOrderModel model) throws Exception {
 
+        if (StringUtils.isNotEmpty(model.getOldOrderNo())) {
+            StudentPaymentOrder orderByOrderNo = studentPaymentOrderService.findOrderByOrderNo(model.getOldOrderNo());
+            if (orderByOrderNo == null) {
+                throw new BizException("未找到原订单");
+            }
+            // 已有订单,先关单
+            orderByOrderNo.setStatus(CLOSE);
+            studentPaymentOrderService.update(orderByOrderNo);
+            if (orderByOrderNo.getBalancePaymentAmount() != null && orderByOrderNo.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(orderByOrderNo.getUserId(), orderByOrderNo.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "关闭订单");
+            }
+            //退优惠券
+            sysCouponCodeService.quit(orderByOrderNo.getCouponCodeId());
+        }
+
         SysUser student = studentDao.getUser(model.getUserId());
         Map payMap = new HashMap();
         if (student == null) {
@@ -1055,7 +1072,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
         String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
 
-        // todo  receiver类型
+        //  receiver类型
         payMap = payService.getPayMap(
                 studentPaymentOrder.getExpectAmount(),
                 studentPaymentOrder.getActualAmount(),

+ 24 - 0
mec-client-api/src/main/java/com/ym/mec/task/MallPortalFeignService.java

@@ -0,0 +1,24 @@
+package com.ym.mec.task;
+
+import com.ym.mec.common.config.FeignConfiguration;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.task.fallback.MallPortalFeignServiceFallback;
+import com.ym.mec.task.fallback.TaskRemoteServiceFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+@FeignClient(name = "mall-portal-server", contextId = "TaskMallRemoteService", configuration = {FeignConfiguration.class}, fallback = MallPortalFeignServiceFallback.class)
+public interface MallPortalFeignService {
+
+    /**
+     * 订单轮询
+     */
+    @GetMapping("/task/cancelTimeOutOrder")
+    Object cancelTimeOutOrder();
+
+    /**
+     * 自动收货
+     */
+    @GetMapping("/task/autoReceive")
+    HttpResponseResult autoReceive();
+}

+ 22 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/MallPortalFeignServiceFallback.java

@@ -0,0 +1,22 @@
+package com.ym.mec.task.fallback;
+
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.task.MallPortalFeignService;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-09-19
+ */
+public class MallPortalFeignServiceFallback  implements MallPortalFeignService {
+    @Override
+    public Object cancelTimeOutOrder() {
+        return null;
+    }
+
+    @Override
+    public HttpResponseResult autoReceive() {
+        return null;
+    }
+}

+ 10 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/MallCreateOrderModel.java

@@ -11,6 +11,8 @@ import java.util.List;
  */
 public class MallCreateOrderModel {
 
+    private String oldOrderNo;
+
     private String orderNo;
 
     private BigDecimal amount;
@@ -19,6 +21,14 @@ public class MallCreateOrderModel {
 
     private Integer userId;
 
+    public String getOldOrderNo() {
+        return oldOrderNo;
+    }
+
+    public void setOldOrderNo(String oldOrderNo) {
+        this.oldOrderNo = oldOrderNo;
+    }
+
     public String getOrderNo() {
         return orderNo;
     }

+ 0 - 1
mec-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/dto/PmsBrandParam.java

@@ -27,7 +27,6 @@ public class PmsBrandParam {
     @FlagValidator(value = {"0","1"}, message = "显示状态不正确")
     @ApiModelProperty(value = "是否进行显示")
     private Integer showStatus;
-    @NotEmpty
     @ApiModelProperty(value = "品牌logo",required = true)
     private String logo;
     @ApiModelProperty(value = "品牌大图")

+ 11 - 0
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/domain/OrderParam.java

@@ -31,6 +31,17 @@ public class OrderParam {
     @ApiModelProperty("代码用户id")
     private Long  userId;
 
+    @ApiModelProperty("订单号 ")
+    private String orderNo;
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
     public Long getUserId() {
         return userId;
     }

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

@@ -121,8 +121,36 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
     @Override
     public Map<String, Object> generateOrder(OrderParam orderParam) {
-        if (orderParam.getOrderAmount() == null) {
-            throw new BizException("订单金额校验不通过");
+        OmsOrder order = new OmsOrder();
+        String orderSn = generateOrderSn();
+        if (!StringUtil.isEmpty(orderParam.getOrderNo())) {
+            // 订单号不为空 先删除订单  在重新创建订单
+            OmsOrderDetail detail = detail(orderParam.getOrderNo());
+            if (detail != null && detail.getStatus() == 0) {
+                detail.setStatus(4);
+                orderMapper.updateByPrimaryKeySelective(detail);
+                // 另外生成一个订单
+                detail.setId(null);
+                detail.setStatus(0);
+                detail.setOrderSn(orderSn);
+                List<OmsOrderItem> orderItemList = detail.getOrderItemList();
+                orderMapper.insert(detail);
+                for (OmsOrderItem omsOrderItem : orderItemList) {
+                    omsOrderItem.setId(null);
+                    omsOrderItem.setOrderSn(detail.getOrderSn());
+                    omsOrderItem.setOrderId(detail.getId());
+                }
+                orderItemDao.insertList(orderItemList);
+
+                return feignMecCreateOrder(order.getCouponId(),orderParam.getOrderNo(), orderSn, detail.getMemberId(), detail.getTotalAmount());
+            } else {
+                throw new BizException("订单信息获取失败");
+            }
+
+        } else {
+            if (orderParam.getOrderAmount() == null) {
+                throw new BizException("订单金额校验不通过");
+            }
         }
         List<OmsOrderItem> orderItemList = new ArrayList<>();
         //获取购物车及优惠信息
@@ -130,6 +158,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         if (orderParam.getUserId() != null && orderParam.getUserId() > 0) {
             currentMember = memberService.getById(orderParam.getUserId());
         }
+
         List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(),
                                                                                       orderParam.getCartIds(), true);
         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
@@ -151,6 +180,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderItem.setGiftIntegration(cartPromotionItem.getIntegration());
             orderItem.setGiftGrowth(cartPromotionItem.getGrowth());
             orderItem.setPromoterId(cartPromotionItem.getPromoterId());
+            orderItem.setPrecisionAmount(BigDecimal.ZERO);
             orderItemList.add(orderItem);
         }
         //判断购物车中商品是否都有库存
@@ -158,23 +188,9 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             Asserts.fail("库存不足,无法下单");
         }
 
-        String orderSn = generateOrderSn();
         BigDecimal amount = calcTotalAmount(orderItemList);
 
-        // 远程调用管乐迷订单记录
-        MallCreateOrderModel model = new MallCreateOrderModel();
-        model.setAmount(amount);
-        model.setOrderNo(orderSn);
-        model.setUserId(currentMember.getId().intValue());
-        model.setCouponIdList(StringUtil.toIntegerList(orderParam.getCouponId()));
-        HttpResponseResult<Map> mapHttpResponseResult = webFeignService.mallCreateOrder(model);
-        if (!mapHttpResponseResult.getStatus()) {
-            throw new BizException("管乐迷订单生成失败");
-        }
-        Map data = mapHttpResponseResult.getData();
-        if (Integer.valueOf(0).equals(MapUtil.get(data,"mallStatus",Integer.class))) {
-            throw new BizException("管乐迷订单生成失败");
-        }
+        Map data = feignMecCreateOrder(orderParam.getCouponId(),orderParam.getOrderNo(), orderSn, currentMember.getId(), amount);
 
         BigDecimal couponAmount = MapUtil.get(data, "mallCouponAmount", BigDecimal.class);
         if (couponAmount == null) {
@@ -237,7 +253,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         lockProductStock(cartPromotionItemList);
 
         //根据商品合计、运费、活动优惠、优惠券、积分计算应付金额
-        OmsOrder order = new OmsOrder();
         String cartIds = orderParam.getCartIds().stream().map(String::valueOf).collect(Collectors.joining());
         order.setCartIds(cartIds);
         order.setDiscountAmount(new BigDecimal(0));
@@ -333,6 +348,25 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         return result;
     }
 
+    private Map feignMecCreateOrder(String couponId,String oldOrderNo, String orderSn, Long userId, BigDecimal amount) {
+        // 远程调用管乐迷订单记录
+        MallCreateOrderModel model = new MallCreateOrderModel();
+        model.setAmount(amount);
+        model.setOrderNo(orderSn);
+        model.setUserId(userId.intValue());
+        model.setCouponIdList(StringUtil.toIntegerList(couponId));
+        model.setOldOrderNo(oldOrderNo);
+        HttpResponseResult<Map> mapHttpResponseResult = webFeignService.mallCreateOrder(model);
+        if (!mapHttpResponseResult.getStatus()) {
+            throw new BizException("管乐迷订单生成失败");
+        }
+        Map data = mapHttpResponseResult.getData();
+        if (Integer.valueOf(0).equals(MapUtil.get(data,"mallStatus",Integer.class))) {
+            throw new BizException("管乐迷订单生成失败");
+        }
+        return data;
+    }
+
     @Override
     public Integer paySuccess(Long orderId, Integer payType) {
         //修改订单支付状态

+ 24 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/CancelTimeOutOrderTask.java

@@ -0,0 +1,24 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.MallPortalFeignService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 订单轮询
+ * @Author: liweifan
+ * @Data: 2022/4/13 17:36
+ */
+@Service
+public class CancelTimeOutOrderTask extends BaseTask {
+
+    @Autowired
+    private MallPortalFeignService mallPortalFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        Object o = mallPortalFeignService.cancelTimeOutOrder();
+    }
+}

+ 22 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/MallAutoReceiveTask.java

@@ -0,0 +1,22 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.MallPortalFeignService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 自动收货
+ */
+@Service
+public class MallAutoReceiveTask extends BaseTask {
+
+    @Autowired
+    private MallPortalFeignService mallPortalFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        Object o = mallPortalFeignService.autoReceive();
+    }
+}