소스 검색

选矿bug修复

zhangxin 1 년 전
부모
커밋
5ef29d64c0

+ 15 - 9
ruoyi-admin/src/main/java/com/ruoyi/xuankuang/controller/WcsToWmsApiController.java

@@ -1,8 +1,5 @@
 package com.ruoyi.xuankuang.controller;
 
-import cn.hutool.log.Log;
-import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.ams.xuankuang.domain.form.*;
 import com.ruoyi.ams.xuankuang.service.WcsToWmsApiService;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -12,9 +9,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.spring.web.json.Json;
-
-import java.util.Locale;
 
 /**
  * WCS调WMS接口
@@ -41,7 +35,11 @@ public class WcsToWmsApiController {
     @ApiOperation("组盘上报")
     @PostMapping("/stackingCompletion")
     public AjaxResult stackingCompletion(@RequestBody StackingCompletionForm stackingCompletion) {
-        return wcsToWmsApiService.stackingCompletion(stackingCompletion);
+        AjaxResult ajaxResult;
+        synchronized(this) {
+            ajaxResult = wcsToWmsApiService.stackingCompletion(stackingCompletion);
+        }
+        return ajaxResult;
     }
 
     /**
@@ -53,7 +51,11 @@ public class WcsToWmsApiController {
     @ApiOperation("任务状态反馈")
     @PostMapping("/taskStatusResponse")
     public AjaxResult taskStatusResponse(@RequestBody TaskStatusForm taskStatusForm) {
-        return wcsToWmsApiService.taskStatusResponse(taskStatusForm);
+        AjaxResult ajaxResult;
+        synchronized(this) {
+            ajaxResult = wcsToWmsApiService.taskStatusResponse(taskStatusForm);
+        }
+        return ajaxResult;
     }
 
     /**
@@ -77,7 +79,11 @@ public class WcsToWmsApiController {
     @ApiOperation("空托仓位请求")
     @PostMapping("/emptyPalletLocRequest")
     public AjaxResult emptyPalletLocRequest(@RequestBody EmptyPalletLocForm emptyPalletLocForm) {
-        return wcsToWmsApiService.EmptyPalletLoc(emptyPalletLocForm);
+        AjaxResult ajaxResult;
+        synchronized(this) {
+            ajaxResult = wcsToWmsApiService.EmptyPalletLoc(emptyPalletLocForm);;
+        }
+        return ajaxResult;
     }
 
     /**

+ 2 - 10
warewms-ams/src/main/java/com/ruoyi/ams/task/service/IWcsTaskService.java

@@ -1,12 +1,11 @@
 package com.ruoyi.ams.task.service;
 
-import java.util.List;
-
-import com.ruoyi.ams.agv.ndc.entity.CallbackResult;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
 import com.ruoyi.common.core.domain.AjaxResult;
 
+import java.util.List;
+
 /**
  * AGV任务Service接口
  *
@@ -176,11 +175,4 @@ public interface IWcsTaskService {
      */
     AjaxResult  moveStartingPointToDestination(WcsTask wcsTask);
 
-    /**
-     * 出库将起始点库存放到终点位置
-     *
-     * @param wcsTask
-     * @return
-     */
-    AjaxResult moveStartingPointToDestinationout(WcsTask wcsTask);
 }

+ 15 - 69
warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java

@@ -1,9 +1,6 @@
 package com.ruoyi.ams.task.service.impl;
 
