rev:空木箱入库:优先将相同木箱规格的木箱放在同一深浅货位

This commit is contained in:
2024-06-26 17:13:34 +08:00
parent ea8b70ec38
commit 0473d9529e
2 changed files with 154 additions and 2 deletions

View File

@@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@@ -132,7 +133,15 @@ public class InBoxManageServiceImpl implements InBoxManageService {
jsonParam.put("box_high", boxDao.getBox_high());
jsonParam.put("vehicle_type", boxDao.getVehicle_type());
jsonParam.put("height", height);
JSONObject jsonAttr = getStruct(jsonParam);
// 优先找相同规格的木箱:如果未找到在执行负载均衡策略
JSONObject jsonAttr;
jsonAttr = queryEqualBox(jsonParam);
if (ObjectUtil.isEmpty(jsonAttr)) {
jsonAttr = getStruct(jsonParam);
}
if (ObjectUtil.isEmpty(jsonAttr)) {
notInRowList.clear();
notInBlockList.clear();
@@ -412,6 +421,84 @@ public class InBoxManageServiceImpl implements InBoxManageService {
return jsonAttrNow;
}
/**
* 根据木箱规格找相同规格的仓位
* @param jsonParam {
* stor_id仓库标识
* sect_id库区标识
* box_length木箱长度
* box_width木箱宽度
* box_high木箱高度
* vehicle_type: 载具类型
* height: 仓位高度
* }
* @return JSONObject : 仓位对象
*/
private JSONObject queryEqualBox(JSONObject jsonParam) {
// 需要返回的仓位
JSONObject result = new JSONObject();
// 1.匹配相同木箱规格的排row_num
jsonParam.put("flag", "6");
List<JSONObject> rowList = WQL.getWO("BST_INBOX").addParamMap(jsonParam)
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
// 查询此排的所有仓位
String row_in = rowList.stream()
.map(row -> row.getString("row_num"))
.collect(Collectors.joining("','"));
List<JSONObject> attrRowAllList = WQL.getWO("BST_INBOX").addParam("flag", "7").addParam("sect_id", jsonParam.getString("sect_id"))
.addParam("row_in", "('" + row_in + "')").process().getResultJSONArray(0).toJavaList(JSONObject.class);
outerLoop: for (JSONObject jsonRow : rowList) {
// 查询这一排相同木箱规格的仓位
List<JSONObject> attrRowList = attrRowAllList.stream()
.filter(row -> row.getString("row_num").equals(jsonRow.getString("row_num")))
.filter(row -> row.getDoubleValue("box_length") == jsonParam.getDoubleValue("box_length")
&& row.getDoubleValue("box_width") == jsonParam.getDoubleValue("box_width")
&& row.getDoubleValue("box_high") == jsonParam.getDoubleValue("box_high")
&& ObjectUtil.isNotEmpty(row.getString("storagevehicle_code"))
)
.collect(Collectors.toList());
// 匹配货位
for (JSONObject json : attrRowList) {
// 判断此货位是深位还是浅位
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code(""))
|| json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code(""))
) {
continue;
}
// 如果是深位:找出对应浅位
JSONObject lowAttr = attrRowAllList.stream()
.filter(row -> row.getString("col_num").equals(json.getString("col_num")) &&
row.getString("layer_num").equals(json.getString("layer_num")) &&
row.getString("row_num").equals(json.getString("row_num")) &&
row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.findFirst().orElse(null);
if (ObjectUtil.isEmpty(lowAttr)) {
throw new BadRequestException("仓位:" + json.getString("struct_code") + "对应的浅货位错误!");
}
// 判断此仓位是否有货、是否被锁住
if (ObjectUtil.isNotEmpty(lowAttr.getString("storagevehicle_code"))
|| !lowAttr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))
) {
continue;
}
result = lowAttr;
break outerLoop;
}
}
return result;
}
/**
* 找一个空仓位(木箱区)
*
@@ -502,6 +589,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
* box_length木箱长度
* box_width木箱宽度
* box_high木箱高度
* vehicle_type 载具类型
* }
* @return String 巷道
*/
@@ -562,6 +650,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
* box_length木箱长度
* box_width木箱宽度
* box_high木箱高度
* vehicle_type 载具类型
* }
* @return String 排
*/

View File

@@ -20,6 +20,9 @@
输入.height TYPEAS s_string
输入.row_num TYPEAS s_string
输入.vehicle_type TYPEAS s_string
输入.box_length TYPEAS s_string
输入.box_width TYPEAS s_string
输入.box_high TYPEAS s_string
输入.block_in TYPEAS f_string
输入.row_in TYPEAS f_string
输入.not_row_in TYPEAS f_string
@@ -184,4 +187,64 @@
ENDSELECT
ENDQUERY
ENDIF
ENDIF
IF 输入.flag = "6"
QUERY
SELECT
attr.row_num
FROM
st_ivt_structattr attr
INNER JOIN bst_ivt_boxinfo box ON box.box_no = attr.storagevehicle_code
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.stor_id = 输入.stor_id
AND attr.sect_id = 输入.sect_id
AND attr.storagevehicle_type = 输入.vehicle_type
AND box.is_packing = '0'
AND IFNULL(attr.storagevehicle_code,'') <> ''
OPTION 输入.box_length <> ""
box.box_length = 输入.box_length
ENDOPTION
OPTION 输入.box_width <> ""
box.box_width = 输入.box_width
ENDOPTION
OPTION 输入.box_high <> ""
box.box_high = 输入.box_high
ENDOPTION
GROUP BY attr.row_num
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "7"
QUERY
SELECT
attr.*,
box.box_length,
box.box_width,
box.box_high
FROM
st_ivt_structattr attr
LEFT JOIN bst_ivt_boxinfo box ON box.box_no = attr.storagevehicle_code AND box.is_packing = '0'
WHERE
attr.is_used = '1'
AND attr.is_delete = '0'
AND attr.sect_id = 输入.sect_id
OPTION 输入.row_in <> ""
attr.row_num IN 输入.row_in
ENDOPTION
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF