فهرست منبع

选矿出库部分优化、加入wcs坐标字段

zhangxin 1 سال پیش
والد
کامیت
47e605a994

+ 14 - 0
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/form/AgvInTaskForm.java

@@ -45,6 +45,11 @@ public class AgvInTaskForm {
      */
     private String docNo;
 
+    /**
+     * wcs位置信息
+     */
+    private String wcsLocation;
+
     public String getAgvId() {
         return agvId;
     }
@@ -116,4 +121,13 @@ public class AgvInTaskForm {
     public void setDocNo(String docNo) {
         this.docNo = docNo;
     }
+
+    public String getWcsLocation() {
+        return wcsLocation;
+    }
+
+    public void setWcsLocation(String wcsLocation) {
+        this.wcsLocation = wcsLocation;
+    }
+
 }

+ 15 - 0
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/form/OutTaskForm.java

@@ -24,6 +24,11 @@ public class OutTaskForm {
      * floor:楼层
      */
     private Integer floor;
+
+    /**
+     * wcs位置信息
+     */
+    private String wcsLocation;
     /**
      * 包装类型
      *
@@ -145,4 +150,14 @@ public class OutTaskForm {
         return dests;
     }
 
+
+    public String getWcsLocation() {
+        return wcsLocation;
+    }
+
+    public void setWcsLocation(String wcsLocation) {
+        this.wcsLocation = wcsLocation;
+    }
+
+
 }

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/vo/LocationCoordinateVo.java

@@ -10,10 +10,10 @@ import lombok.Data;
 @Data
 public class LocationCoordinateVo {
 
-
     private String taskNo;
     private String locationId;
     private Integer row;
     private Integer col;
     private Integer floor;
+    private String wcsLocation;
 }

+ 5 - 4
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsToWmsApiService.java

@@ -118,7 +118,7 @@ public class WcsToWmsApiService {
         WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery);
         if (wcsTask != null) {
             BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(wcsTask.getLocationTo(), Constant.WAREHOUSE_ID);
-            return AjaxResult.success("仓位获取成功!", buildLocationCoordinateVo(wcsTask.getTaskNo(), baseLocationInfo.getLocationNo(), baseLocationInfo.getShiftNo(), baseLocationInfo.getRowNo(), baseLocationInfo.getRowIndex()));
+            return AjaxResult.success("仓位获取成功!", buildLocationCoordinateVo(wcsTask.getTaskNo(), baseLocationInfo.getLocationNo(), baseLocationInfo.getShiftNo(), baseLocationInfo.getRowNo(), baseLocationInfo.getRowIndex(), baseLocationInfo.getUserdefine4()));
         }
         // 推荐目标库位
         BaseLocationLotattVO baseLocationLotattVO = baseLocationInfoSubService.recommendAReceiptLocation(sku);
@@ -138,16 +138,17 @@ public class WcsToWmsApiService {
         // 入库缓存位生成库存
         InvLotLocIdSubService.initInv(Constant.LOC_STAGE_CACHE.toString(), sku, palletNo, asnNo, taskNo, qty);
         // 反馈
-        return AjaxResult.success("仓位获取成功!", buildLocationCoordinateVo(taskNo, baseLocationLotattVO.getLocationNo(), baseLocationLotattVO.getShiftNo(), baseLocationLotattVO.getRowNo(), baseLocationLotattVO.getRowIndex()));
+        return AjaxResult.success("仓位获取成功!", buildLocationCoordinateVo(taskNo, baseLocationLotattVO.getLocationNo(), baseLocationLotattVO.getShiftNo(), baseLocationLotattVO.getRowNo(), baseLocationLotattVO.getRowIndex(), baseLocationLotattVO.getUserdefine4()));
     }
 
-    private LocationCoordinateVo buildLocationCoordinateVo(String taskNo, String locationId, String floor, String col, String row){
+    private LocationCoordinateVo buildLocationCoordinateVo(String taskNo, String locationId, String floor, String col, String row, String wcsLocation){
         LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
         locationCoordinateVo.setTaskNo(taskNo);
         locationCoordinateVo.setLocationId(locationId);
         locationCoordinateVo.setFloor(Integer.valueOf(floor));
         locationCoordinateVo.setCol(Integer.valueOf(col));
         locationCoordinateVo.setRow(Integer.valueOf(row));
+        locationCoordinateVo.setWcsLocation(wcsLocation);
         return locationCoordinateVo;
     }
 
@@ -185,7 +186,7 @@ public class WcsToWmsApiService {
 
         // 生成四向车出库任务
         AjaxResult ajaxResult = wcsTaskSubService.addWcsOutTask(locationFrom, Constant.LOC_SORTATION_CACHE.toString(), "", pallentNo, wcsNo);
-        return AjaxResult.success("仓位获取成功", buildLocationCoordinateVo(ajaxResult.get("data").toString(), baseLocationLotattVO.getLocationNo(), baseLocationLotattVO.getShiftNo(), baseLocationLotattVO.getRowNo(), baseLocationLotattVO.getRowIndex()));
+        return AjaxResult.success("仓位获取成功", buildLocationCoordinateVo(ajaxResult.get("data").toString(), baseLocationLotattVO.getLocationNo(), baseLocationLotattVO.getShiftNo(), baseLocationLotattVO.getRowNo(), baseLocationLotattVO.getRowIndex(), baseLocationLotattVO.getUserdefine4()));
     }
 
 

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

@@ -6,9 +6,6 @@ import com.ruoyi.ams.asn.mapper.WmsDocAsnDetailsMapper;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnHeaderMapper;
 import com.ruoyi.ams.asn.service.IWmsDocAsnDetailsService;
 import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
-import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
-import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
-import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
 import com.ruoyi.ams.xuankuang.domain.form.AgvInTaskForm;
 import com.ruoyi.ams.xuankuang.domain.form.BillTaskForm;
 import com.ruoyi.ams.xuankuang.domain.vo.LocationCoordinateVo;
@@ -20,20 +17,13 @@ import com.ruoyi.base.utils.IdSequenceUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 
-import java.io.Console;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 入库业务
@@ -162,6 +152,7 @@ public class WmsDocAsnSubService {
             agvInTaskForm.setRow(Integer.parseInt(row));
             agvInTaskForm.setCol(Integer.parseInt(col));
             agvInTaskForm.setFloor(Integer.parseInt(floor));
+            agvInTaskForm.setWcsLocation(locationCoordinateVo.getWcsLocation());
             //调用agv入库任务下发
             WmsToWcsApiService wmsToWcsApiService = new WmsToWcsApiService();
             WcsResponseVo wcsResponseVo = wmsToWcsApiService.wmsAgvInTask(agvInTaskForm);

+ 26 - 42
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocOrderSubService.java

@@ -33,6 +33,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import static com.ruoyi.ams.xuankuang.service.BaseLocationInfoSubService.OUT_ZONES;
 
@@ -89,13 +90,7 @@ public class WmsDocOrderSubService {
         List<BaseLocationLotattVO> baseLocationLotattVOS = addConfirmAllocationAuto(orderNo);
 
         //筛选库存
-        List<BaseLocationLotattVO> baseLocationLotattVOS1 = filterInv(baseLocationLotattVOS, orderNo);
-
-        // 匹配库存(撇开先进先出)
-//        baseLocationLotattVOS = addConfirmAllocationAuto(orderNo);
-
-        //重新筛选库存
-//        baseLocationLotattVOS1 = filterInv(baseLocationLotattVOS, orderNo);
+        List<BaseLocationLotattVO> filterBaseLocationLotattVOS = filterInv(baseLocationLotattVOS, orderNo);
 
 
         boolean con = true;
@@ -103,8 +98,7 @@ public class WmsDocOrderSubService {
         int allocateQuantities = 0;
         //出库单对应袋数
         int orderNum = list.get(0).getQtyOrderedEach().intValue();
-        for (BaseLocationLotattVO baseLocationLotattVO1 : baseLocationLotattVOS1) {
-
+        for (BaseLocationLotattVO baseLocationLotattVO1 : filterBaseLocationLotattVOS) {
 
             BaseSku baseSku = iBaseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, list.get(0).getSku());
             String pallentNo = baseLocationLotattVO1.getLotattVO().getLotatt07();
@@ -171,7 +165,7 @@ public class WmsDocOrderSubService {
             wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS10.getValue());
             iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
         }
-        return AjaxResult.success("", baseLocationLotattVOS1);
+        return AjaxResult.success("", filterBaseLocationLotattVOS);
     }
 
     /**
@@ -211,47 +205,37 @@ public class WmsDocOrderSubService {
         WmsDocOrderDetails wmsDocOrderDetails = new WmsDocOrderDetails();
         wmsDocOrderDetails.setOrderNo(orderNo);
         wmsDocOrderDetails.setLineStatus(Constant.ASN_STS.STS00.getValue());
-        List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
+        List<WmsDocOrderDetails> wmsDocOrderDetailsList = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
+
+        List<BaseLocationLotattVO> baseLocationLotattVOList = new ArrayList<>();
 
-        //出库同列阻挡和任务阻挡
-        List<BaseLocationLotattVO> baseLocationLotattVOS2 = new ArrayList<>();
-        for (int i = 0; i < baseLocationLotattVOS.size(); i++) {
-            BaseLocationLotattVO baseLocationLotattVO = baseLocationLotattVOS.get(i);
-            BaseLocationLotattVO baseLocationLotattVO1 = baseLocationInfoService.checkTheSameColumnLocation1(baseLocationLotattVO, baseLocationLotattVOS2);
-            if (baseLocationLotattVO1 != null) {
-                baseLocationLotattVOS2.add(baseLocationLotattVO1);
+        baseLocationLotattVOS.forEach(item -> {
+            BaseLocationLotattVO baseLocationLotattVO = baseLocationInfoService.checkOutboundTheSameColumnLocation(item, baseLocationLotattVOList);
+            if (ObjectUtil.isNotNull(baseLocationLotattVO)) {
+                baseLocationLotattVOList.add(baseLocationLotattVO);
             }
-        }
+        });
 
-        List<BaseLocationLotattVO> baseLocationLotattVOS1 = new ArrayList<>();
+        List<BaseLocationLotattVO> result = new ArrayList<>();
 
-        for (WmsDocOrderDetails wmsDocOrderDetails1 : list) {
-            String sku1 = wmsDocOrderDetails1.getSku();
+        for (WmsDocOrderDetails wmsDocOrderDetail : wmsDocOrderDetailsList) {
+            String sku = wmsDocOrderDetail.getSku();
             //出库数量
-            BigDecimal qtyAllocatedEach = wmsDocOrderDetails1.getQtyOrderedEach();
-
-            for (BaseLocationLotattVO baseLocationLotattVO1 : baseLocationLotattVOS2) {
-                if (qtyAllocatedEach.compareTo(BigDecimal.ZERO) <= 0) {
-                    return baseLocationLotattVOS1;
-                }
-                //库存数量
-                String sku = baseLocationLotattVO1.getSku();
-                BigDecimal qty = new BigDecimal(baseLocationLotattVO1.getQty());
+            BigDecimal qtyAllocatedEach = wmsDocOrderDetail.getQtyOrderedEach();
+            //根据sku筛选库位
+            List<BaseLocationLotattVO> skuBaseLocationLotattVOList = baseLocationLotattVOList.stream().filter(item -> item.getSku().equals(sku)).collect(Collectors.toList());
 
-                if (!sku.equals(sku1)) {
-                    continue;
-                }
-                int i = qty.compareTo(qtyAllocatedEach);
-                if (i >= 0) {
-                    baseLocationLotattVOS1.add(baseLocationLotattVO1);
-                    return baseLocationLotattVOS1;
-                } else if (i < 0) {
-                    qtyAllocatedEach = qtyAllocatedEach.subtract(qty);
-                    baseLocationLotattVOS1.add(baseLocationLotattVO1);
+            for (BaseLocationLotattVO baseLocationLotattVO : skuBaseLocationLotattVOList) {
+                BigDecimal qty = new BigDecimal(baseLocationLotattVO.getQty());
+                if (qty.compareTo(qtyAllocatedEach) >= 0) {
+                    result.add(baseLocationLotattVO);
+                    break;
                 }
+                qtyAllocatedEach = qtyAllocatedEach.subtract(qty);
+                result.add(baseLocationLotattVO);
             }
         }
-        return baseLocationLotattVOS1;
+        return result;
     }
 
     /**

+ 4 - 0
warewms-base/src/main/java/com/ruoyi/base/domain/BaseLocationInfo.java

@@ -134,6 +134,10 @@ public class BaseLocationInfo extends BaseEntity {
 
     private String userdefine3;
 
+
+    /**
+     * wcs位置坐标
+     */
     private String userdefine4;
 
     private String userdefine5;

+ 1 - 3
warewms-base/src/main/java/com/ruoyi/base/service/IBaseLocationInfoService.java

@@ -1,6 +1,5 @@
 package com.ruoyi.base.service;
 
-import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.dto.BaseLocationInfoSameColDTO;
 import com.ruoyi.base.domain.vo.BasLocationTreeSelectVO;
@@ -8,7 +7,6 @@ import com.ruoyi.base.domain.vo.BaseLocationLotattListVO;
 import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
 import com.ruoyi.base.domain.vo.TreeSelectVO;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.redis.RedisKey;
 
 import java.util.List;
 import java.util.Map;
@@ -37,7 +35,7 @@ public interface IBaseLocationInfoService {
      * @param basLocationList
      * @return
      */
-    BaseLocationLotattVO checkTheSameColumnLocation1(BaseLocationLotattVO baseLocationLotattVO,List<BaseLocationLotattVO> basLocationList);
+    BaseLocationLotattVO checkOutboundTheSameColumnLocation(BaseLocationLotattVO baseLocationLotattVO,List<BaseLocationLotattVO> basLocationList);
 
     /**
      * 查询库位信息

+ 7 - 21
warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseLocationInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ruoyi.base.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.base.constant.Constant;
@@ -83,10 +84,12 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
 
     /**
      * @param baseLocationLotattVO 要判断的库位
-     * @param basLocationList      满足要求的库位列表
+     * @param baseLocationList      满足要求的库位列表
      * @return
      */
-    public BaseLocationLotattVO checkTheSameColumnLocation1(BaseLocationLotattVO baseLocationLotattVO, List<BaseLocationLotattVO> basLocationList) {
+    public BaseLocationLotattVO checkOutboundTheSameColumnLocation(BaseLocationLotattVO baseLocationLotattVO, List<BaseLocationLotattVO> baseLocationList) {
+
+        if (CollectionUtil.isEmpty(baseLocationList)) return null;
 
         //查同列所有库位
         List<BaseLocationLotattVO> baseLocationInfos = baseLocationInfoMapper.queryByListInUserdeFine1(baseLocationLotattVO);
@@ -103,27 +106,10 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
 
         //同列前方是否有阻挡
         List<BaseLocationInfo> inStockByLocs = baseLocationInfoMapper.queryByListInStockByLoc(baseLocationLotattVO);
-        if (inStockByLocs.size() > 0) {
-
-            boolean isSuccess = true;
-            for (int i = 0; i < inStockByLocs.size(); i++) {
-                if (basLocationList.size() == 0) {
-                    return null;
-                }
+        if (CollectionUtil.isEmpty(inStockByLocs)) return baseLocationLotattVO;
 
-                boolean isSuit = false;
-                for (BaseLocationLotattVO vo : basLocationList) {
+        if (inStockByLocs.stream().noneMatch(item -> baseLocationList.stream().map(BaseLocationInfo::getId).collect(Collectors.toList()).contains(item.getId()))) return null;
 
-                    if (inStockByLocs.get(i).getId().equals(vo.getId())) {
-
-                        isSuit = true;
-                    }
-                }
-
-                isSuccess = isSuit;
-                if (!isSuccess) return null;
-            }
-        }
         return baseLocationLotattVO;
     }