-import java.lang.reflect.Method;
-import java.util.Date;
-import java.util.List;
-
+import cn.hutool.core.util.ObjectUtil;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
@@ -13,7 +10,10 @@ import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
+import com.ruoyi.ams.task.mapper.WcsTaskMapper;
+import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.service.IBaseLocationInfoService;
@@ -26,11 +26,12 @@ import com.ruoyi.hard.demo.AutoDoorClient;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.ams.task.mapper.WcsTaskMapper;
-import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.service.IWcsTaskService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.lang.reflect.Method;
+import java.util.Date;
+import java.util.List;
+
 /**
  * AGV任务Service业务层处理
  *
@@ -353,8 +354,8 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
             return;
         }
 
-        if (state > 1 && state != 7) {
-            wcsTask.setAgvNo(carNo + "");
+        if (state > 1 && state != 7 && ObjectUtil.isNotNull(carNo)) {
+            wcsTask.setAgvNo(carNo.toString());
         }
 
         if (wcsTask.getState() == 2 || wcsTask.getState() == 7) {
@@ -506,30 +507,13 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
     @Override
     @Transactional
     public AjaxResult moveMiddleCacheToDestination(WcsTask wcsTask) {
-        //终点位置
-        Long locationTo = Long.valueOf(wcsTask.getLocationTo());
-        //中间缓存位置
-        Long middleCache = Constant.LOC_MIDDLE_CACHE;
-        //任务号
-        String taskNo = wcsTask.getTaskNo();
-        //检验起点库位库存
-        InvLotLocId invLotLocIdQuery = new InvLotLocId();
-        invLotLocIdQuery.setLocationId(middleCache.toString());
-        invLotLocIdQuery.setTraceid(taskNo);
-        List<InvLotLocId> invLotLocIdList = invLotLocIdService.selectInvLotLocIdList(invLotLocIdQuery);
-        if (invLotLocIdList.size() > 0) {
-            // 转移库存
-            invLotLocIdMapper.moveInvByTraceId(middleCache, locationTo, taskNo);
-        }
-        //修改目标库位状态为占用
-        baseLocationInfoService.occupyLocation(locationTo, Constant.WAREHOUSE_ID, wcsTask.getUpdateBy());
-
-        return AjaxResult.success();
+        wcsTask.setLocationFrom(Constant.LOC_MIDDLE_CACHE.toString());
+        return moveStartingPointToDestination(wcsTask);
     }
 
 
     /**
-     * 入库将起始点库存放到终点位置
+     * 将起始点库存放到终点位置
      *
      * @param wcsTask
      * @return
@@ -544,46 +528,8 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
 
         //任务号
         String taskNo = wcsTask.getTaskNo();
-        //检验起点库位库存
-        InvLotLocId invLotLocIdQuery = new InvLotLocId();
-        invLotLocIdQuery.setLocationId(locationFrom.toString());
-        invLotLocIdQuery.setTraceid(taskNo);
-        List<InvLotLocId> invLotLocIdList = invLotLocIdService.selectInvLotLocIdList(invLotLocIdQuery);
-        if (invLotLocIdList.size() > 0) {
-            // 转移库存
-            invLotLocIdMapper.moveInvByTraceId(locationFrom, locationTo, taskNo);
-        }
-        //修改目标库位状态为占用
-        baseLocationInfoService.occupyLocation(locationTo, Constant.WAREHOUSE_ID, wcsTask.getUpdateBy());
-
-        return AjaxResult.success();
-    }
-
-
-    /**
-     * 出库将起始点库存放到终点位置
-     *
-     * @param wcsTask
-     * @return
-     */
-    @Override
-    @Transactional
-    public AjaxResult moveStartingPointToDestinationout(WcsTask wcsTask) {
-        //起始位置
-        Long locationFrom = Long.valueOf(wcsTask.getLocationFrom());
-        //终点位置
-        Long locationTo = Long.valueOf(wcsTask.getLocationTo());
-
-        //任务号
-        String taskNo = wcsTask.getTaskNo();
-        //检验起点库位库存
-        InvLotLocId invLotLocIdQuery = new InvLotLocId();
-        invLotLocIdQuery.setLocationId(locationFrom.toString());
-        List<InvLotLocId> invLotLocIdList = invLotLocIdService.selectInvLotLocIdList(invLotLocIdQuery);
-        if (invLotLocIdList.size() > 0) {
-            // 转移库存
-            invLotLocIdMapper.moveInvByTraceIdOut(locationFrom, locationTo, taskNo);
-        }
+        // 转移库存
+        invLotLocIdMapper.moveInvByTraceIdOut(locationFrom, locationTo, taskNo);
         //修改目标库位状态为占用
         baseLocationInfoService.occupyLocation(locationTo, Constant.WAREHOUSE_ID, wcsTask.getUpdateBy());
         return AjaxResult.success();

+ 4 - 0
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/facade/impl/UnpackingMachineFacadeImpl.java

@@ -6,8 +6,12 @@ import com.ruoyi.ams.xuankuang.service.WmsToWcsApiService;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.hard.xuankang.StirringTankClient;
 import com.ruoyi.hard.xuankang.UnpackingMachineSubClient;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 
+@Slf4j
+@Service
 public class UnpackingMachineFacadeImpl implements IUnpackingMachineFacade {
 
     @Autowired

+ 38 - 117
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsTaskSubService.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.service.IWmsDocAsnDetailsService;
@@ -18,6 +19,7 @@ import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.exception.base.BaseException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -71,7 +73,6 @@ public class WcsTaskSubService {
         BaseLocationInfo baseLocationInfoTo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, 1l);
 
         String taskNo = generateTaskNo();
-        ;
         WcsTask wcsTask = new WcsTask();
         wcsTask.setTaskNo(taskNo);
         wcsTask.setState(10L);
@@ -109,36 +110,7 @@ public class WcsTaskSubService {
             , String orderNo
             , String palletNo
             , String wcsNo) {
-
-        BaseLocationInfo baseLocationInfoFrom = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationFrom, 1l);
-        BaseLocationInfo baseLocationInfoTo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, 1l);
-
-        String taskNo = generateTaskNo();
-        WcsTask wcsTask = new WcsTask();
-        wcsTask.setTaskNo(taskNo);
-        wcsTask.setState(10L);
-        wcsTask.setTaskType(Constant.TASK_TYPE.FORWARD.getValue());
-        wcsTask.setBusinessType("01");
-        wcsTask.setAreaFrom(baseLocationInfoFrom.getZoneId().toString());
-        wcsTask.setLocationFrom(baseLocationInfoFrom.getId().toString());
-        wcsTask.setAreaTo(baseLocationInfoTo.getZoneId().toString());
-        wcsTask.setLocationTo(baseLocationInfoTo.getId().toString());
-        wcsTask.setCreateTime(new Date());
-        wcsTask.setCreateBy("Wcs");
-        wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
-        wcsTask.setPriority(10L);
-        wcsTask.setExt1(orderNo);
-        wcsTask.setExt2(palletNo);
-        wcsTask.setExt3(wcsNo);
-        wcsTask.setRemark("立体库任务");
-        int i = iWcsTaskService.insertWcsTask(wcsTask);
-        if (i > 0) {
-            iBaseLocationInfoService.lockLocationStockStatus(Long.valueOf(wcsTask.getLocationFrom())
-                    , Long.valueOf(wcsTask.getLocationTo())
-                    , Constant.WAREHOUSE_ID, "Wcs");
-            return AjaxResult.success("任务增加成功!", taskNo);
-        }
-        return AjaxResult.error("任务增加失败");
+        return addWcsTask(locationFrom, locationTo, orderNo, palletNo, wcsNo);
     }
 
     /**
@@ -184,8 +156,8 @@ public class WcsTaskSubService {
             return;
         }
 
-        if (state > 1 && state != 7) {
-            wcsTask.setAgvNo(carNo + "");
+        if (state > 1 && state != 7 && ObjectUtil.isNotNull(carNo)) {
+            wcsTask.setAgvNo(carNo.toString());
         }
 
         if (wcsTask.getState() == 2 || wcsTask.getState() == 7) {
@@ -198,64 +170,36 @@ public class WcsTaskSubService {
                     wcsTask.setStartTime(new Date());
                     break;
                 case 2://完成
-                    if (wcsTask.getState() == 2) {
-                        log.info("不能重复放货," + taskNo);
-                        return;
-                    }
                     wcsTask.setEndTime(new Date());
                     //越库任务完成后反馈
-                    if (wcsTask.getExt2().equals("") && wcsTask.getExt1().startsWith("ASN")){
+                    if (wcsTask.getExt2().equals("") && wcsTask.getExt1().startsWith("ASN")) {
                         completeTheCallbackYueKu(wcsTask);
                         break;
                     }
+                    // 解锁库位
+                    iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
+                            , Long.parseLong(wcsTask.getLocationTo())
+                            , Constant.WAREHOUSE_ID, updateBy);
+                    // 将起始点库存移动到终点库位
+                    iWcsTaskService.moveStartingPointToDestination(wcsTask);
                     //入库完成后反馈
                     if (wcsTask.getExt1().startsWith("ASN")) {
-                        // 解锁库位
-                        iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
-                                , Long.parseLong(wcsTask.getLocationTo())
-                                , Constant.WAREHOUSE_ID, updateBy);
-                        // 将起始点库存移动到终点库位
-                        iWcsTaskService.moveStartingPointToDestination(wcsTask);
                         //  修改入库单收货数量
                         completeTheCallback(wcsTask);
                     }//agv入库完成后反馈,回调wcs卸货完成
-                    else if (wcsTask.getLocationTo().equals("100733") && wcsTask.getExt1()==null){
-                        // 解锁库位
-                        iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
-                                , Long.parseLong(wcsTask.getLocationTo())
-                                , Constant.WAREHOUSE_ID, updateBy);
-                        // 将起始点库存移动到终点库位
-                        iWcsTaskService.moveStartingPointToDestination(wcsTask);
+                    else if (wcsTask.getLocationTo().equals("100733") && wcsTask.getExt1() == null) {
                         wcsToWmsApiService.agvCallbackWCSBeforeUnloadingIsCompleted();
                     }
                     //出库完成后反馈
-                    if (wcsTask.getExt1().startsWith("SO")) {
-                        // 解锁库位
-                        iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
-                                , Long.parseLong(wcsTask.getLocationTo())
-                                , Constant.WAREHOUSE_ID, updateBy);
-                        // 将起始点库存移动到终点库位
-                        iWcsTaskService.moveStartingPointToDestinationout(wcsTask);
+                    else if (wcsTask.getExt1().startsWith("SO")) {
                         invLotLocIdService.adjLocationIsEmpty(wcsTask.getLocationFrom(), Constant.WAREHOUSE_ID, "Wcs");
                         //  修改出库单收货数量
                         completeTheCallbackOut(wcsTask);
                     }//空托任务反馈和移库反馈
-                    else if (wcsTask.getExt1().equals("")){
-                        // 解锁库位
-                        iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
-                                , Long.parseLong(wcsTask.getLocationTo())
-                                , Constant.WAREHOUSE_ID, updateBy);
-                        iWcsTaskService.moveStartingPointToDestinationout(wcsTask);
-                        if (!wcsTask.getExt3().equals("")){
-                            invLotLocIdService.adjLocationIsEmpty(wcsTask.getLocationFrom(), Constant.WAREHOUSE_ID, "Wcs");
-                        }
+                    else if (wcsTask.getExt1().equals("") && !wcsTask.getExt3().equals("")) {
+                        invLotLocIdService.adjLocationIsEmpty(wcsTask.getLocationFrom(), Constant.WAREHOUSE_ID, "Wcs");
                     }//agv出库完成后反馈回调取货完成
-                    else if (wcsTask.getExt5()!=null){
-                        // 解锁库位
-                        iBaseLocationInfoService.unLockLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom())
-                                , Long.parseLong(wcsTask.getLocationTo())
-                                , Constant.WAREHOUSE_ID, updateBy);
-                        iWcsTaskService.moveStartingPointToDestinationout(wcsTask);
+                    else if (wcsTask.getExt5() != null) {
                         wmsDocAsnSubService.wmsAgvCallbackOuttask(wcsTask.getExt5());
                     }
                     break;
@@ -283,9 +227,7 @@ public class WcsTaskSubService {
                     break;
             }
         } catch (Exception e) {
-            log.info(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常", e);
-            wcsTask.setRemark("回调状态:" + state + "异常");
-            throw new RuntimeException();
+            throw new BaseException(wcsTask.getTaskNo() + "-----" + "回调状态:" + state + "异常");
         }
         wcsTask.setState(state.longValue());
         wcsTask.setUpdateDate(new Date());
@@ -399,27 +341,7 @@ public class WcsTaskSubService {
             }
         }
         if (con == true) {
-            WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-            // 修改 单头40
-            wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS40.getValue());
-            int i = iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
-            if (i >0) {
-                if (sku.equals("Na2CO3")){
-                    wcsToWmsApiService.turnOffTheUnpacker();
-                }
-                if (sku.equals("C5H10OS2")){
-                    wcsToWmsApiService.turnOffTheUnpacker1();
-                }
-                if (sku.equals("(NaPO3)6")){
-                    wcsToWmsApiService.turnOffTheUnpacker2();
-                }
-                if (sku.equals("(NH4)2SO4")){
-                    wcsToWmsApiService.turnOffTheUnpacker3();
-                }
-                if (sku.equals("CH3CH2OCS2Na")){
-                    wcsToWmsApiService.turnOffTheUnpacker4();
-                }
-            };
+            updateWmsDocOrderHeader(orderNo, sku);
         }
         if (con1 == false) {
             WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
@@ -466,29 +388,28 @@ public class WcsTaskSubService {
         list.get(0).setQtyAllocatedEach(list.get(0).getQtyOrdered());
         iWmsDocOrderDetailsService.updateWmsDocOrderDetails(list.get(0));
         //修改 出库单单头40
-        WmsDocOrderHeader wmsDocOrderHeader1 = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
-        wmsDocOrderHeader1.setOrderStatus(Constant.ORDER_STS.STS40.getValue());
-        int i = iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader1);
-        if (i >0) {
-            if (sku.equals("Na2CO3")){
-                wcsToWmsApiService.turnOffTheUnpacker();
-            }
-            if (sku.equals("C5H10OS2")){
-                wcsToWmsApiService.turnOffTheUnpacker1();
-            }
-            if (sku.equals("(NaPO3)6")){
-                wcsToWmsApiService.turnOffTheUnpacker2();
-            }
-            if (sku.equals("(NH4)2SO4")){
-                wcsToWmsApiService.turnOffTheUnpacker3();
-            }
-            if (sku.equals("CH3CH2OCS2Na")){
-                wcsToWmsApiService.turnOffTheUnpacker4();
-            }
-        };
+        updateWmsDocOrderHeader(orderNo, sku);
         return AjaxResult.success("");
     }
 
+    private void updateWmsDocOrderHeader(String orderNo, String sku){
+        //修改 出库单单头40
+        WmsDocOrderHeader wmsDocOrderHeader = iWmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
+        wmsDocOrderHeader.setOrderStatus(Constant.ORDER_STS.STS40.getValue());
+        iWmsDocOrderHeaderService.updateWmsDocOrderHeader(wmsDocOrderHeader);
+        if (sku.equals("Na2CO3")) {
+            wcsToWmsApiService.turnOffTheUnpacker();
+        } else if (sku.equals("C5H10OS2")) {
+            wcsToWmsApiService.turnOffTheUnpacker1();
+        } else if (sku.equals("(NaPO3)6")) {
+            wcsToWmsApiService.turnOffTheUnpacker2();
+        } else if (sku.equals("(NH4)2SO4")) {
+            wcsToWmsApiService.turnOffTheUnpacker3();
+        } else if (sku.equals("CH3CH2OCS2Na")) {
+            wcsToWmsApiService.turnOffTheUnpacker4();
+        }
+    }
+
     /**
      * 生成唯一任务号
      *

+ 38 - 196
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsToWmsApiService.java

@@ -78,6 +78,7 @@ public class WcsToWmsApiService {
     @Autowired
     private AgvCallProxyService agvCallProxyService;
 
+
     /**
      * 组盘上报
      *
@@ -85,7 +86,7 @@ public class WcsToWmsApiService {
      * @return
      */
     @Transactional
