andy il y a 3 ans
Parent
commit
20494a88bb

+ 3 - 0
ruoyi-ui/src/views/ams/flowConfig/index.vue

@@ -464,6 +464,9 @@ export default {
       form: {},
       // 表单校验
       rules: {
+        flowType: [
+          { required: true, message: "操作类型不能为空", trigger: "blur" }
+        ],
         flowName: [
           { required: true, message: "流程名称不能为空", trigger: "blur" }
         ],

+ 4 - 4
ruoyi-ui/src/views/ams/lineCall/index.vue

@@ -110,16 +110,16 @@
               </div>
             </template>
           </el-table-column>
-          <el-table-column label="属性值" prop="lotattValue">
+          <el-table-column label="属性值" prop="defaultValue">
             <template slot-scope="scope">
               <div v-if="scope.row.inputType === 'Text'">
-                <el-input v-model="scope.row.lotattValue" placeholder=""/>
+                <el-input v-model="scope.row.defaultValue" placeholder=""/>
               </div>
               <div v-if="scope.row.inputType === 'DateBox'">
-                <el-date-picker v-model="scope.row.lotattValue" type="date" placeholder="" style="width: 100%" value-format="yyyy-MM-dd"/>
+                <el-date-picker v-model="scope.row.defaultValue" type="date" placeholder="" style="width: 100%" value-format="yyyy-MM-dd"/>
               </div>
               <div v-if="scope.row.inputType === 'ComboBox'">
-                <el-select v-model="scope.row.lotattValue" placeholder="请选择" clearable size="small" style="width: 100%">
+                <el-select v-model="scope.row.defaultValue" placeholder="请选择" clearable size="small" style="width: 100%">
                   <el-option
                     v-for="dict in dict.type[scope.row.inputScope]"
                     :key="dict.value"

+ 9 - 49
warewms-ams/src/main/java/com/ruoyi/ams/business/BusinessServiceImpl.java

@@ -326,40 +326,13 @@ public class BusinessServiceImpl implements IBusinessService {
         } else if (type.equals("SO")) {
             //起始库位
             if (locationType.equals("locationFrom")) {
-                //指定库位
-                if (locationInfoList != null && locationInfoList.size() > 0) {
-                    List<Long> locationList = new ArrayList<>();
-                    for (BaseLocationInfo b : locationInfoList) {
-                        locationList.add(b.getId());
-                    }
-                    List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, 1L, agvCallDTO.getLotattDTO().getAttr(), agvCallDTO.getSku());
-                    OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
-                    outWarehouseDTO.setSku(agvCallDTO.getSku());
-                    outWarehouseDTO.setQty(agvCallDTO.getQty());
-                    outWarehouseDTO.setWeight(agvCallDTO.getWeight());
-                    outWarehouseDTO.setSupplier(agvCallDTO.getSupplier());
-                    outWarehouseDTO.setLotattDTO(agvCallDTO.getLotattDTO());
-                    outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
-                    locationInfo = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy, token);
-                } else {
-                    OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
-                    outWarehouseDTO.setSku(agvCallDTO.getSku());
-                    outWarehouseDTO.setQty(agvCallDTO.getQty());
-                    outWarehouseDTO.setWeight(agvCallDTO.getWeight());
-                    outWarehouseDTO.setSupplier(agvCallDTO.getSupplier());
-                    outWarehouseDTO.setLotattDTO(agvCallDTO.getLotattDTO());
-                    outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
-                    locationInfo = outInvAllocation(outWarehouseDTO, token);
-                }
-                if (locationInfo == null) {
-                    throw new ServiceException("没有可分配的库存", token);
-                }
-                return locationInfo;
+
             } else { //目标库位
                 for (BaseLocationInfo b : locationInfoList) {
-                    if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("Y")) {
+                    if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("Y") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
                         continue;
                     }
+                    redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token);
                     locationInfo = b;
                     break;
                 }
@@ -369,32 +342,19 @@ public class BusinessServiceImpl implements IBusinessService {
             }
         } else { //移库
             if (locationType.equals("locationFrom")) {
-                if (locationInfoList != null && locationInfoList.size() > 0) {
-                    List<Long> locationList = new ArrayList<>();
-                    for (BaseLocationInfo b : locationInfoList) {
-                        locationList.add(b.getId());
-                    }
-                    List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, 1L, agvCallDTO.getLotattDTO().getAttr(), agvCallDTO.getSku());
-                    OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
-                    outWarehouseDTO.setSku(agvCallDTO.getSku());
-                    outWarehouseDTO.setQty(agvCallDTO.getQty());
-                    outWarehouseDTO.setWeight(agvCallDTO.getWeight());
-                    outWarehouseDTO.setSupplier(agvCallDTO.getSupplier());
-                    outWarehouseDTO.setLotattDTO(agvCallDTO.getLotattDTO());
-                    outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
-                    locationInfo = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy, token);
-                }
+
             } else {
                 for (BaseLocationInfo b : locationInfoList) {
-                    if (!b.getStockStatus().equals("00")) {
+                    if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("Y") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
                         continue;
                     }
+                    redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token);
                     locationInfo = b;
                     break;
                 }
