Ver Fonte

改动过的

huanglizhi há 1 ano atrás
pai
commit
0c5f67070d

+ 3 - 3
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java

@@ -128,9 +128,9 @@ public class OrderItemDO implements Serializable {
     private Date endTime;
 
     @ApiModelProperty(name = "has_return", value = "租赁订单详情是否返回")
-    private Integer hasReturn;
-
-    private Integer stockNum;
+    private Integer hasReturn = 0;
+    //未返回个数
+    private Integer stockNum = 0;
 
     private Integer  dayNum;
 

+ 27 - 14
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -118,8 +118,19 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     public void edit(OrderDTO orderDTO) {
         //修改把原先订单所有的东西都置空在新增
         orderSendManager.remove(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getOrderId, orderDTO.getId()));
+        //删除冻结明细
+        lockedStockDetailManager.remove(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, orderDTO.getId()));
+        //解冻库存
+        List<OrderItemDO> itemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
+        List<StockDTO> stockDTOS = new ArrayList<>();
+        for (OrderItemDO itemDO : itemDOS) {
+            StockDTO stockDTO = new StockDTO();
+            stockDTO.setId(itemDO.getProductStockId());
+            stockDTO.setNum(-itemDO.getNum());
+            stockDTOS.add(stockDTO);
+        }
+        productStockManager.updateLockedStock(stockDTOS);
         orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, orderDTO.getId()));
-
         List<LockedStockDetailDO> list = lockedStockDetailManager.list(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, orderDTO.getId()));
         lockedStockDetailManager.remove(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, orderDTO.getId()));
         List<StockDTO> arrayList = new ArrayList<>();
@@ -325,9 +336,6 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
     @Transactional(rollbackFor = Exception.class)
     public void orderSend(Long sendOrderId, PreOrderModelDTO orderSendDO) {
         OrderSendDO aDo = orderSendManager.getById(sendOrderId);
-        if (aDo.getSendNo()>0){
-            return;
-        }
         OrderDO orderDO = getById(aDo.getOrderId());
         converter.copyProperties(aDo, orderSendDO, orderSendDO.getReceiver(), orderSendDO.getSender());
         //根据订单查找到这个订单的所有货物扣减库存
@@ -377,14 +385,6 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
             orderItemManager.updateBatchById(list2);
         }
         productStockManager.updateBatchById(list1);
-//        productStockManager.updateActualStock(arrayList, null);
-//        productStockManager.updateLockedStock(arrayList);
-//        //更改在途库存
-//        if (OrderTypeEnum.TO_C.equals(aDo.getOrderType())) {
-//            //如果是出租商品增加在途库存
-//            arrayList.forEach(item -> item.setNum(-item.getNum()));
-//            productStockManager.updateTransitStock(arrayList);
-//        }
         //生成出库单
         WarehouseOutDO outDO = new WarehouseOutDO();
         if (OrderTypeEnum.TO_C.equals(orderDO.getType())) {
@@ -481,7 +481,6 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
                 }
             }
         });
-
         //先删除序列号和子表的关系(发货单可能保存过)
         itemSnCodeManager.remove(new LambdaQueryWrapper<ItemSnCodeDO>()
                 .eq(ItemSnCodeDO::getType, "send")
@@ -496,7 +495,6 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         orderDO.setStatus(SaleOrderStatusEnum.SENDING);
         updateById(orderDO);
         redisTemplate.delete(sendOrderId.toString());
-
     }
 
     private void createEntryWarehouse(OrderDO orderDO) {
@@ -698,6 +696,21 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         aDo.setStatus(SaleOrderStatusEnum.REVOKE);
         updateById(aDo);
         orderSendManager.remove(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getOrderId, id));
+
+        //删除冻结库存明细
+        //更爱库存状态
+        //删除冻结明细
+        lockedStockDetailManager.remove(new LambdaQueryWrapper<LockedStockDetailDO>().eq(LockedStockDetailDO::getOrderId, id));
+        //解冻库存
+        List<OrderItemDO> itemDOS = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
+        List<StockDTO> stockDTOS = new ArrayList<>();
+        for (OrderItemDO itemDO : itemDOS) {
+            StockDTO stockDTO = new StockDTO();
+            stockDTO.setId(itemDO.getProductStockId());
+            stockDTO.setNum(-itemDO.getNum());
+            stockDTOS.add(stockDTO);
+        }
+        productStockManager.updateLockedStock(stockDTOS);
         orderItemManager.remove(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
     }
 

+ 47 - 9
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -9,6 +9,7 @@ import cn.hutool.crypto.digest.DigestUtil;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.alipay.api.domain.UserDTO;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.converter.erp.OrderConverter;
@@ -18,11 +19,14 @@ import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.util.BeanUtils;
 import com.hys.app.framework.util.ScriptUtil;
 import com.hys.app.mapper.erp.KdnMapper;
