Quellcode durchsuchen

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

# Conflicts:
#	ruoyi-admin/src/main/java/com/ruoyi/xuankuang/controller/WcsToWmsApiController.java
#	warewms-ams/src/main/java/com/ruoyi/ams/task/service/IWcsTaskService.java
#	warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java
#	warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsTaskSubService.java
#	warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsToWmsApiService.java
#	warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocAsnSubService.java
#	warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocOrderSubService.java
#	warewms-base/src/main/java/com/ruoyi/base/service/IBaseLocationInfoService.java
#	warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseLocationInfoServiceImpl.java
ChenYang vor 1 Jahr
Ursprung
Commit
c6e619312d
26 geänderte Dateien mit 367 neuen und 326 gelöschten Zeilen
  1. 10 5
      ruoyi-admin/src/main/java/com/ruoyi/xuankuang/controller/WcsToWmsApiController.java
  2. 1 1
      ruoyi-admin/src/main/resources/application.yml
  3. 40 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/WareWmsEnums.java
  4. 7 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/base/BizEnum.java
  5. 30 0
      ruoyi-common/src/main/java/com/ruoyi/common/constant/base/EnumUtils.java
  6. 4 0
      warewms-ams/pom.xml
  7. 2 2
      warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/service/IAmsTaskService.java
  8. 13 12
      warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/service/impl/AmsTaskServiceImpl.java
  9. 10 36
      warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java
  10. 2 0
      warewms-ams/src/main/java/com/ruoyi/ams/task/service/IWcsTaskService.java
  11. 10 36
      warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java
  12. 1 1
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/dto/LocationCoordDTO.java
  13. 14 0
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/form/AgvInTaskForm.java
  14. 15 0
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/form/OutTaskForm.java
  15. 6 0
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/facade/IUnpackingMachineFacade.java
  16. 95 0
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/facade/impl/UnpackingMachineFacadeImpl.java
  17. 39 117
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WcsTaskSubService.java
  18. 13 14
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocAsnSubService.java
  19. 7 2
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsToWcsApiService.java
  20. 28 50
      warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/impl/ProcessLocationServiceImpl.java
  21. 6 6
      warewms-ams/src/main/resources/mapper/ams/FlowConfigHeaderMapper.xml
  22. 2 4
      warewms-ams/src/main/resources/mapper/ams/InvLotLocIdMapper.xml
  23. 4 0
      warewms-base/src/main/java/com/ruoyi/base/domain/BaseLocationInfo.java
  24. 2 2
      warewms-base/src/main/java/com/ruoyi/base/service/IBaseLocationInfoService.java
  25. 6 32
      warewms-base/src/main/java/com/ruoyi/base/service/impl/BaseLocationInfoServiceImpl.java
  26. 0 6
      warewms-hard/src/main/java/com/ruoyi/hard/xuankang/UnpackingMachineSubClient.java

+ 10 - 5
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;
@@ -42,7 +39,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;
     }
 
     /**
@@ -54,7 +55,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;
     }
 
     /**

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -37,7 +37,7 @@ spring:
     # 国际化资源文件路径
     basename: i18n/messages
   profiles:
-    active: dev
+    active: prod
   # 文件上传
   servlet:
     multipart:

+ 40 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/WareWmsEnums.java

@@ -0,0 +1,40 @@
+package com.ruoyi.common.constant;
+
+
+import com.ruoyi.common.constant.base.BizEnum;
+
+public class WareWmsEnums {
+
+    public enum BaseSkuCategoriesEnum implements BizEnum {
+        TANK_01("1", "Na2CO3"),
+        TANK_02("2", "C5H10OS2"),
+        TANK_03("3", "(NaPO3)6"),
+        TANK_04("4", "(NH4)2SO4"),
+        TANK_05("5", "CH3CH2OCS2Na");
+
+        private String skuCode;
+
+        private String sku;
+
+        BaseSkuCategoriesEnum(String skuCode, String sku) {
+            this.skuCode = skuCode;
+            this.sku = sku;
+        }
+
+
+        public String getSkuCode() {
+            return skuCode;
+        }
+
+        public String getSku() {
+            return sku;
+        }
+
+        @Override
+        public String getCode() {
+            return getSkuCode();
+        }
+
+    }
+
+}

+ 7 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/base/BizEnum.java

@@ -0,0 +1,7 @@
+package com.ruoyi.common.constant.base;
+
+public interface BizEnum{
+
+	<T> T getCode();
+
+}

+ 30 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/base/EnumUtils.java

@@ -0,0 +1,30 @@
+package com.ruoyi.common.constant.base;
+
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjectUtil;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Arrays;
+
+
+/**
+ * @see BizEnum 该类中的枚举都可以使用改工具类,即继承自BizEnum即可
+ * @description 通过code来获取枚举对象方法,根据Code找不到对应枚举会返回Null,调用者请避免NPE
+ * @author chenyang
+ */
+@Slf4j
+public class EnumUtils {
+
+	public static <T extends BizEnum> T getEnumByCode(Object code, Class<T> enumClass){
+
+		//参数校验
+		if(ObjectUtil.isNull(code)) return null;
+		T[] enumConstants = enumClass.getEnumConstants();
+		if(ArrayUtil.isEmpty(enumConstants)){
+			log.warn("EnumUtils-getEnumByCode-enumConstants is Empty, current class: {}", enumClass.getName());
+			return null;
+		}
+		//筛选
+		return Arrays.stream(enumConstants).filter(item -> ObjectUtil.equal(code, item.getCode())).findFirst().orElse(null);
+	}
+}