-    public synchronized AjaxResult stackingCompletion(StackingCompletionForm stackingCompletion) {
+    public AjaxResult stackingCompletion(StackingCompletionForm stackingCompletion) {
         // 上报类型
         int reportType = stackingCompletion.getReportType();
         // 托盘号
@@ -101,85 +102,30 @@ public class WcsToWmsApiService {
         // 任务号
         String wcsNo = stackingCompletion.getWcsNo();
 
-
-        if (asnNo.equals("")) {
+        if (StringUtils.isBlank(asnNo)) {
             AjaxResult ajaxResult1 = generateAShippingOrder(sku, new BigDecimal(qty));
-            // 判重
-            WcsTask wcsTaskQuery = new WcsTask();
-            //AsnNO
-            wcsTaskQuery.setExt1(ajaxResult1.getData().toString());
-            wcsTaskQuery.setExt2(palletNo);
-            wcsTaskQuery.setExt3(wcsNo);
-            WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery);
-            if (wcsTask != null) {
-                String locationTo = wcsTask.getLocationTo();
-                BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, Constant.WAREHOUSE_ID);
-                LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
-                locationCoordinateVo.setTaskNo(wcsTask.getTaskNo());
-                locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo());
-                locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo()));
-                locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo()));
-                locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex()));
-                return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
-            }
-
-            // 推荐目标库位
-            BaseLocationLotattVO baseLocationLotattVO = baseLocationInfoSubService.recommendAReceiptLocation(sku);
-            if (baseLocationLotattVO == null) {
-                AjaxResult.error("没有可以推荐的目标库位!");
-            }
-
-            //TODO recommendAReceiptLocation,获取库位时,判断同列库存是否是相同入库日期的,不同相同日期不可放
-
-            // 生成任务
-            String taskNo = "";
-            AjaxResult ajaxResult = wcsTaskSubService.addWcsTask(Constant.LOC_STAGE_CACHE.toString()
-                    , baseLocationLotattVO.getId().toString()
-                    , ajaxResult1.getData().toString()
-                    , palletNo
-                    , wcsNo);
-            if (!ajaxResult.isSuccess()) {
-                return ajaxResult;
-            }
-            taskNo = ajaxResult.get("data").toString();
-            // 入库缓存位生成库存
-            InvLotLocIdSubService.initInv(Constant.LOC_STAGE_CACHE.toString(), sku, palletNo, ajaxResult1.getData().toString(), taskNo, qty);
-            // 反馈
-            LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
-            locationCoordinateVo.setTaskNo(taskNo);
-            locationCoordinateVo.setLocationId(baseLocationLotattVO.getLocationNo());
-            locationCoordinateVo.setFloor(Integer.valueOf(baseLocationLotattVO.getShiftNo()));
-            locationCoordinateVo.setCol(Integer.valueOf(baseLocationLotattVO.getRowNo()));
-            locationCoordinateVo.setRow(Integer.valueOf(baseLocationLotattVO.getRowIndex()));
-            return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
+            asnNo = ajaxResult1.getData().toString();
         }