+import com.hys.app.mapper.erp.WarehouseEntryMapper;
 import com.hys.app.mapper.goods.ProductMapper;
 import com.hys.app.model.erp.dos.*;
+import com.hys.app.model.erp.dto.StockDTO;
 import com.hys.app.model.erp.enums.*;
 import com.hys.app.service.erp.*;
 import com.hys.app.service.kuaidiniao.entity.*;
+import lombok.AllArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,6 +39,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 @Service
 public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
@@ -74,17 +79,22 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
      */
     @Value("${kuaidianiao.kuaidi.apiUrl}")
     private String kuaiDiUrl;
-
     @Autowired
     private OrderSendManager orderSendManager;
-
     @Autowired
     private OrderManager orderManager;
-
     @Autowired
     private OrderConverter converter;
     @Autowired
     private KdnMapper kdnMapper;
+    @Autowired
+    private WarehouseEntryMapper warehouseEntryMapper;
+    @Autowired
+    private OrderSendItemManager orderSendItemManager;
+    @Autowired
+    private  ProductStockManager productStockManager;
+    @Autowired
+    private LockedStockDetailManager lockedStockDetailManager;
     private static final Logger log = LoggerFactory.getLogger(ScriptUtil.class);
 
 
@@ -379,15 +389,11 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 break;
             case KdConstants.callBackCancelStatus:
                 //如果推送取消状态,需要重新下单
-                aDo.setKdnOrderCode("");
-                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SEND);
-                aDo.setSendNo(aDo.getSendNo()+1);
+                cancelKdnOrder(orderDO,aDo);
                 break;
             case KdConstants.callBackCreateOrderFail:
                 //如果下单失败更爱订单状态,清空快递鸟单号,让用户可以重新下单
-                aDo.setKdnOrderCode("");
-                aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SEND);
-                aDo.setSendNo(aDo.getSendNo()+1);
+                cancelKdnOrder(orderDO,aDo);
                 break;
             case KdConstants.callBackFeeStatus:
                 aDo.setOrderFee(map);
@@ -397,9 +403,41 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
                 base.setReason("内部业务异常,麻烦尽快通知商家,tel:13127911751");
         }
         orderSendManager.updateById(aDo);
+        orderManager.updateById(orderDO);
         return base;
     }
 
+    private void cancelKdnOrder(OrderDO orderDO,OrderSendDO orderSendDO){
+        //更爱订单状态
+        orderDO.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
+        //删除有订单生成的入库单不管是不是租赁的
+        warehouseEntryMapper.delete(new LambdaQueryWrapper<WarehouseEntryDO>().eq(WarehouseEntryDO::getOrderId,orderDO.getId()));
+        //还原发货单状态
+        orderSendDO.setStatus(SaleOrderSendStatusEnum.TO_BE_SEND);
+        orderSendDO.setKdnOrderCode("");
+        //更改库存,增加实际库存,增加冻结库存,如果是租赁订单减少在途库存
+        List<OrderSendItemDO> sendItemDOS = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, orderSendDO.getId()));
+        List<ProductStockDO> productStockDOS = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, sendItemDOS.stream().map(OrderSendItemDO::getProductStockId).collect(Collectors.toList())));
+        for (ProductStockDO stockDO : productStockDOS) {
+            OrderSendItemDO orderSendItemDO = sendItemDOS.stream().filter(item -> item.getProductStockId().equals(stockDO.getId())).findFirst().get();
+            stockDO.setActualStock(stockDO.getActualStock() + orderSendItemDO.getNum());
+            stockDO.setLockedStock(stockDO.getLockedStock() + orderSendItemDO.getNum());
+            stockDO.setUsableStock(stockDO.getActualStock() - stockDO.getLockedStock());
+            if (OrderTypeEnum.TO_C.equals(orderDO.getType())) {
+                stockDO.setTransitStock(stockDO.getTransitStock() - orderSendItemDO.getNum());
+            }
+        }
+        productStockManager.updateBatchById(productStockDOS);
+        //更改冻结库存明细
+        List<LockedStockDetailDO> list = lockedStockDetailManager.list(new LambdaQueryWrapper<LockedStockDetailDO>()
+                .in(LockedStockDetailDO::getOrderItemId, sendItemDOS.stream().map(OrderSendItemDO::getOrderItemId).collect(Collectors.toList())));
+        for (LockedStockDetailDO detailDO : list) {
+            detailDO.setUnLockedNum(0);
+            detailDO.setUnLockedTime(null);
+        }
+        lockedStockDetailManager.updateBatchById(list);
+    }
+
 
 //    private Boolean checkDesign(OrderSendDO aDo, String dataSign) {
 //        try {