Ver Fonte

测试修改:
1.PDA上架回库代码重构
2.光栅业务bug修改
3.PDA托盘出库缓存任务bug
4.修改绑定托盘不传入起始库位

k há 2 anos atrás
pai
commit
e1a0f66554

+ 46 - 103
ruoyi-admin/src/main/java/com/ruoyi/web/controller/warewms/pda/PdaController.java

@@ -192,7 +192,7 @@ public class PdaController {
      * @param lineCallForm
      * @return
      */
-    @Transactional
+//    @Transactional
     @PostMapping("/lineCall/pulling")
     public AjaxResult pulling(@RequestBody LineCallForm lineCallForm) {
         //查询所属流程
@@ -202,14 +202,13 @@ public class PdaController {
             return AjaxResult.error("指令查询不到对应的流程");
         }
 
-        Map<String, AgvCallDTO> map = new HashMap<>();
-        List<AgvCallDTO> list = new ArrayList<>();
-        for (LineCallListFrom lform : lineCallForm.getLineCallList()) {
-            BaseLocationInfo baseLocationInfoFrom = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationFrom()
-                    , Constant.WAREHOUSE_ID);
-            if (baseLocationInfoFrom == null) {
-                return AjaxResult.error("起始库位不存在!");
-            }
+        LineCallListFrom lform = lineCallForm.getLineCallList().get(0);
+        // 校验
+        BaseLocationInfo baseLocationInfoFrom = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationFrom()
+                , Constant.WAREHOUSE_ID);
+        if (baseLocationInfoFrom == null) {
+            return AjaxResult.error("起始库位不存在!");
+        }
             if (!baseLocationInfoFrom.getStockStatus().equals(Constant.STOCK_STATUS.STOCK00.getValue())) {
                 return AjaxResult.error("起始库位不为空闲状态!");
             }
@@ -217,105 +216,49 @@ public class PdaController {
                     && !baseLocationInfoFrom.getIsEmpty().equals(Constant.IS_YES.Y.name())) {
                 return AjaxResult.error("起始库位已经有货!");
             }
-            if (StringUtils.isNotEmpty(lform.getLocationTo())) {
-                BaseLocationInfo baseLocationInfoTo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationTo()
-                        , Constant.WAREHOUSE_ID);
-                if (baseLocationInfoTo == null) {
-                    return AjaxResult.error("目标库位不存在!");
-                }
-                if (!baseLocationInfoTo.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue())) {
-                    return AjaxResult.error("目标库位需要为仓储区!");
-                }
-            }
-            boolean superHighMark = false;
-            if (baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_IN.getValue())
-                    || baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_RE.getValue())) {
-                // 入库回库检测光栅高度
-                String gratingNo = Constant.GRATING_AND_LOCATION_MAPPING.getByLocation(lform.getLocationFrom()).getValue();
-                boolean isSuperHigh = iSysConfigService.checkGratingIsSuperHigh(gratingNo);
-                // 永湖仓储区一层高度为1600,二层有4个点为1600,其他为2100
-                // 入库和回库的时候,入库位IN-02-01(200)和回库位RET-01-01(500)没超高入库到1600的库位,超高了入库到2100
-                // 入库和回库的时候,入库位IN-01-01和回库位RET-02-01入库到2100,超高不可入库
-                if (isSuperHigh
-                        && !baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
-                        && !baseLocationInfoFrom.getLocationNo().equals("RET-01-01")) {
-                    return AjaxResult.error("光栅监测到货物超高!请人工处理!");
-                } else if (isSuperHigh &&
-                        (baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
-                                || baseLocationInfoFrom.getLocationNo().equals("RET-01-01"))) {
-                    superHighMark = true;
-                }
-            }
-
-            String asnNo = "";
-            //排序规则 普通入库回库先放在col_no小的位置 - 1,备货入库回库放在col_no大的位置 - 2
-            int orderRules = 1;
-            //入库时绑定托盘
-            if (flowConfigHeaderVO.getFlowType().equals("ASN")) {
-                PaForm paForm = new PaForm();
-                paForm.setPalletNo(lform.getPalletNo());
-                if (lineCallForm.getFlowId().intValue() == 5) {
-                    paForm.setLocationFrom(Constant.LOC_STAGE_CACHE.toString());
-                } else {
-                    paForm.setLocationFrom(Constant.LOC_SORTATION_CACHE.toString());
-                }
-                paForm.setLocationTo(lform.getLocationFrom());
-                paForm.setFlowId(lineCallForm.getFlowId().intValue());
-                paForm.setIsFull(lform.getIsFull());
-                AjaxResult ajaxResult = wmsDocAsnHeaderService.doPa(paForm);
-                if (!ajaxResult.isSuccess()) {
-                    return ajaxResult;
-                }
-                asnNo = (String) ajaxResult.get("data");
-                orderRules = (int) ajaxResult.get("orderRules");
-            }
-
-
-            if (flowConfigHeaderVO.getFlowType().equals("ASN") && org.apache.commons.lang3.StringUtils.isEmpty(lform.getLocationFrom())) {
-                return AjaxResult.error("入库任务必须选择起始库位");
+        if (StringUtils.isNotEmpty(lform.getLocationTo())) {
+            BaseLocationInfo baseLocationInfoTo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(lform.getLocationTo()
+                    , Constant.WAREHOUSE_ID);
+            if (baseLocationInfoTo == null) {
+                return AjaxResult.error("目标库位不存在!");
             }
-            if (flowConfigHeaderVO.getFlowType().equals("SO") && (lform.getQty() == null || lform.getQty().longValue() == 0)) {
-                return AjaxResult.error("出库任务必须选择数量");
+            if (!baseLocationInfoTo.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue())) {
+                return AjaxResult.error("目标库位需要为仓储区!");
             }
-            AgvCallDTO agvCallDTO;
-            if (map.containsKey(lform.getLocationFrom() + "-" + lform.getLocationTo())) {
-                agvCallDTO = map.get(lform.getLocationFrom() + "-" + lform.getLocationTo());
-            } else {
-                agvCallDTO = new AgvCallDTO();
-                agvCallDTO.setWarehouseId(1L);//没用暂时写死
-                agvCallDTO.setLocationFrom(lform.getLocationFrom());
-                agvCallDTO.setLocationTo(lform.getLocationTo());
-                agvCallDTO.setId(lform.getId());
-                agvCallDTO.setPalletNo(lform.getPalletNo());
-                agvCallDTO.setTaskType(lineCallForm.getFlowId().toString());
-                agvCallDTO.setOrderNo(asnNo); // 入库单号
-                agvCallDTO.setOrderRules(orderRules);
-            }
-            AgvCallItemDTO agvCallItemDTO = new AgvCallItemDTO();
-            agvCallItemDTO.setWarehouseId(1L);
-            agvCallItemDTO.setSku(lform.getSku());
-            agvCallItemDTO.setQty(lform.getQty());
-            agvCallItemDTO.setSupplier(lform.getSupplier());
-            agvCallItemDTO.setWeight(lform.getWeight());
-            agvCallItemDTO.setLocationFrom(lform.getLocationFrom());
-            agvCallItemDTO.setLocationTo(lform.getLocationTo());
-            agvCallItemDTO.setSuperHigh(superHighMark);
-            agvCallDTO.getAgvCallItemDTOList().add(agvCallItemDTO);
-            LotattDTO lotattDTO = new LotattDTO();
-            List<LineCallDetailsForm> lineCallDetailsForms = lform.getLineCallDetailsFormList();
-            if (lineCallDetailsForms != null && lineCallDetailsForms.size() > 0) {
-                for (LineCallDetailsForm detailsForm : lineCallDetailsForms) {
-                    lotattDTO.setAttr(detailsForm.getLotattId(), detailsForm.getLotattValue());
-                }
+        }
+        // 光栅检测
+        boolean superHighMark = false;
+        if (baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_IN.getValue())
+                || baseLocationInfoFrom.getZoneId().equals(Constant.ZONE_TYPE.ZONE_RE.getValue())) {
+            // 入库回库检测光栅高度
+            String gratingNo = Constant.GRATING_AND_LOCATION_MAPPING.getByLocation(lform.getLocationFrom()).getValue();
+            boolean isSuperHigh = iSysConfigService.checkGratingIsSuperHigh(gratingNo);
+            // 永湖仓储区一层高度为1600,二层有4个点为1600,其他为2100
+            // 入库和回库的时候,入库位IN-02-01(200)和回库位RET-01-01(500)没超高入库到1600的库位,超高了入库到2100
+            // 入库和回库的时候,入库位IN-01-01和回库位RET-02-01入库到2100,超高不可入库
+            if (isSuperHigh
+                    && !baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
+                    && !baseLocationInfoFrom.getLocationNo().equals("RET-01-01")) {
+                return AjaxResult.error("光栅监测到货物超高!请人工处理!");
+            } else if (isSuperHigh &&
+                    (baseLocationInfoFrom.getLocationNo().equals("IN-02-01")
+                            || baseLocationInfoFrom.getLocationNo().equals("RET-01-01"))) {
+                superHighMark = true;
             }
-            agvCallItemDTO.setLotattDTO(lotattDTO);
-            map.put(lform.getLocationFrom() + "-" + lform.getLocationTo(), agvCallDTO);
         }
-        for (Map.Entry<String, AgvCallDTO> entry : map.entrySet()) {
-            AgvCallDTO mapValue = entry.getValue();
-            list.add(mapValue);
+
+        //上架+下发任务
+        PaForm paForm = new PaForm();
+        paForm.setPalletNo(lform.getPalletNo());
+        if (lineCallForm.getFlowId().intValue() == 5) {
+            paForm.setLocationFrom(Constant.LOC_STAGE_CACHE.toString());
+        } else {
+            paForm.setLocationFrom(Constant.LOC_SORTATION_CACHE.toString());
         }
-        return businessService.agvCall(flowConfigHeaderVO, list);
+        paForm.setLocationTo(lform.getLocationFrom());
+        paForm.setFlowId(lineCallForm.getFlowId().intValue());
+        paForm.setIsFull(lform.getIsFull());
+        return wmsDocAsnHeaderService.doPaAndTask(paForm, flowConfigHeaderVO, lform, lineCallForm, superHighMark);
     }
 
     /**

+ 7 - 3
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java

@@ -15,6 +15,8 @@ import com.ruoyi.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
 import java.util.Collection;
@@ -233,12 +235,14 @@ public class SysConfigServiceImpl implements ISysConfigService {
         SysConfig sysConfigState = null;
         int checkNum = 0; // 查询次数
         for (; ; ) {
-            if (checkNum > 5) {
+            if (checkNum > 10) {
                 break;
             }
             ThreadUtil.sleep(500);
-            sysConfigQuery.setConfigValue("N"); // plc会写成功会置为N
-            sysConfigState = this.selectByConfigKey(sysConfigQuery);
+            SysConfig sysConfigQuery01 = new SysConfig();
+            sysConfigQuery01.setConfigId(sysConfig.getConfigId());
+            sysConfigQuery01.setConfigValue("N"); // plc会写成功会置为N
+            sysConfigState = this.selectByConfigKey(sysConfigQuery01);
             if (sysConfigState != null) {
                 break;
             }

+ 4 - 0
ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml

@@ -41,6 +41,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectConfigList" parameterType="SysConfig" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
         <where>
+            <if test="configId != null and configId != ''">
+                AND config_id = #{configId}
+            </if>
 			<if test="configName != null and configName != ''">
 				AND config_name like concat('%', #{configName}, '%')
 			</if>
@@ -90,6 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <update id="updateConfig" parameterType="SysConfig">
         update sys_config
         <set>
+            <if test="configId != null and configId != ''">config_id = #{configId},</if>
             <if test="configName != null and configName != ''">config_name = #{configName},</if>
             <if test="configKey != null and configKey != ''">config_key = #{configKey},</if>
             <if test="configValue != null and configValue != ''">config_value = #{configValue},</if>

+ 14 - 0
warewms-ams/src/main/java/com/ruoyi/ams/asn/service/IWmsDocAsnHeaderService.java

@@ -8,7 +8,10 @@ import com.ruoyi.ams.asn.form.PaForm;
 import com.ruoyi.ams.asn.form.StockForm;
 import com.ruoyi.ams.asn.form.UnlockForm;
 import com.ruoyi.ams.asn.vo.SearchStockVO;
+import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
 import com.ruoyi.ams.erp.domain.ErpOrderList;
+import com.ruoyi.ams.lineCall.domain.form.LineCallForm;
+import com.ruoyi.ams.lineCall.domain.form.LineCallListFrom;
 import com.ruoyi.base.domain.vo.CodeSkuRelationshipVO;
 import com.ruoyi.base.form.SnCheckForm;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -134,6 +137,16 @@ public interface IWmsDocAsnHeaderService {
          */
     CodeSkuRelationshipVO searchSn(SnCheckForm snCheckForm);
 
+
+    /**
+     * 上架和下发任务
+     *
+     * @param paForm
+     * @return
+     */
+    AjaxResult doPaAndTask(PaForm paForm, FlowConfigHeaderVO flowConfigHeaderVO, LineCallListFrom lform, LineCallForm lineCallForm
+            , boolean superHighMark);
+
     /**
      * 上架
      *
@@ -142,6 +155,7 @@ public interface IWmsDocAsnHeaderService {
      */
     AjaxResult doPa(PaForm paForm);
 
+
     /**
      * 解绑物料
      *

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

@@ -12,6 +12,7 @@ import com.ruoyi.ams.box.domain.WmsBoxInfo;
 import com.ruoyi.ams.box.service.IWmsBoxInfoService;
 import com.ruoyi.ams.business.IBusinessService;
 import com.ruoyi.ams.config.domain.dto.LotattDTO;
+import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
 import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
 import com.ruoyi.ams.erp.domain.ErpBarcodes;
 import com.ruoyi.ams.erp.domain.ErpOrderList;
@@ -25,6 +26,8 @@ import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IActTransactionLogService;
 import com.ruoyi.ams.inv.service.IInvLotAttService;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.ams.lineCall.domain.form.LineCallForm;
+import com.ruoyi.ams.lineCall.domain.form.LineCallListFrom;
 import com.ruoyi.ams.order.domain.WmsDocOrderDetails;
 import com.ruoyi.ams.order.domain.WmsDocOrderHeader;
 import com.ruoyi.ams.order.dto.WmsDocOrderDTO;
@@ -524,6 +527,23 @@ public class WmsDocAsnHeaderServiceImpl implements IWmsDocAsnHeaderService {
         return codeSkuRelationshipVO;
     }
 
+    @Transactional
+    @Override
+    public AjaxResult doPaAndTask(PaForm paForm, FlowConfigHeaderVO flowConfigHeaderVO, LineCallListFrom lform, LineCallForm lineCallForm
+            , boolean superHighMark) {
+        // 上架
+        String asnNo = "";
+        //排序规则 普通入库回库先放在col_no小的位置 - 1,备货入库回库放在col_no大的位置 - 2
+        int orderRules = 1;
+        AjaxResult ajaxResult = iWmsDocAsnHeaderService.doPa(paForm);
+        if (!ajaxResult.isSuccess()) {
+            return ajaxResult;
+        }
+        asnNo = (String) ajaxResult.get("data");
+        orderRules = (int) ajaxResult.get("orderRules");
+        return businessService.agvCall(flowConfigHeaderVO, lform, lineCallForm, asnNo, orderRules, superHighMark);
+    }
+
     @Transactional
     @Override
     public AjaxResult doPa(PaForm paForm) {

+ 1 - 2
warewms-ams/src/main/java/com/ruoyi/ams/box/mapper/WmsBoxInfoMapper.java

@@ -80,12 +80,11 @@ public interface WmsBoxInfoMapper
     /**
      * 更新托盘库位绑定位置
      * @param palletNo
-     * @param locationFrom
      * @param locationTo
      * @param isFull
      * @return
      */
-     int updateLocationBindByPalletNo(@Param("palletNo")String palletNo,@Param("locationFrom") Long locationFrom,@Param("locationTo") Long locationTo,@Param("isFull") String isFull);
+     int updateLocationBindByPalletNo(@Param("palletNo")String palletNo,@Param("locationTo") Long locationTo,@Param("isFull") String isFull);
 
     /**
      * 接触托盘绑定关系

+ 1 - 2
warewms-ams/src/main/java/com/ruoyi/ams/box/service/IWmsBoxInfoService.java

@@ -113,10 +113,9 @@ public interface IWmsBoxInfoService {
     /**
      * 更新托盘绑定关系
      * @param palletNo
-     * @param locationFrom
      * @param locationTo
      * @param isFull
      * @return
      */
-    int updateLocationBind(String palletNo,Long locationFrom,Long locationTo,String isFull);
+    int updateLocationBind(String palletNo,Long locationTo,String isFull);
 }

