Преглед на файлове

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

# Conflicts:
#	warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java
HuKang преди 2 години
родител
ревизия
b5a0152bfa

+ 69 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -367,6 +367,75 @@ public class PdaController {
         return AjaxResult.success(detailsList);
     }
 
+    /**
+     * 查询已经码盘的明细
+     *
+     * @param stockingListForm
+     * @return
+     */
+    @GetMapping("/docAsn/stockingDetailList")
+    public AjaxResult stockingDetailList(@RequestBody StockingListForm stockingListForm) {
+        // ERP号转换为wms系统入库单号ASNNO
+        List<String> asnNoList = wmsDocAsnHeaderService.changeErpNoToAsnNo(stockingListForm.getAsnNoList());
+        if (asnNoList.size() == 0) {
+            return AjaxResult.error("请扫描正确的入库单号");
+        }
+        stockingListForm.setAsnNoList(asnNoList);
+        List<WmsDocAsnDetails> detailsList = wmsDocAsnHeaderService.selectStockingList(stockingListForm.getAsnNoList());
+        List<stockingDetail> stockingDetailList = new ArrayList<>();
+        stockingDetail stockingDetail = null;
+        for (WmsDocAsnDetails wmsDocAsnDetails : detailsList) {
+            stockingDetail = new stockingDetail();
+            WmsDocAsnHeader wmsDocAsnHeader = wmsDocAsnHeaderService.selectWmsDocAsnHeaderByAsnNo(wmsDocAsnDetails.getAsnNo());
+            stockingDetail.setErpNo(wmsDocAsnHeader.getAsnReference1());
+            stockingDetail.setSku(wmsDocAsnDetails.getSku());
+            stockingDetail.setQty(wmsDocAsnDetails.getExpectedQty().toString());
+            stockingDetail.setReceivingQty(wmsDocAsnDetails.getReceivedQty().toString());
+            stockingDetailList.add(stockingDetail);
+        }
+        return AjaxResult.success(stockingDetailList);
+    }
+
+
+    public static class  stockingDetail{
+        private String erpNo;
+        private String sku;
+        private String qty;
+        private String receivingQty;
+
+        public String getErpNo() {
+            return erpNo;
+        }
+
+        public void setErpNo(String erpNo) {
+            this.erpNo = erpNo;
+        }
+
+        public String getSku() {
+            return sku;
+        }
+
+        public void setSku(String sku) {
+            this.sku = sku;
+        }
+
+        public String getQty() {
+            return qty;
+        }
+
+        public void setQty(String qty) {
+            this.qty = qty;
+        }
+
+        public String getReceivingQty() {
+            return receivingQty;
+        }
+
+        public void setReceivingQty(String receivingQty) {
+            this.receivingQty = receivingQty;
+        }
+    }
+
     //endregion
 
     //region PDA出库

+ 12 - 3
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/IWmsDocAsnHeaderService.java