+        return insertTaskAndInvLotLocId(asnNo, palletNo, wcsNo, sku, qty);
+    }
 
-        // 判重
+    private AjaxResult insertTaskAndInvLotLocId(String asnNo, String palletNo, String wcsNo, String sku, Double qty){
         WcsTask wcsTaskQuery = new WcsTask();
         wcsTaskQuery.setExt1(asnNo);
         wcsTaskQuery.setExt2(palletNo);
         wcsTaskQuery.setExt3(wcsNo);
+        wcsTaskQuery.setState(Long.parseLong(Constant.TASK_STS.TASK10.getValue().toString()));
         WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery);
         if (wcsTask != null) {
-            String locationTo = wcsTask.getLocationTo();
-            BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, Constant.WAREHOUSE_ID);
-            LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
-            locationCoordinateVo.setTaskNo(wcsTask.getTaskNo());
-            locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo());
-            locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo()));
-            locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo()));
-            locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex()));
-            return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
+            BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(wcsTask.getLocationTo(), Constant.WAREHOUSE_ID);
+            return AjaxResult.success("仓位获取成功!", buildLocationCoordinateVo(wcsTask.getTaskNo(), baseLocationInfo.getLocationNo(), baseLocationInfo.getShiftNo(), baseLocationInfo.getRowNo(), baseLocationInfo.getRowIndex()));
         }