-            }
-            if (locationInfo == null) {
-                throw new ServiceException("没有可以分配的库位", token);
+                if (locationInfo == null) {
+                    throw new ServiceException("没有可以分配的库位", token);
+                }
             }
         }
         return locationInfo;

+ 5 - 7
warewms-ams/src/main/java/com/ruoyi/ams/config/service/LocationAllocationStrategy.java

@@ -233,7 +233,7 @@ public class LocationAllocationStrategy {
                         }
                     } else {
                         //如果前面的库位已阻挡则之前的库位不可用
-                        if (b.getIsEmpty().equals("N") && b.getStockStatus().equals("00")) {
+                        if (!b.getIsEmpty().equals("Y") && b.getStockStatus().equals("00")) {
                             if (!redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
                                 redisCache.deleteObject(RedisKey.LOCK_LOCATION + currentLocation.getId());
                                 currentLocation = b;
@@ -272,11 +272,10 @@ public class LocationAllocationStrategy {
                     } else {
                         //如果前面的库位已阻挡则之前的库位不可用
                         //TODO 任务中的库位可以继续使用
-                        if (b.getIsEmpty().equals("N") && b.getStockStatus().equals("00")) {
+                        if (!b.getIsEmpty().equals("Y") || !b.getStockStatus().equals("00")) {
                             if (!redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
                                 redisCache.deleteObject(RedisKey.LOCK_LOCATION + currentLocation.getId());
-                                currentLocation = b;
-                                currentLocationLotatt = b;
+                                currentLocation = null;
                             }
                         } else {
                             continue;
@@ -314,11 +313,10 @@ public class LocationAllocationStrategy {
                     } else {
                         //如果前面的库位已阻挡则之前的库位不可用
                         //TODO 任务中的库位可以继续使用
-                        if (b.getIsEmpty().equals("N") && b.getStockStatus().equals("00")) {
+                        if (!b.getIsEmpty().equals("Y") || !b.getStockStatus().equals("00")) {
                             if (!redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
                                 redisCache.deleteObject(RedisKey.LOCK_LOCATION + currentLocation.getId());
-                                currentLocation = b;
-                                currentLocationLotatt = b;
+                                currentLocation = null;
                             }
                         } else {
                             continue;

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

@@ -255,7 +255,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </insert>
 
     <select id="selectLotattDetails" parameterType="Long" resultMap="FlowConfigLotattVOResult">
-        select d.lotatt_id,d.lotatt_flag,l.lotatt_name,l.input_type,l.input_scope,l.default_value lotatt_value
+        select d.lotatt_id,d.lotatt_flag,l.lotatt_name,l.input_type,l.input_scope,IFNULL(d.default_value,l.default_value) lotatt_value
         from flow_config_details d
         left join lotatt_config l on d.lotatt_id = l.lotatt_id
         where d.header_id = #{id} and d.lotatt_flag &lt;&gt; 'Hidden'

+ 24 - 0
warewms-base/src/main/java/com/ruoyi/base/domain/vo/BaseLocationLotattListVO.java

@@ -0,0 +1,24 @@
+package com.ruoyi.base.domain.vo;
+
+import com.ruoyi.base.domain.BaseLocationInfo;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: andy.qu
+ * Date: 2022/9/28
+ * Description:
+ */
+public class BaseLocationLotattListVO extends BaseLocationInfo {
+
+    private List<LotattInfo> lotattInfoList;
+
+    public List<LotattInfo> getLotattInfoList() {
+        return lotattInfoList;
+    }
+
+    public void setLotattInfoList(List<LotattInfo> lotattInfoList) {
+        this.lotattInfoList = lotattInfoList;
+    }
+}

+ 76 - 0
warewms-base/src/main/java/com/ruoyi/base/domain/vo/LotattInfo.java

@@ -0,0 +1,76 @@
+package com.ruoyi.base.domain.vo;
+
+import com.ruoyi.base.domain.LotattVO;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: andy.qu
+ * Date: 2022/9/28
+ * Description:
+ */
+public class LotattInfo {
+    private String sku;
+    private Float qty;
+    private LotattVO lotattVO;
+    private Map<String, String> attMap;
+
+    public void initLotatt() {
+        attMap = new HashMap<>();
+        if (lotattVO == null) {
+            lotattVO = new LotattVO();
+        }
+        this.attMap.put("lotatt01", lotattVO.getLotatt01());
+        this.attMap.put("lotatt02", lotattVO.getLotatt02());
+        this.attMap.put("lotatt03", lotattVO.getLotatt03());
+        this.attMap.put("lotatt04", lotattVO.getLotatt04());
+        this.attMap.put("lotatt05", lotattVO.getLotatt05());
+        this.attMap.put("lotatt06", lotattVO.getLotatt06());
+        this.attMap.put("lotatt07", lotattVO.getLotatt07());
+        this.attMap.put("lotatt08", lotattVO.getLotatt08());
+        this.attMap.put("lotatt09", lotattVO.getLotatt09());
+        this.attMap.put("lotatt10", lotattVO.getLotatt10());
+        this.attMap.put("lotatt11", lotattVO.getLotatt11());
+        this.attMap.put("lotatt12", lotattVO.getLotatt12());
+        this.attMap.put("lotatt13", lotattVO.getLotatt13());
+        this.attMap.put("lotatt14", lotattVO.getLotatt14());
+        this.attMap.put("lotatt15", lotattVO.getLotatt15());
+        this.attMap.put("lotatt16", lotattVO.getLotatt16());
+        this.attMap.put("lotatt17", lotattVO.getLotatt17());
+        this.attMap.put("lotatt18", lotattVO.getLotatt18());
+    }
+
+    public String getSku() {
+        return sku;
+    }
+
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    public Float getQty() {
+        return qty;
+    }
+
+    public void setQty(Float qty) {
+        this.qty = qty;
+    }
+
+    public LotattVO getLotattVO() {
+        return lotattVO;
+    }
+
+    public void setLotattVO(LotattVO lotattVO) {
+        this.lotattVO = lotattVO;
+    }
+
+    public Map<String, String> getAttMap() {
+        return attMap;
+    }
+
+    public void setAttMap(Map<String, String> attMap) {
+        this.attMap = attMap;
+    }
+}

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

@@ -1,9 +1,13 @@
 package com.ruoyi.base.service;
 
 import java.util.List;
+import java.util.Map;
+
 import com.ruoyi.base.domain.BaseLocationInfo;
 import com.ruoyi.base.domain.vo.BasLocationTreeSelectVO;
+import com.ruoyi.base.domain.vo.BaseLocationLotattListVO;
 import com.ruoyi.base.domain.vo.TreeSelectVO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 库位信息Service接口
@@ -101,6 +105,17 @@ public interface IBaseLocationInfoService
      */
     List<BaseLocationInfo> selectSortedLocatinListByZoneId(Long zoneId,Long warehouseId);
 
+    /**
+     * 根据zoneId查询库位信息
+     * 返回结果会根据排列层进行排序,同库位多种物料的数据会合并
+     * @param locationId
+     * @param warehouseId
+     * @param lotatt
+     * @param sku
+     * @return
+     */
+    List<BaseLocationLotattListVO> selectSortedLocatinListByZoneId(List<Long> locationId,Long warehouseId, Map<String, String> lotatt,String sku);
+
     /**
      * 更新库位状态
      * @param status

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

@@ -2,15 +2,17 @@ package com.ruoyi.base.service.impl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 import com.ruoyi.base.domain.BaseLocationZone;
-import com.ruoyi.base.domain.vo.BasLocationTreeSelectVO;
-import com.ruoyi.base.domain.vo.TreeSelectVO;
+import com.ruoyi.base.domain.LotattVO;
+import com.ruoyi.base.domain.vo.*;
 import com.ruoyi.base.mapper.BaseLocationZoneMapper;
 import com.ruoyi.base.utils.CommonUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -169,6 +171,28 @@ 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<>();
+        List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationId, warehouseId, lotatt, sku);
+        BaseLocationLotattListVO current = null;
+        for (BaseLocationLotattVO vo : locationLotattVOList) {
+            if (current == null || current.getId().longValue() != vo.getId().longValue()) {
+                current = new BaseLocationLotattListVO();
+                BeanUtils.copyProperties(vo, current);
+                List<LotattInfo> lotattInfoList = new ArrayList<>();
+                current.setLotattInfoList(lotattInfoList);
+                result.add(current);
+            }
+            LotattInfo lotattObj = new LotattInfo();
+            lotattObj.setSku(vo.getSku());
+            lotattObj.setQty(vo.getQty());
+            lotattObj.setLotattVO(vo.getLotattVO());
+            current.getLotattInfoList().add(lotattObj);
+        }
+        return result;
+    }
+
     @Override
     public int updateLocationStockStatus(Long id, String status) {
         return baseLocationInfoMapper.updateLocationStockStatus(id, status);