소스 검색

出库逻辑修改

LZH 2 년 전
부모
커밋
d611a5ef87

+ 0 - 1
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocAsnSubService.java

@@ -79,7 +79,6 @@ public class WmsDocAsnSubService {
         }
         if (con == true) {
             wmsDocAsnHeader.setNotes("");
-            iWmsDocAsnHeaderService.updateWmsDocAsnHeader(wmsDocAsnHeader);
             // 修改 单头10
             wmsDocAsnHeader.setAsnStatus(Constant.ASN_STS.STS10.getValue());
             iWmsDocAsnHeaderService.updateWmsDocAsnHeader(wmsDocAsnHeader);

+ 72 - 68
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocOrderSubService.java

@@ -73,11 +73,13 @@ public class WmsDocOrderSubService {
     private WmsDocOrderHeaderMapper wmsDocOrderHeaderMapper;
     @Autowired
     private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
-
+    @Autowired
+    private WmsToWcsApiService wmsToWcsApiService;
 
 
     @Transactional
     public AjaxResult initOrderDetails(@PathVariable("orderNo") String orderNo) {
+
         //  根据单号,和创建状态为00
         WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
         wmsDocOrderDetails.setOrderNo(orderNo);
@@ -91,77 +93,78 @@ public class WmsDocOrderSubService {
         List<BaseLocationLotattVO> baseLocationLotattVOS = addConfirmAllocationAuto(orderNo);
 
         //筛选库存
-        BaseLocationLotattVO baseLocationLotattVO = filterInv(baseLocationLotattVOS, orderNo);
+        List<BaseLocationLotattVO> baseLocationLotattVOS1 = filterInv(baseLocationLotattVOS, orderNo);
+
 
         boolean con = true;
-        for (WmsDocOrderDetails wmsDocOrderDetails1 : list){
+        for (BaseLocationLotattVO baseLocationLotattVO1 : baseLocationLotattVOS1) {
 
-            BaseSku baseSku = iBaseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, wmsDocOrderDetails1.getSku());
+            BaseSku baseSku = iBaseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, list.get(0).getSku());
 
-            String pallentNo = baseLocationLotattVO.getLotattVO().getLotatt07();
-            String locationFrom = baseLocationLotattVO.getLocationNo();
-            String wcsNo = "wcs" + wcsTaskSubService.generateTaskNo();// todo 生成唯一标识wcsno
+            String pallentNo = baseLocationLotattVO1.getLotattVO().getLotatt07();
+            String locationFrom = baseLocationLotattVO1.getLocationNo();
+            String wcsNo = "wcs" + wcsTaskSubService.generateTaskNo();//生成唯一标识wcsno
 
             //Wcs x y z
-            String Y = baseLocationLotattVO.getRowNo();
-            String Z = baseLocationLotattVO.getShiftNo();
-            String X = baseLocationLotattVO.getRowIndex();
-            String sku = baseLocationLotattVO.getSku();
+            String Y = baseLocationLotattVO1.getRowNo();
+            String Z = baseLocationLotattVO1.getShiftNo();
+            String X = baseLocationLotattVO1.getRowIndex();
+            String sku = baseLocationLotattVO1.getSku();
 
             // 生成四向车出库任务
             AjaxResult ajaxResult = wcsTaskSubService.addWcsOutTask(locationFrom, Constant.LOC_SORTATION_CACHE.toString(), orderNo, pallentNo, wcsNo);
-
             //调用出库任务下发接口
             OutTaskForm outTaskForm = new OutTaskForm();
-            String taskNo =ajaxResult.get("data").toString();
+            String taskNo = ajaxResult.get("data").toString();
             outTaskForm.setTaskNo(taskNo);
             outTaskForm.setRow(Integer.parseInt(X));
-            outTaskForm.setCol(Integer.parseInt(Z));
-            outTaskForm.setFloor(Integer.parseInt(Y));
-
+            outTaskForm.setCol(Integer.parseInt(Y));
+            outTaskForm.setFloor(Integer.parseInt(Z));
             outTaskForm.setPackageType(Integer.valueOf(baseSku.getSkuType()));
             outTaskForm.setMaterial(Integer.valueOf(baseSku.getDesc2()));
-
-            outTaskForm.setTotal(wmsDocOrderDetails1.getQtyOrderedEach().intValue());
+            outTaskForm.setTotal(list.get(0).getQtyOrderedEach().intValue());
             outTaskForm.setDocNo(orderNo);
-            WmsToWcsApiService wmsToWcsApiService = new WmsToWcsApiService();
             WcsResponseVo wcsResponseVo = wmsToWcsApiService.wmsOutTask(outTaskForm);
             if (!wcsResponseVo.isSuccess()) {
                 con = false;
+                wmsDocOrderHeader.setRemark(wcsResponseVo.getMessage());
+                iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
                 continue;
             }
-            // 修改 明细行状态为10
-            wmsDocOrderDetails1.setLineStatus(Constant.ORDER_STS.STS10.getValue());
-            iWmsDocOrderDetailsService.updateWmsDocOrderDetails(wmsDocOrderDetails1);
         }
         if (con == true) {
+            // 修改 明细行状态为10
+            list.get(0).setLineStatus(Constant.ORDER_STS.STS10.getValue());
+            iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
             // 修改 单头10
+            wmsDocOrderHeader.setRemark("");
             wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS10.getValue());
             iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
         }
-        return AjaxResult.success("",list);
+        return AjaxResult.success("", baseLocationLotattVOS1);
     }
 
     /**
      * 匹配库存
+     *
      * @param orderNo
      * @return
      */
-    public List<BaseLocationLotattVO> addConfirmAllocationAuto(String orderNo){
-        List<WmsDocOrderDetails> detailslist=null;
+    public List<BaseLocationLotattVO> addConfirmAllocationAuto(String orderNo) {
+        List<WmsDocOrderDetails> detailslist = null;
         // 查询出库单头
         WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-        if (wmsDocOrderHeader != null){
-            if (wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS00.getValue())){
+        if (wmsDocOrderHeader != null) {
+            if (wmsDocOrderHeader.getOrderStatus().equals(Constant.ORDER_STS.STS00.getValue())) {
                 //根据出库单头查询出库单明细
-                detailslist =  iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
-                if (detailslist.size()==0){
-                   log.error("单据没有可匹配明细");
+                detailslist = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
+                if (detailslist.size() == 0) {
+                    log.error("单据没有可匹配明细");
                 }
-            }else {
+            } else {
                 log.error("只有新建单据才可分配");
             }
-        }else {
+        } else {
             log.error("单号不存在");
         }
 
@@ -173,13 +176,13 @@ public class WmsDocOrderSubService {
         List<String> outZones = OUT_ZONES;
 
         //分配
-        for (WmsDocOrderDetails o: detailslist) {
+        for (WmsDocOrderDetails o : detailslist) {
             sku = o.getSku();
             BigDecimal qtyOrderedEach = o.getQtyOrderedEach();
             orderBy = qtyOrderedEach.toString();
         }
         List<BaseLocationLotattVO> baseLocationLotattVOS = baseLocationInfoSubService.selectAllocatingInventoryAccordingConditionsOrderBy(outZones, lotattDTO, sku, orderBy);
-        if (baseLocationLotattVOS.size()==0){
+        if (baseLocationLotattVOS.size() == 0) {
             log.info("仓库中无库存");
         }
         return baseLocationLotattVOS;
@@ -187,55 +190,55 @@ public class WmsDocOrderSubService {
 
     /**
      * 筛选库存
+     *
      * @param baseLocationLotattVO
      * @param orderNo
      * @return
      */
-    public synchronized BaseLocationLotattVO filterInv(List<BaseLocationLotattVO> baseLocationLotattVOS,String orderNo){
+    public synchronized List<BaseLocationLotattVO> filterInv(List<BaseLocationLotattVO> baseLocationLotattVOS, String orderNo) {
         //  根据单号,和创建状态为00
         WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
         wmsDocOrderDetails.setOrderNo(orderNo);
         wmsDocOrderDetails.setLineStatus(Constant.ASN_STS.STS00.getValue());
         List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
 
-        BaseLocationLotattVO baseLocationLotattVO = new BaseLocationLotattVO();
-        for (BaseLocationLotattVO baseLocationLotattVO1:baseLocationLotattVOS) {
-            //库存数量
-            String sku = baseLocationLotattVO1.getSku();
-            Float qty = baseLocationLotattVO1.getQty();
+        List<BaseLocationLotattVO> baseLocationLotattVOS1 = new ArrayList<>();
+
+        for (WmsDocOrderDetails wmsDocOrderDetails1 : list) {
+            String sku1 = wmsDocOrderDetails1.getSku();
+            //出库数量
+            BigDecimal qtyAllocatedEach = wmsDocOrderDetails1.getQtyOrderedEach();
 
-            for (WmsDocOrderDetails wmsDocOrderDetails1:list) {
-                //出库数量
-                String sku1 = wmsDocOrderDetails1.getSku();
-                BigDecimal qtyAllocatedEach = wmsDocOrderDetails1.getQtyOrderedEach();
-                if (sku.equals(sku1)){
-                    int i = qty.compareTo(qtyAllocatedEach.floatValue());
-                    if (i == 0){
-                        baseLocationLotattVO=baseLocationLotattVO1;
-                        return baseLocationLotattVO;
-                    }else if (i > 0){
-                        baseLocationLotattVO=baseLocationLotattVO1;
-                        return  baseLocationLotattVO;
-                    }else if (i < 0){
-                        boolean b = true;
-                        while (b){
-                            BigDecimal qty1 = new BigDecimal(qty);
-                            BigDecimal subtract = qtyAllocatedEach.subtract(qty1);
-                            if (subtract.intValue() == 0){
-                                b = false;
-                                baseLocationLotattVO=baseLocationLotattVO1;
-                                return  baseLocationLotattVO;
-                            }
-                        }
-                    }
+            for (BaseLocationLotattVO baseLocationLotattVO1 : baseLocationLotattVOS) {
+                if (qtyAllocatedEach.compareTo(BigDecimal.ZERO) == 0) {
+                    return baseLocationLotattVOS1;
+                }
+                //库存数量
+                String sku = baseLocationLotattVO1.getSku();
+                BigDecimal qty =new BigDecimal(baseLocationLotattVO1.getQty());
+
+                if (!sku.equals(sku1)) {
+                    continue;
+                }
+                int i = qty.compareTo(qtyAllocatedEach);
+                if (i == 0) {
+                    baseLocationLotattVOS1.add(baseLocationLotattVO1);
+                    return baseLocationLotattVOS1;
+                } else if (i > 0) {
+                    baseLocationLotattVOS1.add(baseLocationLotattVO1);
+                    return baseLocationLotattVOS1;
+                } else if (i < 0) {
+                    qtyAllocatedEach= qtyAllocatedEach.subtract(qty);
+                    baseLocationLotattVOS1.add(baseLocationLotattVO1);
                 }
             }
         }
-        return baseLocationLotattVO;
+        return baseLocationLotattVOS1;
     }
 
     /**
      * 生成越库出库单方法
+     *
      * @param asnNo
      * @return
      */
@@ -250,7 +253,7 @@ public class WmsDocOrderSubService {
         wmsDocOrderHeader.setCreateTime(new Date());
         wmsDocOrderHeaderMapper.insertWmsDocOrderHeader(wmsDocOrderHeader);
         List<WmsDocAsnDetails> wmsDocAsnDetails = iWmsDocAsnHeaderService.queryWmsDocAsnDetails(asnNo);
-        for (WmsDocAsnDetails wmsDocAsnDetails1 : wmsDocAsnDetails){
+        for (WmsDocAsnDetails wmsDocAsnDetails1 : wmsDocAsnDetails) {
             // 生成明细
             WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
             wmsDocOrderDetails.setOrderNo(orderNo);
@@ -266,10 +269,11 @@ public class WmsDocOrderSubService {
 
     /**
      * 生成出库单方法
+     *
      * @param asnNo
      * @return
      */
-    public String generateAnOutboundOrder(String sku,BigDecimal qty) {
+    public String generateAnOutboundOrder(String sku, BigDecimal qty) {
         // 生成单头
         WmsDocOrderHeader wmsDocOrderHeader = new WmsDocOrderHeader();
         String orderNo = idSequenceUtils.generateId("ORDERNO");
@@ -295,7 +299,7 @@ public class WmsDocOrderSubService {
         iWmsDocOrderHeaderService.insertWmsDocOrderDetails(wmsDocOrderDetails);
         return orderNo;
     }
-   /* *//**
+    /* *//**
      * 取消分配
      *//*
     public AjaxResult deAllocation(String orderNo) {