-
         // 推荐目标库位
         BaseLocationLotattVO baseLocationLotattVO = baseLocationInfoSubService.recommendAReceiptLocation(sku);
         if (baseLocationLotattVO == null) {
-            AjaxResult.error("没有可以推荐的目标库位!");
+            return AjaxResult.error("没有可以推荐的目标库位!");
         }
-
         // 生成任务
-        String taskNo = "";
         AjaxResult ajaxResult = wcsTaskSubService.addWcsTask(Constant.LOC_STAGE_CACHE.toString()
                 , baseLocationLotattVO.getId().toString()
                 , asnNo
@@ -188,17 +134,21 @@ public class WcsToWmsApiService {
         if (!ajaxResult.isSuccess()) {
             return ajaxResult;
         }
-        taskNo = ajaxResult.get("data").toString();
+        String taskNo = ajaxResult.get("data").toString();
         // 入库缓存位生成库存
         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()));
+    }
+
+    private LocationCoordinateVo buildLocationCoordinateVo(String taskNo, String locationId, String floor, String col, String row){
         LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
         locationCoordinateVo.setTaskNo(taskNo);
-        locationCoordinateVo.setLocationId(baseLocationLotattVO.getLocationNo());
-        locationCoordinateVo.setFloor(Integer.valueOf(baseLocationLotattVO.getShiftNo()));
-        locationCoordinateVo.setCol(Integer.valueOf(baseLocationLotattVO.getRowNo()));
-        locationCoordinateVo.setRow(Integer.valueOf(baseLocationLotattVO.getRowIndex()));
-        return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
+        locationCoordinateVo.setLocationId(locationId);
+        locationCoordinateVo.setFloor(Integer.valueOf(floor));
+        locationCoordinateVo.setCol(Integer.valueOf(col));
+        locationCoordinateVo.setRow(Integer.valueOf(row));
+        return locationCoordinateVo;
     }
 
     /**
@@ -208,7 +158,7 @@ public class WcsToWmsApiService {
      * @return
      */
     @Transactional