+ 4 - 0
warewms-ams/pom.xml

@@ -25,6 +25,10 @@
             <artifactId>warewms-hard</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.retry</groupId>
+            <artifactId>spring-retry</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 2 - 2
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/service/IAmsTaskService.java

@@ -1,9 +1,9 @@
 package com.ruoyi.ams.agv.ndc.service;
 
-import java.util.List;
-
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
 
+import java.util.List;
+
 /**
  * ams任务列表Service接口
  *

+ 13 - 12
warewms-ams/src/main/java/com/ruoyi/ams/agv/ndc/service/impl/AmsTaskServiceImpl.java

@@ -1,27 +1,28 @@
 package com.ruoyi.ams.agv.ndc.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.ruoyi.ams.agv.ndc.mapper.AmsTaskMapper;
 import com.ruoyi.ams.agv.ndc.domain.AmsTask;
+import com.ruoyi.ams.agv.ndc.mapper.AmsTaskMapper;
 import com.ruoyi.ams.agv.ndc.service.IAmsTaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * ams任务列表Service业务层处理
- * 
+ *
  * @author andy
  * @date 2022-08-08
  */
 @Service
-public class AmsTaskServiceImpl implements IAmsTaskService 
+public class AmsTaskServiceImpl implements IAmsTaskService
 {
     @Autowired
     private AmsTaskMapper amsTaskMapper;
 
     /**
      * 查询ams任务列表
-     * 
+     *
      * @param id ams任务列表主键
      * @return ams任务列表
      */
@@ -33,7 +34,7 @@ public class AmsTaskServiceImpl implements IAmsTaskService
 
     /**
      * 查询ams任务列表列表
-     * 
+     *
      * @param amsTask ams任务列表
      * @return ams任务列表
      */
@@ -62,7 +63,7 @@ public class AmsTaskServiceImpl implements IAmsTaskService
 
     /**
      * 新增ams任务列表
-     * 
+     *
      * @param amsTask ams任务列表
      * @return 结果
      */
@@ -74,7 +75,7 @@ public class AmsTaskServiceImpl implements IAmsTaskService
 
     /**
      * 修改ams任务列表
-     * 
+     *
      * @param amsTask ams任务列表
      * @return 结果
      */
@@ -86,7 +87,7 @@ public class AmsTaskServiceImpl implements IAmsTaskService
 
     /**
      * 批量删除ams任务列表
-     * 
+     *
      * @param ids 需要删除的ams任务列表主键
      * @return 结果
      */
@@ -98,7 +99,7 @@ public class AmsTaskServiceImpl implements IAmsTaskService
 
     /**
      * 删除ams任务列表信息
-     * 
+     *
      * @param id ams任务列表主键
      * @return 结果
      */

+ 10 - 36
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/WmsDocOrderHeaderServiceImpl.java

@@ -1,14 +1,10 @@
 package com.ruoyi.ams.order.service.impl;
 
-import java.math.BigDecimal;
-import java.util.*;
-
 import com.alibaba.fastjson.JSON;
 import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.business.IBusinessService;
-import com.ruoyi.ams.config.domain.FlowConfigHeader;
 import com.ruoyi.ams.config.domain.dto.AgvCallDTO;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
 import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
@@ -23,21 +19,24 @@ import com.ruoyi.ams.inv.service.IActTransactionLogService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.order.domain.ActAllocationDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
+import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.form.*;
 import com.ruoyi.ams.order.mapper.WmsDocOrderDetailsMapper;
+import com.ruoyi.ams.order.mapper.WmsDocOrderHeaderMapper;
 import com.ruoyi.ams.order.service.IActAllocationDetailsService;
 import com.ruoyi.ams.order.service.IWmsDocOrderDetailsService;
+import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import com.ruoyi.ams.order.vo.CheckOutVO;
 import com.ruoyi.ams.order.vo.PickingListVO;
 import com.ruoyi.ams.order.vo.StockOrderVO;
-import com.ruoyi.ams.task.domain.WcsTask;
-import com.ruoyi.ams.task.service.IWcsTaskService;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.vo.CodeSkuRelationshipVO;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.service.ICodeSkuRelationshipService;
 import com.ruoyi.base.utils.IdSequenceUtils;
+import com.ruoyi.common.constant.WareWmsEnums;
+import com.ruoyi.common.constant.base.EnumUtils;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.exception.ServiceException;
@@ -45,13 +44,12 @@ import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.SnowflakeIdWorker;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Service;
-import com.ruoyi.ams.order.mapper.WmsDocOrderHeaderMapper;
-import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
-import com.ruoyi.ams.order.service.IWmsDocOrderHeaderService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.*;
+
 /**
  * 出库单头Service业务层处理
  *
@@ -153,28 +151,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
     public AjaxResult insertWmsDocOrderHeader(WmsDocOrderHeader wmsDocOrderHeader) {
         List<WmsDocOrderDetails> wmsDocOrderDetails = wmsDocOrderDetailsService.selectWmsDocOrderDetailsByOrderNo(wmsDocOrderHeader.getOrderNo());
         String soReference3 = wmsDocOrderHeader.getSoReference3();
-        String sku = "";
-        switch(soReference3) {
-            case "1":
-                sku = "Na2CO3";
-                break;
-            case "2":
-                sku = "C5H10OS2";
-                break;
-            case "3":
-                sku = "(NaPO3)6";
-                break;
-            case "4":
-                sku = "(NH4)2SO4";
-                break;
-            case "5":
-                sku = "CH3CH2OCS2Na";
-                break;
-            default:
-                sku = "未知物质";
-                break;
-        }
-        String finalSku = sku;
+        WareWmsEnums.BaseSkuCategoriesEnum baseSkuCategory = EnumUtils.getEnumByCode(soReference3, WareWmsEnums.BaseSkuCategoriesEnum.class);
+        String finalSku = baseSkuCategory == null ? "未知物质" : baseSkuCategory.getSku();
         wmsDocOrderDetails.forEach(item ->{
             if(!finalSku.equals(item.getSku())){
                 throw new RuntimeException("物料不符!");
@@ -185,10 +163,6 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
         wmsDocOrderHeader.setOrderNo(orderNo);
         wmsDocOrderHeader.setEdiSendFlag("N");
         wmsDocOrderHeaderMapper.insertWmsDocOrderHeader(wmsDocOrderHeader);
-        /*List<WmsDocOrderDetails> orderDetails = wmsDocOrderHeader.getWmsDocOrderDetailsList();
-        for (WmsDocOrderDetails de : orderDetails) {
-            wmsDocOrderHeaderService.insertWmsDocOrderDetails(de);
-        }*/
         return AjaxResult.success("新增成功!",orderNo);
     }
 

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