+ 2 - 2
warewms-ams/src/main/java/com/ruoyi/ams/box/service/impl/WmsBoxInfoServiceImpl.java

@@ -189,7 +189,7 @@ public class WmsBoxInfoServiceImpl implements IWmsBoxInfoService {
         return wmsBoxInfoMapper.updateLocationBind(locationFrom, locationTo, isFull);
     }
     @Override
-    public int updateLocationBind(String palletNo,Long locationFrom, Long locationTo, String isFull) {
-        return wmsBoxInfoMapper.updateLocationBindByPalletNo(palletNo,locationFrom, locationTo, isFull);
+    public int updateLocationBind(String palletNo, Long locationTo, String isFull) {
+        return wmsBoxInfoMapper.updateLocationBindByPalletNo(palletNo, locationTo, isFull);
     }
 }

+ 56 - 1
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -16,6 +16,9 @@ import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
 import com.ruoyi.ams.config.service.LocationAllocationStrategy;
 import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
 import com.ruoyi.ams.inv.service.IInvLotLocIdService;
+import com.ruoyi.ams.lineCall.domain.form.LineCallDetailsForm;
+import com.ruoyi.ams.lineCall.domain.form.LineCallForm;
+import com.ruoyi.ams.lineCall.domain.form.LineCallListFrom;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.ams.task.dto.WcsTaskLocationDTO;
 import com.ruoyi.ams.task.mapper.WcsTaskMapper;