-    public synchronized AjaxResult EmptyPalletLoc(EmptyPalletLocForm emptyPalletLocForm) {
+    public AjaxResult EmptyPalletLoc(EmptyPalletLocForm emptyPalletLocForm) {
         // 空托仓位请求类型
         int taskType = emptyPalletLocForm.getTaskType();
         // 任务号
@@ -219,82 +169,23 @@ public class WcsToWmsApiService {
         }
 
         if (taskType == 1) {
-            // 判重
-            WcsTask wcsTaskQuery = new WcsTask();
-            wcsTaskQuery.setExt1("");
-            wcsTaskQuery.setExt2("");
-            wcsTaskQuery.setExt3(wcsNo);
-            WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery);
-            if (wcsTask != null) {
-                String locationTo = wcsTask.getLocationTo();
-                BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, Constant.WAREHOUSE_ID);
-                LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
-                locationCoordinateVo.setTaskNo(wcsTask.getTaskNo());
-                locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo());
-                locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo()));
-                locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo()));
-                locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex()));
-                return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
-            }
-            BaseLocationLotattVO baseLocationLotattVO = new BaseLocationLotattVO();
-
-            // 推荐目标库位
-            baseLocationLotattVO = baseLocationInfoSubService.recommendAReceiptLocation(Constant.PALLET_TYPE);
-            if (baseLocationLotattVO == null) {
-                AjaxResult.error("没有可以推荐的目标库位!");
-            }
-
-
-            // 生成任务
-            String taskNo = "";
-            AjaxResult ajaxResult = wcsTaskSubService.addWcsTask(Constant.LOC_STAGE_CACHE.toString()
-                    , baseLocationLotattVO.getId().toString()
-                    , ""
-                    , ""
-                    , wcsNo);
-            if (!ajaxResult.isSuccess()) {
-                return ajaxResult;
-            }
-            taskNo = ajaxResult.get("data").toString();
-            // 入库缓存位生成库存
-            InvLotLocIdSubService.initInv(Constant.LOC_STAGE_CACHE.toString(), Constant.PALLET_TYPE, "", "", taskNo, 1.0);
-            // 反馈
-            LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
-            locationCoordinateVo.setTaskNo(taskNo);
-            locationCoordinateVo.setLocationId(baseLocationLotattVO.getLocationNo());
-            locationCoordinateVo.setFloor(Integer.valueOf(baseLocationLotattVO.getShiftNo()));
-            locationCoordinateVo.setCol(Integer.valueOf(baseLocationLotattVO.getRowNo()));
-            locationCoordinateVo.setRow(Integer.valueOf(baseLocationLotattVO.getRowIndex()));
-            return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
+            return insertTaskAndInvLotLocId(StringUtils.EMPTY, StringUtils.EMPTY, wcsNo, Constant.PALLET_TYPE, 1.0);
+      }
+        //出库仓位
+        List<BaseLocationLotattVO> baseLocationLotattVOS = baseLocationInfoSubService.selectAllocatingInventoryAccordingConditionsOrderBy(OUT_ZONES, new LotattDTO(), Constant.PALLET_TYPE, StringUtils.EMPTY);
+        if (baseLocationLotattVOS.size() == 0) {
+            return AjaxResult.error("仓库中无库存");
         }