@@ -7,6 +7,8 @@ import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
 import com.ruoyi.base.constant.Constant;
 import com.ruoyi.common.core.domain.AjaxResult;
 
+import java.util.List;
+
 /**
  * AGV任务Service接口
  *

+ 10 - 36
warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java

@@ -10,6 +10,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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;
@@ -19,7 +20,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;
@@ -37,6 +41,10 @@ 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业务层处理
  *
@@ -454,6 +462,8 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
                 }
                 throw new RuntimeException();
             }
+        } else {
+
         }
         wcsTask.setState(state.longValue());
         wcsTask.setUpdateDate(new Date());
@@ -579,42 +589,6 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
         return AjaxResult.success();
     }
 
-    @Override
-    public Boolean updateTaskStatus(String taskNo, Integer sourceStatus, Integer targetStatus) {
-        LambdaUpdateWrapper<WcsTask> updateWrapper = Wrappers.<WcsTask>lambdaUpdate().set(WcsTask::getState, targetStatus)
-                .eq(WcsTask::getTaskNo, taskNo).eq(WcsTask::getState, sourceStatus);
-        return wcsTaskMapper.update(null, updateWrapper) == 1;
-    }
-
-
-
-    @Override
-    public WcsTask selectWcsTask(String asnNo, String palletNo, Constant.TASK_STS taskStatusEnum) {
-        WcsTask wcsTask = new WcsTask();
-        wcsTask.setExt1(asnNo);
-        wcsTask.setExt2(palletNo);
-        wcsTask.setState(Long.parseLong(String.valueOf(taskStatusEnum)));
-        List<WcsTask> wcsTaskList = wcsTaskMapper.selectWcsTaskList(wcsTask);
-        return CollectionUtil.isNotEmpty(wcsTaskList) ? wcsTaskList.get(0) : new WcsTask();
-    }
-
-
-    /**
-     * 查询AGV任务
-     *
-     * @param wcsTask AGV任务
-     * @return AGV任务
-     */
-    @Override
-    public WcsTask selectWcsTaskByModel(WcsTask wcsTask) {
-        List<WcsTask> list = wcsTaskMapper.selectWcsTaskList(wcsTask);
-        if (list != null && list.size() > 0) {
-            return list.get(0);
-        } else {
-            return null;
-        }
-    }
-
     /**
      * 修改库存出入库标记
      *

+ 1 - 1
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/domain/dto/LocationCoordDTO.java

@@ -10,7 +10,6 @@ import lombok.Data;
 @Data
 public class LocationCoordDTO{
 
-
     private String taskNo;
 
     private String locationId;
@@ -20,4 +19,5 @@ public class LocationCoordDTO{
     private Integer col;
 
     private Integer floor;
+    private String wcsLocation;
 }

+ 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;
+    }
+
+
 }

+ 6 - 0
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/facade/IUnpackingMachineFacade.java

@@ -0,0 +1,6 @@
+package com.ruoyi.ams.xuankuang.facade;
+
+public interface IUnpackingMachineFacade {
+
+    Boolean unpackingMachineOpen(String lineId, boolean[] booleans);
+}

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

@@ -0,0 +1,95 @@
+package com.ruoyi.ams.xuankuang.facade.impl;
+
+import com.ruoyi.ams.xuankuang.domain.form.CallbackBbmForm;
+import com.ruoyi.ams.xuankuang.facade.IUnpackingMachineFacade;
+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
+    private StirringTankClient stirringTankClient;
+
+    @Autowired
+    private UnpackingMachineSubClient unpackingMachineSubClient;
+
+    @Autowired
+    private WmsToWcsApiService wmsToWcsApiService;
+
+    @Override
+    public Boolean unpackingMachineOpen(String lineId, boolean[] booleans){
+        verifyLineOpenStatus(lineId, booleans);
+        unpackingMachineSubClientWrite(lineId);
+        wmsCallback(lineId);
+        //写仓库收到请求已经开始碳酸钠注药
+        stirringTankClientWrite(lineId);
+        return Boolean.TRUE;
+    }
+
+    private Boolean verifyLineOpenStatus(String lineId, boolean[] booleans) {
+        switch (lineId) {
+            case "1":
+                return booleans[15];
+            case "2":
+                return booleans[14];
+            case "3":
+                return booleans[12];
+            case "4":
+                return booleans[11];
+            case "5":
+                return booleans[10];
+            default:
+                throw new BaseException("拆包机验证失败");
+        }
+    }
+
+    private Boolean unpackingMachineSubClientWrite(String lineId){
+        switch (lineId) {
+            case "1":
+                return unpackingMachineSubClient.writeV140_5();
+            case "2":
+                return unpackingMachineSubClient.writeV140_6();
+            case "3":
+                return unpackingMachineSubClient.writeV140_7();
+            case "4":
+                return unpackingMachineSubClient.writeV141_0();
+            case "5":
+                return unpackingMachineSubClient.writeV141_1();
+            default:
+                throw new BaseException("拆包机启动失败");
+        }
+    }
+
+    private Boolean wmsCallback(String lineId){
+        CallbackBbmForm callbackBbmForm = new CallbackBbmForm();
+        callbackBbmForm.setBbmId(lineId);
+        return wmsToWcsApiService.wmsCallbackBbmTask(callbackBbmForm).isSuccess();
+    }
+
+    private Boolean stirringTankClientWrite(String lineId){
+        switch (lineId) {
+            case "1":
+                return stirringTankClient.writeTank03();
+            case "2":
+                return stirringTankClient.writeTank03_1();
+            case "3":
+                return stirringTankClient.writeTank03_2();
+            case "4":
+                return stirringTankClient.writeTank03_4();
+            case "5":
+                return stirringTankClient.writeTank03_5();
+            default:
+                throw new BaseException("注药失败");
+        }
+    }
+
+
+
+}

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

@@ -1,6 +1,6 @@
 package com.ruoyi.ams.xuankuang.service;
 
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+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;
@@ -20,6 +20,7 @@ import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.exception.base.BaseException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -104,6 +105,7 @@ public class WcsTaskSubService {
         BaseLocationInfo baseLocationInfoFrom = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationFrom, 1l);
         BaseLocationInfo baseLocationInfoTo = iBaseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationTo, 1l);
 
+        String taskNo = generateTaskNo();
         WcsTask wcsTask = new WcsTask();
         wcsTask.setTaskNo(taskNo);
         wcsTask.setState(state);
@@ -140,36 +142,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);
     }
 
     /**
@@ -215,8 +188,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) {
@@ -229,64 +202,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;
@@ -314,9 +259,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());
@@ -430,27 +373,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);
@@ -497,29 +420,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();
+        }
+    }
+
     /**
      * 生成唯一任务号
      *

+ 13 - 14
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/WmsDocAsnSubService.java

@@ -1,38 +1,39 @@
 package com.ruoyi.ams.xuankuang.service;
 
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.google.common.collect.Lists;
 import com.ruoyi.ams.asn.domain.WmsDocAsnDetails;
 import com.ruoyi.ams.asn.domain.WmsDocAsnHeader;
 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.task.domain.WcsTask;
-import com.ruoyi.ams.task.service.IWcsTaskService;
-import com.ruoyi.ams.xuankuang.domain.dto.LocationCoordDTO;
+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;
 import com.ruoyi.ams.xuankuang.domain.vo.WcsResponseVo;
 import com.ruoyi.base.constant.Constant;
 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 javafx.concurrent.Task;
 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.util.Assert;
+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;
 
 /**
  * 入库业务
@@ -64,8 +65,7 @@ public class WmsDocAsnSubService {
     @Autowired
     private WmsDocAsnHeaderMapper wmsDocAsnHeaderMapper;
     @Autowired
-    private IWcsTaskService iWcsTaskService;
-
+    private WmsDocAsnDetailsMapper wmsDocAsnDetailsMapper;
 
 
     /**
@@ -126,8 +126,7 @@ public class WmsDocAsnSubService {
 
     /**
      * agv入库任务下发
-     * @param palletNo 托盘号
-     * @param quantity 数量
+     * @param asnNo
      * @return
      */
     @Transactional

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

