rev:空木箱入库:优先将相同木箱规格的木箱放在同一深浅货位
This commit is contained in:
@@ -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 排
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user