+        BaseLocationLotattVO baseLocationLotattVO = filterInv1(baseLocationLotattVOS);
+        Assert.isTrue(ObjectUtil.isNotNull(baseLocationLotattVO), "仓库中无库存");
 
-        if (taskType == 2) {
-            String sku = Constant.PALLET_TYPE;
-            LotattDTO lotattDTO = new LotattDTO();
-            String orderBy = "";
-            List<String> outZones = OUT_ZONES;
-            List<BaseLocationLotattVO> baseLocationLotattVOS = baseLocationInfoSubService.selectAllocatingInventoryAccordingConditionsOrderBy(outZones, lotattDTO, sku, orderBy);
-            if (baseLocationLotattVOS.size() == 0) {
-                return AjaxResult.error("仓库中无库存");
-            }
-            BaseLocationLotattVO baseLocationLotattVO = filterInv1(baseLocationLotattVOS);
-            Assert.isTrue(ObjectUtil.isNotNull(baseLocationLotattVO), "仓库中无库存");
-
-            String pallentNo = ObjectUtil.isNotNull(baseLocationLotattVO.getLotattVO())
-                    ? baseLocationLotattVO.getLotattVO().getLotatt07() : StringUtils.EMPTY;
-            String locationFrom = baseLocationLotattVO.getLocationNo();
-
-            // 生成四向车出库任务
-            AjaxResult ajaxResult = wcsTaskSubService.addWcsOutTask(locationFrom, Constant.LOC_SORTATION_CACHE.toString(), "", pallentNo, wcsNo);
-            LocationCoordinateVo locationCoordinateVo1 = new LocationCoordinateVo();
-            locationCoordinateVo1.setTaskNo(ajaxResult.get("data").toString());
-            locationCoordinateVo1.setLocationId(baseLocationLotattVO.getLocationNo());
-            locationCoordinateVo1.setFloor(Integer.valueOf(baseLocationLotattVO.getShiftNo()));
-            locationCoordinateVo1.setCol(Integer.valueOf(baseLocationLotattVO.getRowNo()));
-            locationCoordinateVo1.setRow(Integer.valueOf(baseLocationLotattVO.getRowIndex()));
-            return AjaxResult.success("仓位获取成功", locationCoordinateVo1);
-        }
-        return AjaxResult.success();
+        String pallentNo = ObjectUtil.isNotNull(baseLocationLotattVO.getLotattVO())
+                ? baseLocationLotattVO.getLotattVO().getLotatt07() : StringUtils.EMPTY;
+        String locationFrom = baseLocationLotattVO.getLocationNo();
+
+        // 生成四向车出库任务
+        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()));
     }
 
 
