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

选矿空托出入库优化

ChenYang преди 1 година
родител
ревизия
4738894c6d

Файловите разлики са ограничени, защото са твърде много
+ 1 - 1
base_sql/bucket_sql/xuankuang_ddl_20230904.sql


+ 2 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/ams/InvLotLocIdController.java

@@ -90,7 +90,7 @@ public class InvLotLocIdController extends BaseController {
         // 判断是否叫车
         if (invLotLocIdMoveForm != null
                 && invLotLocIdMoveForm.getIsCallCar().equals(Constant.IS_YES.Y.getValue())) {
-            return invLotLocIdService.move(invLotLocIdMoveForm);
+            return invLotLocIdService.moveInv(invLotLocIdMoveForm);
         } else {
             return invLotLocIdService.moveDirect(invLotLocIdMoveForm);
         }
@@ -120,7 +120,7 @@ public class InvLotLocIdController extends BaseController {
     private AjaxResult handleEmptyPalletOut(@RequestParam String locationId) {
         BaseLocationInfo baseLocationInfo = iBucketLocInvService.allocateLocationInfo();
         if (ObjectUtil.isNull(baseLocationInfo)) return AjaxResult.error("baseLocationInfo is null");
-        return AjaxResult.success(move(buildInvLotLocIdMoveForm(String.valueOf(baseLocationInfo.getId()), locationId)));
+        return move(buildInvLotLocIdMoveForm(String.valueOf(baseLocationInfo.getId()), locationId));
     }
 
     @Log(title = "入空托(桶装物料场景专用)", businessType = BusinessType.UPDATE)

+ 1 - 2
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/ExtBaseEntity.java

@@ -34,8 +34,7 @@ public class ExtBaseEntity implements Serializable
 
     public Map<String, Object> getParams()
     {
-        if (params == null)
-        {
+        if (params == null) {
             params = new HashMap<>();
         }
         return params;

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/service/impl/StatusUpdateServiceImpl.java

@@ -70,7 +70,7 @@ public class StatusUpdateServiceImpl implements StatusUpdateService {
     public void updateStatus(Long taskId, Integer carNo) {
         AmsTask amsTask = amsTaskService.selectAmsTaskById(taskId);
         if (amsTask != null) {
-            log.info("任务回调-------------------------" + amsTask.getTaskNo());
+            log.info("任务回调------------------------->" + amsTask.getTaskNo());
             if (amsTask.getAciIndex() == null) {
                 log.error("没有index,未下发的任务");
             }

+ 16 - 0
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/IInvLotLocIdService.java

@@ -85,6 +85,14 @@ public interface IInvLotLocIdService {
      */
     AjaxResult adj(InvLotLocIdAdjForm invLotLocIdAdjForm);
 
+
+    /**
+     * 移库任务
+     * @param invLotLocIdMoveForm
+     * @return
+     */
+    AjaxResult moveInv(InvLotLocIdMoveForm invLotLocIdMoveForm);
+
     /**
      * 库存移动
      *
@@ -337,4 +345,12 @@ public interface IInvLotLocIdService {
      * @return
      */
     List<InvLotLocId> selectInvLotLocIdList(List<String> locationIdList);
+
+    /**
+     * 根据库位ID更新当前分配的值
+     * @param locationId
+     * @param qtyallocated
+     * @return
+     */
+    Boolean updateInvLotLocId(String locationId, BigDecimal qtyallocated);
 }

+ 56 - 2
warewms-ams/src/main/java/com/ruoyi/ams/inv/service/impl/InvLotLocIdServiceImpl.java

@@ -3,6 +3,7 @@ package com.ruoyi.ams.inv.service.impl;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
@@ -188,10 +189,57 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         if (updateInvLotLocId(invLotLocIdUpdate) <= 0) {
             return AjaxResult.error("修改库存失败!");
         }
+        return AjaxResult.success();
+    }
 
-        // todo 事务
 
-        return AjaxResult.success();
+    @Override
+    public AjaxResult moveInv(InvLotLocIdMoveForm invLotLocIdMoveForm) {
+        String locationFrom = invLotLocIdMoveForm.getLocationFrom();
+        String locationTo = invLotLocIdMoveForm.getLocationTo();
+        String updateBy = invLotLocIdMoveForm.getUpdateBy();
+        Long warehouseId = invLotLocIdMoveForm.getWarehouseId();
+
+        // 验证起始库位
+        Boolean isNotInUsedSourceLocation = baseLocationInfoService.verifyLocationIsIdle(locationFrom, warehouseId);
+        Boolean isNotInUsedTargetLocation = baseLocationInfoService.verifyLocationIsIdle(locationTo, warehouseId);
+        Assert.isTrue(isNotInUsedSourceLocation && isNotInUsedTargetLocation,
+                "source location or target location must be not used");
+
+
+        Boolean isInStock = baseLocationInfoService.verifyLocationIsInStock(locationTo, warehouseId);
+        Assert.isTrue(isInStock, "target location is not empty");
+
+        // 起始和目标库位
+        BaseLocationInfo baseLocationFrom = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationFrom, warehouseId);
+        BaseLocationInfo baseLocationTo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, warehouseId);
+
+        // 下发移库任务
+        WcsTask wcsTask = new WcsTask();
+        wcsTask.setTaskNo(IdWorker.getIdStr());
+        if (locationFrom != null) {
+            wcsTask.setAreaFrom(baseLocationFrom.getZoneId().toString());
+            wcsTask.setLocationFrom(baseLocationFrom.getId().toString());
+        }
+        if (locationTo != null) {
+            wcsTask.setAreaTo(baseLocationTo.getZoneId() + "");
+            wcsTask.setLocationTo(baseLocationTo.getId().toString());
+        }
+        wcsTask.setState(9L);
+        wcsTask.setPriority(1L);
+        wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
+        wcsTask.setCreateDate(new Date());
+        wcsTask.setBusinessType("01");
+        wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
+        wcsTask.setWhTypeFrom(Constant.TaskType.MOVE_INV.getDesc());
+        wcsTask.setRemark("AGV移库任务下发");
+        iBusinessService.addTask(wcsTask);
+
+        // 锁定起始和目标库位任务状态
+        baseLocationInfoService.lockLocationStockStatus(baseLocationFrom.getId(), baseLocationTo.getId()
+                , warehouseId, updateBy);
+
+        return AjaxResult.success("执行成功");
     }
 
     /**
@@ -744,5 +792,11 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
                 .in(InvLotLocId::getLocationId, locationIdList).orderByAsc(InvLotLocId::getCreateTime));
     }
 
+    @Override
+    public Boolean updateInvLotLocId(String locationId, BigDecimal qtyallocated) {
+        return invLotLocIdMapper.update(new InvLotLocId(), Wrappers.<InvLotLocId>lambdaUpdate()
+                .set(InvLotLocId::getQtyallocated, qtyallocated).eq(InvLotLocId::getLocationId, locationId)) > 0;
+    }
+
 
 }

+ 0 - 22
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/form/TaskStatusForm.java

@@ -8,34 +8,12 @@ public class TaskStatusForm {
      * WCS任务号
      */
     private String taskNo;
-    /**
-     * Wms单号
-     */
-    private String relatedWmsNo;
-
-    public TaskStatusForm(String taskNo, String relatedWmsNo, int status) {
-        this.taskNo = taskNo;
-        this.relatedWmsNo = relatedWmsNo;
-        this.status = status;
-    }
-
-    public String getRelatedWmsNo() {
-        return relatedWmsNo;
-    }
-
-    public void setRelatedWmsNo(String relatedWmsNo) {
-        this.relatedWmsNo = relatedWmsNo;
-    }
 
     /**
      * 任务执行状态
      */
     private int status;
 
-    public TaskStatusForm() {
-    }
-
-
     public String getTaskNo() {
         return taskNo;
     }

+ 2 - 2
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/AgvCallProxyService.java

@@ -102,7 +102,7 @@ public class AgvCallProxyService {
         String agvTargetLocationId = String.valueOf(getAgvLocationId("bucketLocationIdList"));
         String agvTaskNo = IdWorker.getIdStr();
         addWcsTask(agvTaskNo, agvSourceLocationId, agvTargetLocationId,
-                asnNo, palletNo, Constant.TASK_STS.TASK_CREATE.getLongValue(), "agv入库任务下发", Constant.TaskType.AGV.getDesc());
+                asnNo, palletNo, Constant.TASK_STS.TASK_CREATE.getLongValue(), "AGV入库任务下发", Constant.TaskType.AGV.getDesc());
 
         //3.入库单创建
         WmsDocAsnHeader wmsDocAsnHeader =
@@ -146,7 +146,7 @@ public class AgvCallProxyService {
         String agvSourceLocationId = String.valueOf(getAgvLocationId("bucketLocationIdList"));
         String agvTaskNo = IdWorker.getIdStr();
         addWcsOutTask(agvTaskNo, agvSourceLocationId, targetLocationId,
-                orderNo, Constant.TASK_STS.TASK_CREATE.getLongValue(), "agv出库任务下发", Constant.TaskType.AGV.getDesc());
+                orderNo, Constant.TASK_STS.TASK_CREATE.getLongValue(), "AGV出库任务下发", Constant.TaskType.AGV.getDesc());
 
         //3.出库单创建
         WmsDocOrderHeader docOrderHeader =

+ 39 - 45
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsTaskSubService.java

@@ -1,6 +1,7 @@
 package com.ruoyi.ams.xuankuang.service;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
@@ -216,16 +217,13 @@ public class WcsTaskSubService {
                             , Long.parseLong(wcsTask.getLocationTo())
                             , Constant.WAREHOUSE_ID, updateBy);
                     //保底策略,生成新的库存之前,就删掉原先的再进行移动fromLoc->toLoc操作
+                    //入库完成后反馈
                     if (wcsTask.getExt1().startsWith("ASN")){
                         invLotLocIdService.deleteInvLotLocList(Long.parseLong(wcsTask.getLocationTo()));
-                    }
-                    // 将起始点库存移动到终点库位
-                    iWcsTaskService.moveStartingPointToDestination(wcsTask);
-                    //入库完成后反馈
-                    if (wcsTask.getExt1().startsWith("ASN")) {
-                        //  修改入库单收货数量
                         completeTheCallback(wcsTask);
-                    }//agv入库完成后反馈,回调wcs卸货完成
+
+                    }
+                    //agv入库完成后反馈,回调wcs卸货完成
                     else if (wcsTask.getLocationTo().equals("100733") && wcsTask.getExt1() == null) {
                         //卸货完成接口
                         wcsToWmsApiService.agvCallbackWCSBeforeUnloadingIsCompleted();
@@ -240,6 +238,8 @@ public class WcsTaskSubService {
                             Lists.newArrayList(Constant.TaskType.EMPTY_PALLET.getDesc(), Constant.TaskType.MOVE_INV.getDesc()), wcsTask.getWhTypeFrom())) {
                         invLotLocIdService.adjLocationIsEmpty(wcsTask.getLocationFrom(), Constant.WAREHOUSE_ID, "Wcs");
                     }
+                    // 将起始点库存移动到终点库位
+                    iWcsTaskService.moveStartingPointToDestination(wcsTask);
                     break;
                 case 4:
                     if (wcsTask.getState() == 4) {
@@ -338,55 +338,48 @@ public class WcsTaskSubService {
      * @return
      */
     public AjaxResult completeTheCallbackOut(WcsTask wcsTask) {
-        boolean con = true;
-        boolean con1 = true;
+        Boolean isComplete = Boolean.FALSE;
         String orderNo = wcsTask.getExt1();
-        List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
-        BigDecimal qtyOrderedEach = list.get(0).getQtyOrderedEach();
-        BigDecimal allocatedEach = list.get(0).getQtyAllocated();
-        String sku = list.get(0).getSku();
-        BigDecimal canQty = qtyOrderedEach.subtract(allocatedEach);
+        List<WmsDocOrderDetails> wmsDocOrderDetailList = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(orderNo);
+        WmsDocOrderDetails docOrderDetail = wmsDocOrderDetailList.get(0);
+        BigDecimal qtyAllocated = docOrderDetail.getQtyAllocated();
+        BigDecimal qtyPicked = docOrderDetail.getQtyPicked();
+        BigDecimal stillNeedQty = qtyAllocated.subtract(qtyPicked);
 
         Long locationId = StringUtils.isNotBlank(wcsTask.getLocationFrom()) ? Long.parseLong(wcsTask.getLocationFrom()) : -1L;
         List<InvLotLocId> invLotLocList = invLotLocIdService.getInvLotLocList(locationId);
-
-        for (InvLotLocId invLotLocId : invLotLocList) {
-            BigDecimal qty = invLotLocId.getQty();
-            if (qty.compareTo(canQty) >= 0) {
-                list.get(0).setQtyAllocatedEach(qtyOrderedEach);
-                list.get(0).setQtyAllocated(qtyOrderedEach);
-                list.get(0).setQtyPicked(qtyOrderedEach);
-                int i = iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
-                if (i > 0) {
-                    list.get(0).setLineStatus(Constant.ASN_STS.STS40.getValue());
-                    iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
-                } else {
-                    con = false;
-                    continue;
-                }
-            } else if (qty.compareTo(canQty) < 0) {
-                list.get(0).setQtyAllocatedEach(allocatedEach.add(qty));
-                list.get(0).setQtyAllocated(allocatedEach.add(qty));
-                list.get(0).setQtyPicked(allocatedEach.add(qty));
-                int i = iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
-                if (i > 0) {
-                    list.get(0).setLineStatus(Constant.ASN_STS.STS30.getValue());
-                    iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
-                    con1 = false;
-                    con = false;
-                }
+        if(ObjectUtil.isEmpty(invLotLocList)) return new AjaxResult();
+
+        BigDecimal qtyallocated = invLotLocList.get(0).getQtyallocated();
+        if (qtyallocated.compareTo(stillNeedQty) >= 0) {
+            qtyPicked = NumberUtil.add(qtyPicked, stillNeedQty);
+            docOrderDetail.setQtyPicked(qtyPicked);
+            docOrderDetail.setLineStatus(Constant.ASN_STS.STS40.getValue());
+            isComplete = updateWmsDocOrderDetails(docOrderDetail);
+        } else {
+            qtyPicked = NumberUtil.add(qtyPicked, qtyallocated);
+            docOrderDetail.setQtyPicked(qtyPicked);
+            int i = iWmsDocOrderDetailsService.updateWmsDocOrderDetails(docOrderDetail);
+            if (i > 0) {
+                docOrderDetail.setLineStatus(Constant.ASN_STS.STS30.getValue());
+                iWmsDocOrderDetailsService.updateWmsDocOrderDetails(docOrderDetail);
+                isComplete = false;
             }
         }
-        if (con == true) {
-            updateWmsDocOrderHeader(orderNo, sku);
-        }
-        if (con1 == false) {
+
+        if (ObjectUtil.equal(Boolean.TRUE, isComplete)) {
+            updateWmsDocOrderHeader(orderNo, docOrderDetail.getSku());
+        }else {
             WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
             // 修改 单头30
             wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS30.getValue());
             iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
         }
-        return AjaxResult.success("");
+        return AjaxResult.success("success");
+    }
+
+    private Boolean updateWmsDocOrderDetails(WmsDocOrderDetails docOrderDetail) {
+        return iWmsDocOrderDetailsService.updateWmsDocOrderDetails(docOrderDetail) > 0;
     }
 
 
@@ -396,6 +389,7 @@ public class WcsTaskSubService {
      * @param wcsTask
      * @return
      */
+    //TODO  陈阳
     public AjaxResult completeTheCallbackYueKu(WcsTask wcsTask) {
 
         String asnNo = wcsTask.getExt1();

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

@@ -1,5 +1,6 @@
 package com.ruoyi.ams.xuankuang.service;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
 import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 import com.ruoyi.ams.asn.mapper.WmsDocAsnHeaderMapper;
@@ -14,6 +15,7 @@ import com.ruoyi.base.domain.BaseSku;
 import com.ruoyi.base.service.IBaseSkuService;
 import com.ruoyi.base.utils.IdSequenceUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -114,12 +116,20 @@ public class WmsDocAsnSubService {
     public AjaxResult callbackWcsAgvInTask(String taskNo){
         WcsTask agvWcsTask = wcsTaskService.selectWcsTaskByTaskNo(taskNo);
         WcsTask wcsTask = wcsTaskService.selectWcsTask(agvWcsTask.getExt1(), Constant.TaskType.RGV.getDesc());
+        if(ObjectUtil.isNull(wcsTask) || StringUtils.isBlank(wcsTask.getTaskNo())){
+            log.info("wcsTask is null, the agv taskNo is {}", taskNo);
+            return  AjaxResult.error("the rgv wcsTask is null");
+        }
         return AjaxResult.success(wmsToWcsApiService.wmsAgvCallbackIntask(wcsTask.getTaskNo()));
     }
 
     public AjaxResult callbackWcsAgvOutTask(String taskNo) {
         WcsTask agvWcsTask = wcsTaskService.selectWcsTaskByTaskNo(taskNo);
         WcsTask wcsTask = wcsTaskService.selectWcsTask(agvWcsTask.getExt1(), Constant.TaskType.RGV.getDesc());
+        if(ObjectUtil.isNull(wcsTask) || StringUtils.isBlank(wcsTask.getTaskNo())){
+            log.info("wcsTask is null, the agv taskNo is {}", taskNo);
+            return  AjaxResult.error("the rgv wcsTask is null");
+        }
         return AjaxResult.success(wmsToWcsApiService.wmsAgvCallbackOuttask(wcsTask.getTaskNo()));
     }
 
@@ -138,7 +148,7 @@ public class WmsDocAsnSubService {
 
     /**
      * agv回调wcs取货完成
-     * @param wcsId
+     * @param taskNo
      * @return
      */
     public AjaxResult wmsAgvCallbackOuttask(String taskNo){

+ 20 - 16
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocOrderSubService.java

@@ -42,10 +42,7 @@ import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.PathVariable;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.ruoyi.ams.xuankuang.service.BaseLocationInfoSubService.OUT_ZONES;
@@ -99,7 +96,6 @@ public class WmsDocOrderSubService {
         wmsDocOrderDetails.setOrderNo(orderNo);
         wmsDocOrderDetails.setLineStatus(Constant.ORDER_STS.STS00.getValue());
         List<WmsDocOrderDetails> list = iWmsDocOrderDetailsService.selectWmsDocOrderDetailsList(wmsDocOrderDetails);
-        //IllegalArgumentException NPE RuntimeException;
         // 查询出库单头
         WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
 
@@ -116,12 +112,13 @@ public class WmsDocOrderSubService {
         //重新筛选库存
 //        baseLocationLotattVOS1 = filterInv(baseLocationLotattVOS, orderNo);
 
-        if(1==1) throw new RuntimeException("test");
         boolean con = true;
         //机械手应拆袋数
         int allocateQuantities = 0;
         //出库单对应袋数
-        int orderNum = list.get(0).getQtyOrderedEach().intValue();
+        int orderNum = list.get(0).getQtyOrdered().intValue();
+        //分配数量
+        List<OutTaskForm.Dest> destList = Lists.newArrayList();
         for (BaseLocationLotattDTO baseLocationLotatt : filteredLocationLotattList) {
 
 
@@ -158,21 +155,25 @@ public class WmsDocOrderSubService {
             outTaskForm.setMaterial(Integer.valueOf(baseSku.getDesc2()));
             outTaskForm.setTotal(qty.intValue());
             outTaskForm.setDocNo(orderNo);
-            if (Integer.valueOf(baseSku.getSkuType()) ==2){
+            if (Integer.valueOf(baseSku.getSkuType()) == 2){
                 List<OutTaskForm.Dest> dests = new ArrayList<>();
                 OutTaskForm.Dest dest = new OutTaskForm.Dest();
                 dest.setDest(Integer.parseInt(wmsDocOrderHeader.getSoReference3()));
-                if (orderNum <= qty.intValue()) {
+                if (orderNum < qty.intValue()) {
                     allocateQuantities = orderNum;
                     dest.setNum(allocateQuantities);
-                } else if (orderNum > qty.intValue()) {
+                    invLotLocIdService.updateInvLotLocId(locationId, new BigDecimal(allocateQuantities));
+                } else {
                     allocateQuantities = qty.intValue();
                     orderNum = orderNum - qty.intValue();
                     dest.setNum(allocateQuantities);
+                    invLotLocIdService.updateInvLotLocId(locationId, new BigDecimal(allocateQuantities));
                 }
                 dests.add(dest);
+                destList.add(dest);
                 outTaskForm.setDests(dests);
             }
+
             log.info("WmsDocOrderSubService - initOrderDetails is ready out task to Wcs ......");
             WcsResponseVo wcsResponseVo = wmsToWcsApiService.wmsOutTask(outTaskForm);
             if (!wcsResponseVo.isSuccess()) {
@@ -182,12 +183,15 @@ public class WmsDocOrderSubService {
                 continue;
             }
         }
+        int totalQtyAllocated = destList.stream().filter(item -> ObjectUtil.isNotNull(item.getNum()))
+                .mapToInt(OutTaskForm.Dest::getNum).sum();
+
         if (con == true) {
             // 修改 明细行状态为10
             WmsDocOrderDetails wmsDocOrderDetail = list.get(0);
             wmsDocOrderDetail.setLineStatus(Constant.ORDER_STS.STS10.getValue());
-            wmsDocOrderDetail.setQtyAllocated(wmsDocOrderDetail.getQtyOrderedEach());
-            wmsDocOrderDetail.setQtyAllocatedEach(wmsDocOrderDetail.getQtyOrderedEach());
+            wmsDocOrderDetail.setQtyAllocated(new BigDecimal(totalQtyAllocated));
+            wmsDocOrderDetail.setQtyAllocatedEach(new BigDecimal(totalQtyAllocated));
             iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
             // 修改 单头10
             wmsDocOrderHeader.setRemark("");
@@ -260,12 +264,10 @@ public class WmsDocOrderSubService {
                 List<Long> middleLeftSubList = ListUtil.sub(partitionLocationIdList, Constants.START_VALUE, locationIndex + 1);
                 List<Long> middleLeftLocationIdList = checkLocationIdList(locationInfo.getId(), sourceInvLotLocIdList, middleLeftSubList,
                         baseLocationLotattList, quantity);
-                System.err.println(JSONObject.toJSONString(middleLeftLocationIdList));
 
                 List<Long> middleRightSubList = ListUtil.reverse(ListUtil.sub(partitionLocationIdList, locationIndex, partitionLocationIdList.size()));
                 List<Long> middleRightLocationIdList = checkLocationIdList(locationInfo.getId(), sourceInvLotLocIdList, middleRightSubList,
                         baseLocationLotattList, quantity);
-                System.err.println(JSONObject.toJSONString(middleRightLocationIdList));
 
                 if(CollectionUtil.isEmpty(middleLeftLocationIdList)
                         && CollectionUtil.isEmpty(middleRightLocationIdList)) continue;
@@ -290,7 +292,6 @@ public class WmsDocOrderSubService {
 
                 baseLocationLotattList = baseLocationLotattList.stream()
                         .filter(item -> !CollectionUtil.contains(finalLeftLocationIdList, item.getId())).collect(Collectors.toList());
-                System.err.println(JSONObject.toJSONString(finalLeftLocationIdList));
                 selectedLocationIdList.addAll(finalLeftLocationIdList);
                 if(CompareUtil.compare(quantity, BigDecimal.ZERO) <= 0) break;
             }
@@ -313,7 +314,10 @@ public class WmsDocOrderSubService {
             }
         }
         log.info("current selectedLocationIdList info is {}", JSONObject.toJSONString(selectedLocationIdList));
-        return copyLocationLotattList.stream().filter(item -> CollectionUtil.contains(selectedLocationIdList, item.getId())).collect(Collectors.toList());
+        return selectedLocationIdList.stream()
+                .map(item ->
+                        copyLocationLotattList.stream().filter(element -> CompareUtil.compare(item, element.getId()) == 0).findFirst().orElse(null)
+                ).filter(item -> ObjectUtil.isNotNull(item)).collect(Collectors.toList());
     }
 
     private BigDecimal compareCount(BigDecimal middleLeftCount, BigDecimal middleRightCount) {

+ 0 - 2
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/impl/BucketLocInvServiceImpl.java

@@ -42,7 +42,6 @@ public class BucketLocInvServiceImpl implements IBucketLocInvService {
     /**
      * 空托移入
      * @return
-     * TODO 李卫  看看怎么判空
      */
     @Override
     public BaseLocationInfo selectLocationInfo(){
@@ -66,7 +65,6 @@ public class BucketLocInvServiceImpl implements IBucketLocInvService {
     /**
      * 移库 空托移出
      * @return
-     * TODO 李卫 看看怎么判空
      */
     @Override
     public BaseLocationLotattDTO allocateLocationInfo(){