rev:空木箱入库:优先将相同木箱规格的木箱放在同一深浅货位
This commit is contained in:
@@ -31,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -132,7 +133,15 @@ public class InBoxManageServiceImpl implements InBoxManageService {
|
|||||||
jsonParam.put("box_high", boxDao.getBox_high());
|
jsonParam.put("box_high", boxDao.getBox_high());
|
||||||
jsonParam.put("vehicle_type", boxDao.getVehicle_type());
|
jsonParam.put("vehicle_type", boxDao.getVehicle_type());
|
||||||
jsonParam.put("height", height);
|
jsonParam.put("height", height);
|
||||||
JSONObject jsonAttr = getStruct(jsonParam);
|
|
||||||
|
// 优先找相同规格的木箱:如果未找到在执行负载均衡策略
|
||||||
|
JSONObject jsonAttr;
|
||||||
|
jsonAttr = queryEqualBox(jsonParam);
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(jsonAttr)) {
|
||||||
|
jsonAttr = getStruct(jsonParam);
|
||||||
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isEmpty(jsonAttr)) {
|
if (ObjectUtil.isEmpty(jsonAttr)) {
|
||||||
notInRowList.clear();
|
notInRowList.clear();
|
||||||
notInBlockList.clear();
|
notInBlockList.clear();
|
||||||
@@ -412,6 +421,84 @@ public class InBoxManageServiceImpl implements InBoxManageService {
|
|||||||
return jsonAttrNow;
|
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_length:木箱长度
|
||||||
* box_width:木箱宽度
|
* box_width:木箱宽度
|
||||||
* box_high:木箱高度
|
* box_high:木箱高度
|
||||||
|
* vehicle_type: 载具类型
|
||||||
* }
|
* }
|
||||||
* @return String 巷道
|
* @return String 巷道
|
||||||
*/
|
*/
|
||||||
@@ -562,6 +650,7 @@ public class InBoxManageServiceImpl implements InBoxManageService {
|
|||||||
* box_length:木箱长度
|
* box_length:木箱长度
|
||||||
* box_width:木箱宽度
|
* box_width:木箱宽度
|
||||||
* box_high:木箱高度
|
* box_high:木箱高度
|
||||||
|
* vehicle_type: 载具类型
|
||||||
* }
|
* }
|
||||||
* @return String 排
|
* @return String 排
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -20,6 +20,9 @@
|
|||||||
输入.height TYPEAS s_string
|
输入.height TYPEAS s_string
|
||||||
输入.row_num TYPEAS s_string
|
输入.row_num TYPEAS s_string
|
||||||
输入.vehicle_type 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
|
输入.block_in TYPEAS f_string
|
||||||
输入.row_in TYPEAS f_string
|
输入.row_in TYPEAS f_string
|
||||||
输入.not_row_in TYPEAS f_string
|
输入.not_row_in TYPEAS f_string
|
||||||
@@ -184,4 +187,64 @@
|
|||||||
|
|
||||||
ENDSELECT
|
ENDSELECT
|
||||||
ENDQUERY
|
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