@@ -562,59 +453,10 @@ public class WcsToWmsApiService {
      */
     @Transactional
     public synchronized AjaxResult theBucketIsLoadedIntoTheLibrary(String sku, String asnNo, String palletNo, BigDecimal num) {
-
-
         // 数量
         Double qty = num.doubleValue();
 
-        // 任务号
-        String wcsNo = "";
-
-        // 判重
-        WcsTask wcsTaskQuery = new WcsTask();
-        wcsTaskQuery.setExt1(asnNo);
-        wcsTaskQuery.setExt2(palletNo);
-        wcsTaskQuery.setExt3(wcsNo);
-        WcsTask wcsTask = iWcsTaskService.selectWcsTaskByModel(wcsTaskQuery);
-        if (wcsTask != null) {
-            String locationTo = wcsTask.getLocationTo();
-            BaseLocationInfo baseLocationInfo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, Constant.WAREHOUSE_ID);
-            LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
-            locationCoordinateVo.setTaskNo(wcsTask.getTaskNo());
-            locationCoordinateVo.setLocationId(baseLocationInfo.getLocationNo());
-            locationCoordinateVo.setFloor(Integer.valueOf(baseLocationInfo.getShiftNo()));
-            locationCoordinateVo.setCol(Integer.valueOf(baseLocationInfo.getRowNo()));
-            locationCoordinateVo.setRow(Integer.valueOf(baseLocationInfo.getRowIndex()));
-            return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
-        }
-
-        // 推荐目标库位
-        BaseLocationLotattVO baseLocationLotattVO = baseLocationInfoSubService.recommendAReceiptLocation(sku);
-        if (baseLocationLotattVO == null) {
-            AjaxResult.error("没有可以推荐的目标库位!");
-        }
-
-        // 生成任务
-        String taskNo = "";
-        AjaxResult ajaxResult = wcsTaskSubService.addWcsTask(Constant.LOC_STAGE_CACHE.toString()
-                , baseLocationLotattVO.getId().toString()
-                , asnNo
-                , palletNo
-                , wcsNo);
-        if (!ajaxResult.isSuccess()) {
-            return ajaxResult;
-        }
-        taskNo = ajaxResult.get("data").toString();
-        // 入库缓存位生成库存
-        InvLotLocIdSubService.initInv(Constant.LOC_STAGE_CACHE.toString(), sku, palletNo, asnNo, taskNo, qty);
-        // 反馈
-        LocationCoordinateVo locationCoordinateVo = new LocationCoordinateVo();
-        locationCoordinateVo.setTaskNo(taskNo);
-        locationCoordinateVo.setLocationId(baseLocationLotattVO.getLocationNo());
-        locationCoordinateVo.setFloor(Integer.valueOf(baseLocationLotattVO.getShiftNo()));
-        locationCoordinateVo.setCol(Integer.valueOf(baseLocationLotattVO.getRowNo()));
-        locationCoordinateVo.setRow(Integer.valueOf(baseLocationLotattVO.getRowIndex()));
-        return AjaxResult.success("仓位获取成功!", locationCoordinateVo);
+        return insertTaskAndInvLotLocId(asnNo, palletNo, StringUtils.EMPTY, sku, qty);
     }
 
     /**

+ 2 - 4
warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml

@@ -913,10 +913,8 @@
 
     <update id="moveInvByTraceIdOut">
         update inv_lot_loc_id
-        set location_id = #{locationTo},
-            traceid     = #{traceid}
-        where location_id = #{locationFrom}
-
+        set location_id = #{locationTo}
+        where location_id = #{locationFrom} and traceid = #{traceid}
     </update>
 
     <select id="querySameTypeByPalletNo" resultMap="InvLotLocIdResult">

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

@@ -57,7 +57,7 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
         for (int i = 0; i < 1 && basLocation == null; i++) {
             for (BaseLocationLotattVO location : basLocationList) {
                 //如果库位类型不为地堆则不用判断同列占用和阻挡
-                if (location.getLocationType().equals("1")) {
+                if (location.getLocationType().equals("2")) {
                     isBlock = true;
                 }