@@ -88,6 +91,58 @@ public class BusinessServiceImpl implements IBusinessService {
         }
     }
 
+    @Transactional
+    @Override
+    public AjaxResult agvCall(FlowConfigHeaderVO flowConfigHeaderVO, LineCallListFrom lform, LineCallForm lineCallForm
+            , String asnNo, int orderRules, boolean superHighMark) {
+        Map<String, AgvCallDTO> map = new HashMap<>();
+        List<AgvCallDTO> list = new ArrayList<>();
+        if (flowConfigHeaderVO.getFlowType().equals("ASN") && org.apache.commons.lang3.StringUtils.isEmpty(lform.getLocationFrom())) {
+            return AjaxResult.error("入库任务必须选择起始库位");
+        }
+        if (flowConfigHeaderVO.getFlowType().equals("SO") && (lform.getQty() == null || lform.getQty().longValue() == 0)) {
+            return AjaxResult.error("出库任务必须选择数量");
+        }
+        AgvCallDTO agvCallDTO;
+        if (map.containsKey(lform.getLocationFrom() + "-" + lform.getLocationTo())) {
+            agvCallDTO = map.get(lform.getLocationFrom() + "-" + lform.getLocationTo());
+        } else {
+            agvCallDTO = new AgvCallDTO();
+            agvCallDTO.setWarehouseId(1L);//没用暂时写死
+            agvCallDTO.setLocationFrom(lform.getLocationFrom());
+            agvCallDTO.setLocationTo(lform.getLocationTo());
+            agvCallDTO.setId(lform.getId());
+            agvCallDTO.setPalletNo(lform.getPalletNo());
+            agvCallDTO.setTaskType(lineCallForm.getFlowId().toString());
+            agvCallDTO.setOrderNo(asnNo); // 入库单号
+            agvCallDTO.setOrderRules(orderRules);
+        }
+        AgvCallItemDTO agvCallItemDTO = new AgvCallItemDTO();
+        agvCallItemDTO.setWarehouseId(1L);
+        agvCallItemDTO.setSku(lform.getSku());
+        agvCallItemDTO.setQty(lform.getQty());
+        agvCallItemDTO.setSupplier(lform.getSupplier());
+        agvCallItemDTO.setWeight(lform.getWeight());
+        agvCallItemDTO.setLocationFrom(lform.getLocationFrom());
+        agvCallItemDTO.setLocationTo(lform.getLocationTo());
+        agvCallItemDTO.setSuperHigh(superHighMark);
+        agvCallDTO.getAgvCallItemDTOList().add(agvCallItemDTO);
+        LotattDTO lotattDTO = new LotattDTO();
+        List<LineCallDetailsForm> lineCallDetailsForms = lform.getLineCallDetailsFormList();
+        if (lineCallDetailsForms != null && lineCallDetailsForms.size() > 0) {
+            for (LineCallDetailsForm detailsForm : lineCallDetailsForms) {
+                lotattDTO.setAttr(detailsForm.getLotattId(), detailsForm.getLotattValue());
+            }
+        }
+        agvCallItemDTO.setLotattDTO(lotattDTO);
+        map.put(lform.getLocationFrom() + "-" + lform.getLocationTo(), agvCallDTO);
+        for (Map.Entry<String, AgvCallDTO> entry : map.entrySet()) {
+            AgvCallDTO mapValue = entry.getValue();
+            list.add(mapValue);
+        }
+        return businessService.agvCall(flowConfigHeaderVO, list);
+    }
+
     @Transactional
     @Override
     public AjaxResult agvCall(AgvCallItem agvCallItem, Long flowId) {
@@ -670,7 +725,7 @@ public class BusinessServiceImpl implements IBusinessService {
         if (!StringUtils.isEmpty(wcsTask.getLocationFrom())) {
             baseLocationInfoService.updateLocationStockStatus(Long.parseLong(wcsTask.getLocationFrom()), Constant.STOCK_STATUS.STOCK10.getValue());
         }
-        if (!StringUtils.isEmpty(wcsTask.getLocationTo())) {
+        if (!StringUtils.isEmpty(wcsTask.getLocationTo()) && !wcsTask.getLocationTo().equals("待分配")) {
             baseLocationInfoService.updateLocationStockStatus(Long.parseLong(wcsTask.getLocationTo()), Constant.STOCK_STATUS.STOCK10.getValue());
         }
 

+ 16 - 0
warewms-ams/src/main/java/com/ruoyi/ams/business/IBusinessService.java

@@ -3,6 +3,8 @@ package com.ruoyi.ams.business;
 import com.ruoyi.ams.config.domain.AsnSoStrategy;
 import com.ruoyi.ams.config.domain.dto.*;
 import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
+import com.ruoyi.ams.lineCall.domain.form.LineCallForm;
+import com.ruoyi.ams.lineCall.domain.form.LineCallListFrom;
 import com.ruoyi.ams.task.domain.WcsTask;
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -18,6 +20,20 @@ import java.util.List;
 public interface IBusinessService {
 
 
+    /**
+     * AGV呼叫业务
+     * @param flowConfigHeaderVO
+     * @param lform
+     * @param lineCallForm
+     * @param asnNo
+     * @param orderRules
+     * @param superHighMark
+     * @return
+     */
+    AjaxResult agvCall(FlowConfigHeaderVO flowConfigHeaderVO, LineCallListFrom lform, LineCallForm lineCallForm
+            , String asnNo, int orderRules, boolean superHighMark);
+
+
     /**
      * AGV呼叫业务
      *

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

@@ -281,7 +281,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
                 , warehouseId, updateBy);
 
         // 更新托盘绑定库位关系
-        iWmsBoxInfoService.updateLocationBind(palletNo, baseLocationFrom.getId(), baseLocationTo.getId(), null);
+        iWmsBoxInfoService.updateLocationBind(palletNo, baseLocationTo.getId(), null);
         return AjaxResult.success("执行成功");
     }
 
@@ -351,7 +351,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         baseLocationInfoService.updateLocationIdleAndNoEmpty(baseLocationTo.getId(), warehouseId, updateBy);
 
         // 更新托盘绑定库位关系
-        iWmsBoxInfoService.updateLocationBind(palletNo, baseLocationFrom.getId(), baseLocationTo.getId(), null);
+        iWmsBoxInfoService.updateLocationBind(palletNo, baseLocationTo.getId(), null);
         return AjaxResult.success("操作成功!");
     }
 
@@ -919,6 +919,7 @@ public class InvLotLocIdServiceImpl implements IInvLotLocIdService {
         return AjaxResult.success("操作成功");
     }
 
+    @Transactional
     @Override
     public AjaxResult locationRelease(BasLocationForm basLocationForm) {
         BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(basLocationForm.getLocationNo(), Constant.WAREHOUSE_ID);

+ 7 - 2
warewms-ams/src/main/java/com/ruoyi/ams/order/service/impl/UpdateOrderStockingProcessImpl.java

@@ -89,12 +89,14 @@ public class UpdateOrderStockingProcessImpl implements UpdateOrderStockingProces
         // 判断单据类型是否为备货单
         if (!header.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())) {
             log.error("出库单类型不是备货类型,不可更新备货!" + header.getOrderNo());
+            recordRemark(orderNo, "出库单类型不是备货类型,不可更新备货!" + header.getOrderNo());
             return AjaxResult.success();
         }
         // 备货单部分或者完全出库不可更新备货
         if (header.getOrderStatus().equals(Constant.ORDER_STS.STS98.getValue())
                 || header.getOrderStatus().equals(Constant.ORDER_STS.STS99.getValue())) {
             log.error("备货单状态为(部分出库)已经出库!不可更新备货!" + header.getOrderNo());
+            recordRemark(orderNo, "备货单状态为(部分出库)已经出库!不可更新备货!" + header.getOrderNo());
             return AjaxResult.success();
         }
         // 备货单有分配任务不可更新备货
@@ -102,6 +104,7 @@ public class UpdateOrderStockingProcessImpl implements UpdateOrderStockingProces
         for (WmsDocOrderDetails wmsDocOrderDetails : wmsDocOrderDetailsList) {
             if (wmsDocOrderDetails.getQtyAllocated().compareTo(wmsDocOrderDetails.getQtySoftAllocated()) != 0) {
                 log.error("备货单正在备货,暂不可更新备货" + header.getOrderNo());
+                recordRemark(orderNo, "备货单正在备货,暂不可更新备货" + header.getOrderNo());
                 return AjaxResult.error("备货单正在备货,暂不可更新备货" + header.getOrderNo());
             }
         }
@@ -113,11 +116,13 @@ public class UpdateOrderStockingProcessImpl implements UpdateOrderStockingProces
             String stockStatus = locIdLotattVO.getStockStatus();
             if (!stockStatus.equals(Constant.STOCK_STATUS.STOCK00.getValue())) {
                 log.error("备货库存任务占用,暂不可更新备货" + locIdLotattVO.getLocationNo());
+                recordRemark(orderNo, "备货库存任务占用,暂不可更新备货" + locIdLotattVO.getLocationNo());
                 return AjaxResult.error("备货库存任务占用,暂不可更新备货" + locIdLotattVO.getLocationNo());
             }
             // 库存需要在仓储区或者虚拟区
-            if (!locIdLotattVO.getZoneId().equals(Constant.ZONE_TYPE.ZONE_VIRTUAL.getValue())
-                    && !locIdLotattVO.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue())) {
+            if (!locIdLotattVO.getZoneId().equals(Constant.ZONE_TYPE.ZONE_VIRTUAL.getValue().toString())
+                    && !locIdLotattVO.getZoneId().equals(Constant.ZONE_TYPE.ZONE_INV.getValue().toString())) {
+                recordRemark(orderNo, "备货库存不在虚拟区或者仓储区,暂不可更新备货:" + locIdLotattVO.getLocationNo());
                 return AjaxResult.error("备货库存不在虚拟区或者仓储区,暂不可更新备货:" + locIdLotattVO.getLocationNo());
             }
         }

+ 2 - 4
warewms-ams/src/main/java/com/ruoyi/ams/task/service/impl/WcsTaskServiceImpl.java

@@ -190,8 +190,7 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
         if (!StringUtils.isEmpty(wcsTask.getLocationFrom())
                 && !StringUtils.isEmpty(wcsTask.getExt5())) {
             //更新托盘绑定关系
-            wmsBoxInfoService.updateLocationBind(wcsTask.getExt5(),Long.parseLong(wcsTask.getLocationFrom())
-                    ,Constant.LOC_MIDDLE_CACHE, null);
+            wmsBoxInfoService.updateLocationBind(wcsTask.getExt5(),Constant.LOC_MIDDLE_CACHE, null);
         }
     }
 
@@ -242,8 +241,7 @@ public class WcsTaskServiceImpl implements IWcsTaskService {
         if (!StringUtils.isEmpty(wcsTask.getLocationTo())
                 && !StringUtils.isEmpty(wcsTask.getExt5())) {
             //更新托盘绑定关系
-            wmsBoxInfoService.updateLocationBind(wcsTask.getExt5(),Constant.LOC_MIDDLE_CACHE
-                    , Long.parseLong(wcsTask.getLocationTo()), null);
+            wmsBoxInfoService.updateLocationBind(wcsTask.getExt5(), Long.parseLong(wcsTask.getLocationTo()), null);
         }
 
     }

+ 0 - 0
warewms-ams/src/main/resources/mapper/box/WmsBoxInfoMapper.xml

@@ -143,7 +143,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="isFull != null">is_full = #{isFull},</if>
         </trim>
         where box_no =#{palletNo}
     </update>
 
     <update id="unbindBox">