@@ -118,11 +118,20 @@ public interface IWmsDocAsnHeaderService {
     AjaxResult doStock(StockForm stockForm);
 
     /**
-     * 条码检测
+     * 检查是否有是相同类型的物料在同一个托盘上
      *
-     * @param snCheckForm
-     * @return
+     * @param palletNo 托盘编号
+     * @param sku      物料
+     * @return true都是相同的产品类型 false不同的产品类型
      */
+    boolean checkSameTypeByPalletNo(String palletNo, String sku);
+
+        /**
+         * 条码检测
+         *
+         * @param snCheckForm
+         * @return
+         */
     CodeSkuRelationshipVO searchSn(SnCheckForm snCheckForm);
 
     /**

+ 3 - 3
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/impl/WmsDocAsnHeaderServiceImpl.java

@@ -259,7 +259,7 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
      * @param sku      物料
      * @return true都是相同的产品类型 false不同的产品类型
      */
-    private boolean checkSameTypeByPalletNo(String palletNo, String sku) {
+    public boolean checkSameTypeByPalletNo(String palletNo, String sku) {
         BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, sku);
         List<InvLotLocId> invLotLocIdList = invLotLocIdMapper.querySameTypeByPalletNo(baseSku.getSkuType(), palletNo);
         if (invLotLocIdList != null && invLotLocIdList.size() > 0) {
@@ -395,8 +395,8 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
                                 unlockForm.setPalletNo(locIdLotattVO.getLotatt07());
                                 unlockForm.setSku(locIdLotattVO.getSku());
                                 unlockForm.setLotnum(locIdLotattVO.getLotnum());
-                                 ajaxResult = unloadStock(unlockForm);
-                                if (!ajaxResult.isSuccess()) {
+                                AjaxResult ajaxResultJB = unloadStock(unlockForm);
+                                if (!ajaxResultJB.isSuccess()) {
                                     throw new ServiceException("解绑老托盘失败:" + ajaxResult.getMsg());
                                 }
                             }

+ 6 - 7
warewms-ams/src/main/java/com/ruoyi/ams/erp/service/impl/SyncServiceImpl.java

@@ -187,12 +187,11 @@ public class SyncServiceImpl implements ISyncService {
             // 循环明细调updateErpOrderStatus方法 setOrderState setOrderName setOrderNo
             for (WmsDocAsnDetails wmsDocAsnDetails2:wmsDocAsnDetails1) {
                 ErpOrderList erpOrderList = new ErpOrderList();
-                erpOrderList.setOrderNo(wmsDocAsnDetails2.getAsnLineNo().intValue());
-                erpOrderList.setOrderName(wmsDocAsnDetails2.getAsnNo());
+                erpOrderList.setOrderNo(Integer.parseInt(wmsDocAsnDetails2.getdEdi07()));
+                erpOrderList.setOrderName(wmsDocAsnHeader1.getAsnReference1());
                 erpOrderList.setOrderState("2");
                 boolean b = updateErpOrderStatus(erpOrderList);
-                // 成功之后修改edi_send_flag为Y
-                if (b = true){
+                if (b){
                     wmsDocAsnHeader1.setEdiSendFlag("Y");
                     wmsDocAsnHeaderService.updateWmsDocAsnHeader(wmsDocAsnHeader1);
                 }
@@ -214,12 +213,12 @@ public class SyncServiceImpl implements ISyncService {
             List<WmsDocOrderDetails> list = wmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
             for (WmsDocOrderDetails wmsDocOrderDetails1:list) {
                 ErpOrderList erpOrderList = new ErpOrderList();
-                erpOrderList.setOrderNo(wmsDocOrderDetails1.getOrderLineNo().intValue());
-                erpOrderList.setOrderName(wmsDocOrderDetails1.getOrderNo());
+                erpOrderList.setOrderNo(Integer.parseInt(wmsDocOrderDetails1.getdEdi07()));
+                erpOrderList.setOrderName(wmsDocOrderHeader1.getSoReference1());
                 erpOrderList.setOrderState("2");
                 boolean b = updateErpOrderStatus(erpOrderList);
                 // 成功之后修改edi_send_flag为Y
-                if (b = true){
+                if (b){
                     wmsDocOrderHeader1.setEdiSendFlag("Y");
                     wmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader1);
             }

+ 34 - 55
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ruoyi.ams.order.service.impl;
 
+import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
@@ -99,6 +100,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     private IErpBarcodesService erpBarcodesService;
     @Autowired
     private IInvLotAttService invLotAttService;
+    @Autowired
+    private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
 
     /**
      * 查询出库单头
@@ -909,6 +912,11 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             return AjaxResult.error("组盘数量大于单条库存数量!");
         }
         invLotLocIdLotattVOList.add(endLotattVO);
+        // 不同的产品类型不允许放一个托盘上
+        boolean isSameType = iWmsDocAsnHeaderService.checkSameTypeByPalletNo(palletNoTo, sku);
+        if (!isSameType) {
+            throw new ServiceException("不同的产品类型不允许放一个托盘上");
+        }
         // 验证扫描产品是否可以组盘
         AjaxResult ajaxResult = verifyThatDisksCanBeGrouped(endLotattVO);
         if (!ajaxResult.isSuccess()) {
@@ -928,7 +936,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         AjaxResult ajaxResultC = invLotLocIdService.checkPalletIsOnlyOrderNo(groupDiskFrom.getPalletNoTo()
                 , StringUtils.isEmpty(endLotattVO.getLotatt14()) ? "" : endLotattVO.getLotatt14());
         if (!ajaxResultC.isSuccess()) {
-            return ajaxResult;
+            return ajaxResultC;
         }
 
         // 创建Lotnum和库存对应关系
@@ -1091,7 +1099,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         String orderNo = ""; // 出库单号(备货才会传入)
         String sku = ""; // 物料编码
         Double qty = Double.valueOf(groupDiskFrom.getQty()); // 数量
-        boolean isAllUpdate = false; // 是全部修改,还是拆分
+        boolean isAllUpdate = false; // 库存转移类型,是全部修改,还是拆分
         boolean isStockPalletNoTo = groupDiskFrom.isStockPalletNoTo(); // 目标托盘是否是备货托盘,为了方便,目标托盘默认是备货托盘
         final Double toQty;
         if (StringUtils.isNotEmpty(groupDiskFrom.getOrderNo())) {
@@ -1099,13 +1107,16 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         }
         // 验证出库单
         if (StringUtils.isNotEmpty(orderNo)) {
-//            WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-//            if (header != null
-//                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS10.getValue())
-//                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS20.getValue())
-//                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS21.getValue())) {
-//                return AjaxResult.error("出库单状态不可组盘!");
-//            }
+            WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+            if(!header.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())){
+                return AjaxResult.error("出库单类型不可备货组盘!");
+            }
+            if (header != null
+                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS10.getValue())
+                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS20.getValue())
+                    && !header.getOrderStatus().equals(Constant.ORDER_STS.STS22.getValue())) {
+                return AjaxResult.error("出库单状态不可备货组盘!");
+            }
         }
         // 根据条码获取物料号
         CodeSkuRelationshipVO codeSkuRelationshipVO = codeSkuRelationshipService.checkIsProduct(sn);
@@ -1120,6 +1131,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         LotattDTO lotattDTO = new LotattDTO();
         lotattDTO.setLotatt07(palletNoFrom);
         lotattDTO.setLotatt02(sn);
+        lotattDTO.setLotatt15(orderNo);
         locIdSearchFrom.setLotattDTO(lotattDTO);
         List<InvLotLocIdLotattVO> invLotLocIdLotattList = invLotLocIdService.selectInvLocIdLotattList(locIdSearchFrom);
         // 组盘是把出库的库存重新组到一个新的托盘上,所以起始托盘和条码理应可以查询到系统里有对应的库存。
@@ -1143,6 +1155,12 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             return AjaxResult.error("组盘数量大于单条库存数量!");
         }
         invLotLocIdLotattVOList.add(endLotattVO);
+        //验证目标托盘库存,一个托盘只能备货一个出库单
+        AjaxResult ajaxResultC = invLotLocIdService.checkPalletIsOnlyOrderNo(groupDiskFrom.getPalletNoTo()
+                , StringUtils.isEmpty(endLotattVO.getLotatt14()) ? "" : endLotattVO.getLotatt14());
+        if (!ajaxResultC.isSuccess()) {
+            return ajaxResultC;
+        }
         // 创建Lotnum和库存对应关系
         Map<String, List<InvLotLocIdLotattVO>> lotnumAndInvLocIdMap = new HashMap<>();
         invLotLocIdLotattVOList.stream().forEach(v -> {
@@ -1154,11 +1172,6 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                 lotnumAndInvLocIdMap.put(v.getLotnum(), locIdLotattVOList);
             }
         });
-//        if (palletNoFrom.equals(palletNoTo) && orderNo.equals("")) {
-        // 起始托盘和目标托盘一样,并且出库单传入为空,不做操作
-//            return AjaxResult.success("起始和目标托盘一致,不用组盘!");
-
-//        } else {
         // 根据老Lotnum创建新的Lotnum
         for (Map.Entry<String, List<InvLotLocIdLotattVO>> lotnumToInvLocId : lotnumAndInvLocIdMap.entrySet()) {
             String lotnum = lotnumToInvLocId.getKey();
@@ -1167,11 +1180,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             String newLotnum = idSequenceUtils.generateId("LOTNUMBER");
             invLotAtt.setLotnum(newLotnum);
             invLotAtt.setLotatt07(palletNoTo);
-            if (!orderNo.equals("")) {
-                invLotAtt.setLotatt14(orderNo); // 备货对应的出库单号
-            } else {
-                invLotAtt.setLotatt14(""); // 备货对应的出库单号
-            }
+            invLotAtt.setLotatt14(orderNo); // 备货对应的出库单号
             invLotAtt.setCreateTime(DateUtils.getNowDate());
             if (invLotAttMapper.insertInvLotAtt(invLotAtt) > 0) {
                 for (InvLotLocIdLotattVO v : invLocIdList) {
@@ -1194,29 +1203,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                         InvLotLocId invLotLocId = invLotLocIdService.selectInvLotLocIdById(v.getLocationId().toString()
                                 , v.getCustomerId(), v.getSku(), v.getLotnum());
                         BigDecimal qtyallocated = invLotLocId.getQtyallocated();
-                        // 判断是否是备货组盘
-                        if (StringUtils.isNotEmpty(orderNo)) {
-                            if (isStockPalletNoTo) {
-                                // 拆分库存
-                                // 修改原库存
-                                InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
-                                invLotLocIdUpdate.setLotnum(v.getLotnum());
-                                invLotLocIdUpdate.setLocationId(v.getLocationId().toString());
-                                invLotLocIdUpdate.setCustomerId(v.getCustomerId());
-                                invLotLocIdUpdate.setSku(v.getSku());
-                                invLotLocIdUpdate.setQty(invLotLocId.getQty().subtract(new BigDecimal(toQty)));
-                                invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
-                                invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
-                                // 插入新库存
-                                InvLotLocId invLotLocIdInsert = invLotLocId;
-                                invLotLocIdInsert.setLotnum(newLotnum);
-                                invLotLocIdInsert.setQty(new BigDecimal(toQty));
-                                invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
-                                invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
-                                invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
-                                invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
-                            }
-                        }else {
+                        if (isStockPalletNoTo) {
                             // 拆分库存
                             // 修改原库存
                             InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
@@ -1225,32 +1212,24 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
                             invLotLocIdUpdate.setCustomerId(v.getCustomerId());
                             invLotLocIdUpdate.setSku(v.getSku());
                             invLotLocIdUpdate.setQty(invLotLocId.getQty().subtract(new BigDecimal(toQty)));
-                            if(qtyallocated.compareTo(new BigDecimal(toQty)) == 1) {
-                                invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
-                            }else {
-                                invLotLocIdUpdate.setQtyallocated(BigDecimal.ZERO);
-                            }
+                            invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
                             invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
                             // 插入新库存
                             InvLotLocId invLotLocIdInsert = invLotLocId;
                             invLotLocIdInsert.setLotnum(newLotnum);
                             invLotLocIdInsert.setQty(new BigDecimal(toQty));
                             invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
-                            if(qtyallocated.compareTo(new BigDecimal(toQty)) == 1) {
-                                invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
-                            }else {
-                                invLotLocIdInsert.setQtyallocated(qtyallocated);
-                            }
+                            invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
                             invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
                             invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
                         }
                     }
-
+                    // 更新出库单备货数量
+                    wmsDocOrderHeaderService.modifystockCompletionStatus(orderNo,sku,new BigDecimal(toQty));
                 }
 
             }
         }
-//        }
         // 更新托盘
         WmsBoxInfo boxFrom = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(groupDiskFrom.getPalletNoTo());
         boxFrom.setIsFull(groupDiskFrom.getIsFull());
@@ -1555,7 +1534,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
             details.setdEdi04(erpOrder.getVaild());         //单据状态
             details.setdEdi05(erpOrder.getStockId());       //仓库编号
             details.setdEdi06(erpOrder.getOrderState());    //是否扫描完成
-            details.setdEdi07(orderNo);    //项次
+            details.setdEdi07(erpOrderNo);    //项次
             details.setdEdi08(erpOrder.getOrderType());     //erp单据类型
             details.setdEdi09(erpOrder.getInout());         //erp出入库类型
             details.setLineStatus("00");