@@ -4,11 +4,11 @@ import com.alibaba.fastjson.JSON;
 import com.ruoyi.ams.xuankuang.domain.form.*;
 import com.ruoyi.ams.xuankuang.domain.vo.WcsResponseVo;
 import com.ruoyi.base.constant.Constant;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.enums.HttpMethod;
 import com.ruoyi.common.utils.http.HttpRequest;
 import com.ruoyi.common.utils.http.HttpUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.retry.annotation.Backoff;
+import org.springframework.retry.annotation.Retryable;
 import org.springframework.stereotype.Service;
 
 /**
@@ -65,6 +65,11 @@ public class WmsToWcsApiService {
      * @param callbackBbmForm
      * @return
      */
+    @Retryable(
+            maxAttempts = 4, //指定重试次数
+            //调用失败后,等待5s重试,后面重试间隔依次变为原来的2倍
+            backoff = @Backoff(delay = 5000, multiplier = 2)
+    )
     public WcsResponseVo wmsCallbackBbmTask(CallbackBbmForm callbackBbmForm) {
         String json = JSON.toJSONString(callbackBbmForm);
         String r = "";

+ 28 - 50
warewms-ams/src/main/java/com/ruoyi/ams/xuankuang/service/impl/ProcessLocationServiceImpl.java

@@ -4,12 +4,12 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.comparator.CompareUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.ams.inv.domain.InvLotLocId;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
 import com.ruoyi.ams.xuankuang.service.ExcelLocLotModel;
 import com.ruoyi.ams.xuankuang.service.ProcessLocationService;
+import com.ruoyi.base.constant.Constant;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.BaseSku;
 import com.ruoyi.base.service.IBaseLocationInfoService;
@@ -49,11 +49,6 @@ public class ProcessLocationServiceImpl implements ProcessLocationService {
     @Autowired
     private IBaseSkuService baseSkuService;
 
-
-    //仓库ID的默认值
-    private static final Long WAREHOUSE_ID = 1L;
-
-
     /**
      * 选矿项目调整库存专用脚本
      *
@@ -85,10 +80,8 @@ public class ProcessLocationServiceImpl implements ProcessLocationService {
             }catch (RuntimeException ex){
                 log.warn("ex is {}", ex);
                 errorLocLotList.add(locLotModel);
-                continue;
             }
         }
-        System.err.println(JSONObject.toJSONString(errorLocLotList));
     }
 
 
@@ -118,13 +111,13 @@ public class ProcessLocationServiceImpl implements ProcessLocationService {
      */
     public void redressInventory(String locationNo, String bindSku, String palletNo, BigDecimal quantity, Map<String, String> skuTypeMapping) {
         //1.通过库位号获得库位的ID
-        BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationNo, WAREHOUSE_ID);
+        BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(locationNo, Constant.WAREHOUSE_ID);
         if (ObjectUtil.isNull(baseLocationInfo)) return;
         if (StringUtils.isBlank(bindSku) && ObjectUtil.isNotNull(quantity)) return;
 
 
         //2.1 如果当前库位是空的,或者库位数量是空的,则删除inv_lot_loc_id中的库存数据并重置库位数据
-        if((ObjectUtil.isNull(quantity) || CompareUtil.compare(quantity, BigDecimal.ZERO)<=0)){
+        if (ObjectUtil.isNull(quantity) || CompareUtil.compare(quantity, BigDecimal.ZERO) <= 0) {
             //生成新的批次记录
             invLotAttService.insertInvLotAtt(bindSku, palletNo);
             invLotLocIdService.deleteInvLotLocList(baseLocationInfo.getId());
@@ -132,35 +125,30 @@ public class ProcessLocationServiceImpl implements ProcessLocationService {
             return;
         }
 
-        if(StringUtils.isNotBlank(bindSku)
-                && ObjectUtil.isNotNull(quantity)
-                && CompareUtil.compare(quantity, BigDecimal.ZERO) > 0){
-            //查出原先的库存情况,如果当前库存SKU不符合,则生成新的批次记录
-            List<InvLotLocId> invLotLocList = invLotLocIdService.getInvLotLocList(baseLocationInfo.getId());
-            if(CollectionUtil.isNotEmpty(invLotLocList)){
-                //此时数据是错的都要重新生成库存
-                List<String> skuList = invLotLocList.stream().map(item -> item.getSku()).collect(Collectors.toList());
-                if(CollectionUtil.isEmpty(skuList) || skuList.size() > 1 || !StringUtils.equals(skuList.get(0), bindSku)){
-                    //生成新的批次记录
-                    String lotnum = invLotAttService.insertInvLotAtt(bindSku, palletNo);
-                    //删除原先的库存记录`,生成新的库存记录
-                    invLotLocIdService.deleteInvLotLocList(baseLocationInfo.getId());
-                    invLotLocIdService.insertInvLotLocId(baseLocationInfo.getId(), lotnum, bindSku, quantity);
-                    //重置库位数据
-                    reSetLocationInfo(baseLocationInfo, bindSku, Constants.NO, skuTypeMapping);
-                    return;
-                } else {
-                    //此时只有数量是错的,那么update一下数量就好
-                    InvLotLocId invLotLocId = invLotLocList.get(0);
-                    invLotLocId.setQty(quantity);
-                    //TODO  其他关于数量的字段要改嘛
-                    invLotLocId.setQtyEach(quantity);
-                    invLotLocIdService.updateInvLotLocId(invLotLocId);
-                    //重置库存数据
-                    reSetLocationInfo(baseLocationInfo, bindSku, Constants.NO, skuTypeMapping);
-                    return;
-                }
-            }
+        //查出原先的库存情况,如果当前库存SKU不符合,则生成新的批次记录
+        List<InvLotLocId> invLotLocList = invLotLocIdService.getInvLotLocList(baseLocationInfo.getId());
+        if (CollectionUtil.isEmpty(invLotLocList)) return;
+        //此时数据是错的都要重新生成库存
+        List<String> skuList = invLotLocList.stream().map(item -> item.getSku()).collect(Collectors.toList());
+        if (CollectionUtil.isEmpty(skuList) || skuList.size() > 1 || !StringUtils.equals(skuList.get(0), bindSku)) {
+            //生成新的批次记录
+            String lotnum = invLotAttService.insertInvLotAtt(bindSku, palletNo);
+            //删除原先的库存记录`,生成新的库存记录
+            invLotLocIdService.deleteInvLotLocList(baseLocationInfo.getId());
+            invLotLocIdService.insertInvLotLocId(baseLocationInfo.getId(), lotnum, bindSku, quantity);
+            //重置库位数据
+            reSetLocationInfo(baseLocationInfo, bindSku, Constants.NO, skuTypeMapping);
+            return;
+        } else {
+            //此时只有数量是错的,那么update一下数量就好
+            InvLotLocId invLotLocId = invLotLocList.get(0);
+            invLotLocId.setQty(quantity);
+            //TODO  其他关于数量的字段要改嘛
+            invLotLocId.setQtyEach(quantity);
+            invLotLocIdService.updateInvLotLocId(invLotLocId);
+            //重置库存数据
+            reSetLocationInfo(baseLocationInfo, bindSku, Constants.NO, skuTypeMapping);
+            return;
         }
     }
 
@@ -177,21 +165,11 @@ public class ProcessLocationServiceImpl implements ProcessLocationService {
         baseLocationInfo.setIsEmpty(isEmpty);
         baseLocationInfo.setStockStatus(FREE);
         baseLocationInfo.setUserdefine10(StringUtils.isNotBlank(bindSku) ? bindSku : null);
-        baseLocationInfo.setBindSku(StringUtils.isNotBlank(bindSku) ? skuTypeMapping.get(bindSku) : null );
+        baseLocationInfo.setBindSku(StringUtils.isNotBlank(bindSku) ? skuTypeMapping.get(bindSku) : null);
         return baseLocationInfoService.reSetLocationInfo(baseLocationInfo);
     }
 
 
-
-    public static void main(String[] args) {
-//        System.out.println(handleLocationNo("A\t-02\t-08"));
-//        System.out.println(handleLocationNo("  A-02-08"));
-//        System.out.println(handleLocationNo("  -02-08"));
-//        System.out.println(handleLocationNo("Out-02-cache"));
-//        System.out.w's'x'z's'x'x'z(handleLocationNo("STAGE01"));
-    }
-
-
     private static String handleLocationNo(String locationNo) {
         if (StringUtils.isBlank(locationNo)) return StringUtil.EMPTY_STRING;
         Pattern pattern = Pattern.compile("\\s*|\t|\r|\n");

+ 6 - 6
warewms-ams/src/main/resources/mapper/ams/FlowConfigHeaderMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.ams.config.mapper.FlowConfigHeaderMapper">
-    
+
     <resultMap type="FlowConfigHeader" id="FlowConfigHeaderResult">
         <result property="id"    column="id"    />
         <result property="flowName"    column="flow_name"    />
@@ -118,7 +118,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="flowName != null  and flowName != ''"> and flow_name = #{flowName}</if>
         </where>
     </select>
-    
+
     <select id="selectFlowConfigHeaderById" parameterType="Long" resultMap="FlowConfigHeaderFlowConfigDetailsResult">
         select a.id, a.flow_name,a.flow_type, a.sku_type, a.sku_type_flag, a.qty, a.qty_flag, a.weight, a.weight_flag, a.supplier, a.supplier_flag, a.location_from,a.location_from_flag, a.location_from_device, a.location_to,a.location_to_flag, a.location_to_device, a.create_by, a.create_time, a.update_by, a.update_time, a.remark,
         a.qty_range,a.weight_range,a.supplier_range,b.id as sub_id, b.header_id as sub_header_id, b.lotatt_id as sub_lotatt_id,cf.lotatt_name as sub_lotatt_name, b.lotatt_flag as sub_lotatt_flag, b.create_by as sub_create_by, b.create_time as sub_create_time, b.update_by as sub_update_by, b.update_time as sub_update_time, b.remark as sub_remark,b.default_value as sub_default_value,
@@ -128,7 +128,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         left join lotatt_config cf on b.lotatt_id = cf.lotatt_id
         where a.id = #{id}
     </select>
-        
+
     <insert id="insertFlowConfigHeader" parameterType="FlowConfigHeader" useGeneratedKeys="true" keyProperty="id">
         insert into flow_config_header
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -230,14 +230,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteFlowConfigHeaderByIds" parameterType="String">
-        delete from flow_config_header where id in 
+        delete from flow_config_header where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-    
+
     <delete id="deleteFlowConfigDetailsByHeaderIds" parameterType="String">
-        delete from flow_config_details where header_id in 
+        delete from flow_config_details where header_id in
         <foreach item="headerId" collection="array" open="(" separator="," close=")">
             #{headerId}
         </foreach>

+ 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">

+ 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;

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

@@ -32,10 +32,10 @@ public interface IBaseLocationInfoService {
     /**
      * 出库校验同列任务任务状态和阻挡
      *
-     * @param basLocationList
+     * @param baseLocationList
      * @return
      */
-    BaseLocationLotattDTO checkTheSameColumnLocation1(BaseLocationLotattDTO baseLocationLotattVO, List<BaseLocationLotattDTO> basLocationList);
+    BaseLocationLotattDTO checkTheSameColumnLocation1(BaseLocationLotattDTO baseLocationLotattVO, List<BaseLocationLotattDTO> baseLocationList);
 
     /**
      * 查询库位信息

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

@@ -1,9 +1,6 @@
 package com.ruoyi.base.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.base.constant.Constant;
@@ -15,24 +12,20 @@ import com.ruoyi.base.mapper.BaseLocationInfoMapper;
 import com.ruoyi.base.mapper.BaseLocationZoneMapper;
 import com.ruoyi.base.service.IBaseLocationInfoService;
 import com.ruoyi.base.utils.CommonUtils;
-import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.web.PortResolverImpl;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.function.LongFunction;
 import java.util.stream.Collectors;
 
 /**
@@ -67,7 +60,7 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
         for (int i = 0; i < 1 && basLocation == null; i++) {
             for (BaseLocationLotattDTO location : basLocationList) {
                 //如果库位类型不为地堆则不用判断同列占用和阻挡
-                if (location.getLocationType().equals("1")) {
+                if (location.getLocationType().equals("2")) {
                     isBlock = true;
                 }
 
@@ -93,10 +86,11 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
 
     /**
      * @param baseLocationLotattVO 要判断的库位
-     * @param basLocationList      满足要求的库位列表
      * @return
      */
-    public BaseLocationLotattDTO checkTheSameColumnLocation1(BaseLocationLotattDTO baseLocationLotattVO, List<BaseLocationLotattDTO> basLocationList) {
+    public BaseLocationLotattDTO checkTheSameColumnLocation1(BaseLocationLotattDTO baseLocationLotattVO, List<BaseLocationLotattDTO> baseLocationList) {
+
+        if (CollectionUtil.isEmpty(baseLocationList)) return null;
 
         //查同列所有库位
         List<BaseLocationLotattDTO> baseLocationInfos = baseLocationInfoMapper.queryByListInUserdeFine1(baseLocationLotattVO);
@@ -113,27 +107,12 @@ 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;
 
+        if (inStockByLocs.stream().noneMatch(item -> baseLocationList.stream().map(BaseLocationInfo::getId).collect(Collectors.toList()).contains(item.getId()))) return null;
                 boolean isSuit = false;
                 for (BaseLocationLotattDTO vo : basLocationList) {
 
-                    if (inStockByLocs.get(i).getId().equals(vo.getId())) {
-
-                        isSuit = true;
-                    }
-                }
-
-                isSuccess = isSuit;
-                if (!isSuccess) return null;
-            }
-        }
         return baseLocationLotattVO;
     }
 
@@ -293,11 +272,6 @@ public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
         return baseLocationInfoMapper.selectSortedLocationListByZoneId(query);
     }
 
-
-
-
-
-
     @Override
     public List<BaseLocationLotattListVO> selectSortedLocatinListByZoneId(List<Long> locationId, Long warehouseId, Map<String, String> lotatt, String sku) {
         List<BaseLocationLotattListVO> result = new ArrayList<>();

+ 0 - 6
warewms-hard/src/main/java/com/ruoyi/hard/xuankang/UnpackingMachineSubClient.java

@@ -1,15 +1,9 @@
 package com.ruoyi.hard.xuankang;
 
-import com.jwk.spring.boot.autoconfigure.ModbusTcpMasterTemplate;
-import com.jwk.spring.boot.constant.DATA_TYPE_WRAPPER;
-import com.jwk.spring.boot.modbus4j.ModbusMasterUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
-import static com.ruoyi.hard.xuankang.UnpackingMachineClient.REGISTER_CODE.*;
-
 
 /**
  * 拆包机通讯客户端