rev:1.移库自动扩容2.虚拟区自动扩容3.出库设置任务报错信息信息优化

This commit is contained in:
2024-04-12 18:06:55 +08:00
parent 4a9e703400
commit 08fbf1ea8e
3 changed files with 342 additions and 9 deletions

View File

@@ -24,7 +24,9 @@ import org.nl.wms.basedata.st.service.StorattrService;
import org.nl.wms.basedata.st.service.StructattrService;
import org.nl.wms.basedata.st.service.dto.StorattrDto;
import org.nl.wms.basedata.st.service.dto.StructattrDto;
import org.nl.wms.basedata.st.service.impl.StructattrServiceImpl;
import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.PointService;
@@ -41,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* PC端出入库新增
@@ -64,6 +67,7 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
private final RedissonClient redissonClient;
private JSONObject struct_jo = null;
@Override
public Map<String, Object> pageQuery(Map whereJson, Pageable page) {
@@ -551,6 +555,18 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
//判断是否为主存区,主存区调用自动分配,虚拟区调用普通查询
if (StrUtil.isNotEmpty(need_sect) && !"00".equals(need_sect_jo.getString("sect_type_attr"))) {
struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + need_sect + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0);
// 如果为空则扩容
if (ObjectUtil.isEmpty(struct_jo)) {
JSONObject jsonParam = new JSONObject();
jsonParam.put("sect_id", whereJson.get("sect_id"));
jsonParam.put("stor_id", whereJson.get("stor_id"));
jsonParam.put("num", 50);
StructattrServiceImpl bean = SpringContextHolder.getBean(StructattrServiceImpl.class);
bean.oneCreate(jsonParam);
struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + need_sect + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0);
}
} else {
jo_form.put("sect_id", whereJson.get("sect_id"));
struct_jo = this.autoDis(jo_form);
@@ -1359,8 +1375,6 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
* */
JSONObject struct_jo = new JSONObject();
String box_no = whereJson.getString("box_no");
String sect_id = whereJson.getString("sect_id");
@@ -1728,7 +1742,9 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
}
if (ObjectUtil.isEmpty(struct_jo)) {
throw new BadRequestException("未查询到可用的仓位!");
// 主存区类型更改成中转区类型:找一排主存区的更改中转区、把一排中转区的更改成主存区(只允许调用一次)
updateStructSect(col_num);
autoDisMove(whereJson);
}
return struct_jo;
}
@@ -2115,4 +2131,107 @@ public class RawAssistIStorServiceImpl implements RawAssistIStorService {
map.put("bill_status", "99");
dtl_wql.update(map, "iostorinv_id = '" + mst_row.get("iostorinv_id") + "'");
}
private void updateStructSect(String layer_num) {
WQLObject attr = WQLObject.getWQLObject("st_ivt_structattr");
WQLObject point = WQLObject.getWQLObject("sch_base_point");
/*
* 1.将主存区的一排更改为中转区
* 2.将中转区的一排更改为主存区
*/
String block_num = "";
String row_num = "";
// 1.找主存区数量小的一排转为中转区
// 根据块、排进行分组,优先空排 -> 有货数量少的
List<JSONObject> attrListAllEmp = WQL.getWO("ST_UPDATESTRUCTSECT_01").addParam("flag", "1")
.addParam("layer_num", layer_num).process().getResultJSONArray(0)
.toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(attrListAllEmp)) {
// 如果为空则查找有空位的排
List<JSONObject> attrListEmp = WQL.getWO("ST_UPDATESTRUCTSECT_01").addParam("flag", "2")
.addParam("layer_num", layer_num).process().getResultJSONArray(0)
.toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(attrListEmp)) {
throw new BadRequestException("自动扩容失败,主存区没有空位可扩容!");
}
// 判断是这排是否被锁住
String block_num_in = attrListEmp.stream()
.map(row -> row.getString("block_num"))
.collect(Collectors.joining("','"));
String row_num_in = attrListEmp.stream()
.map(row -> row.getString("row_num"))
.collect(Collectors.joining("','"));
List<JSONObject> rowList = attr.query("block_num in ('" + block_num_in + "') AND row_num in ('" + row_num_in + "') and layer_num = '" + layer_num + "' and sect_code = 'ZC01'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
for (int i = 0; i < attrListEmp.size(); i++) {
JSONObject json = attrListEmp.get(i);
List<JSONObject> collect = rowList.stream()
.filter(row -> row.getString("block_num").equals(json.getString("block_num")) &&
row.getString("row_num").equals(json.getString("row_num"))
)
.collect(Collectors.toList());
// 判断是否全部都为未锁定
boolean isLock = collect.stream()
.allMatch(row -> row.getString("lock_type").equals("1"));
if (!isLock) {
continue;
}
block_num = json.getString("block_num");
row_num = json.getString("row_num");
break;
}
} else {
JSONObject json = attrListAllEmp.get(0);
block_num = json.getString("block_num");
row_num = json.getString("row_num");
}
// 2.将中转区的一排更改为主存区
// 查询中转区满的一排
List<JSONObject> attrListAllNoEmp = WQL.getWO("ST_UPDATESTRUCTSECT_01").addParam("flag", "3")
.addParam("layer_num", layer_num).process().getResultJSONArray(0)
.toJavaList(JSONObject.class);
if (ObjectUtil.isNotEmpty(attrListAllNoEmp)) {
// 更新仓位为主存区
JSONObject jsonParam2 = new JSONObject();
jsonParam2.put("sect_id", RegionTypeEnum.ZC01.getId());
jsonParam2.put("sect_code", "ZC01");
jsonParam2.put("sect_name", RegionTypeEnum.ZC01.getName());
JSONObject json = attrListAllNoEmp.get(0);
// 更新仓位
attr.update(jsonParam2,"sect_code = 'ZZ01' AND block_num = '"+json.getString("block_num")+"' AND row_num = '"+json.getString("row_num")+"' AND layer_num = '"+layer_num+"'");
// 更新点位
jsonParam2.put("region_id", RegionTypeEnum.ZC01.getId());
jsonParam2.put("region_code", "ZC01");
jsonParam2.put("region_name", RegionTypeEnum.ZC01.getName());
point.update(jsonParam2,"region_code = 'ZZ01' AND block_num = '"+json.getString("block_num")+"' AND row_num = '"+json.getString("row_num")+"' AND layer_num = '"+layer_num+"'");
}
// 更新仓位为中转区
JSONObject jsonParam = new JSONObject();
jsonParam.put("sect_id", RegionTypeEnum.ZZ01.getId());
jsonParam.put("sect_code", "ZZ01");
jsonParam.put("sect_name", RegionTypeEnum.ZZ01.getName());
attr.update(jsonParam,"sect_code = 'ZC01' AND block_num = '"+block_num+"' AND row_num = '"+row_num+"' AND layer_num = '"+layer_num+"'");
// 更新点位
jsonParam.put("region_id", RegionTypeEnum.ZZ01.getId());
jsonParam.put("region_code", "ZZ01");
jsonParam.put("region_name", RegionTypeEnum.ZZ01.getName());
point.update(jsonParam,"region_code = 'ZC01' AND block_num = '"+block_num+"' AND row_num = '"+row_num+"' AND layer_num = '"+layer_num+"'");
}
}

View File

@@ -0,0 +1,214 @@
[交易说明]
交易名: 更新仓位属性查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.layer_num TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
QUERY
SELECT
*
FROM
(
SELECT
sa.block_num,
sa.row_num,
COUNT( sa.struct_code ) AS struct_num
FROM
st_ivt_structattr sa
WHERE
sa.is_delete = '0'
AND sa.is_used = '1'
AND sa.sect_code = 'ZC01'
OPTION 输入.layer_num <> ""
sa.layer_num = 输入.layer_num
ENDOPTION
GROUP BY
sa.block_num,
sa.row_num
) a
WHERE
EXISTS (
SELECT
*
FROM
(
SELECT
block_num,
row_num,
COUNT( sa2.struct_code ) AS struct_num
FROM
st_ivt_structattr sa2
WHERE
sa2.lock_type = '1'
AND sa2.is_used = '1'
AND sa2.is_delete = '0'
AND sa2.sect_code = 'ZC01'
AND IFNULL( sa2.storagevehicle_code, '' ) = ''
OPTION 输入.layer_num <> ""
sa2.layer_num = 输入.layer_num
ENDOPTION
GROUP BY
sa2.block_num,
sa2.row_num
) b
WHERE
b.block_num = a.block_num
AND b.row_num = a.row_num
AND a.struct_num = b.struct_num
) ORDER BY struct_num DESC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
*
FROM
(
SELECT
sa.block_num,
sa.row_num,
COUNT( sa.struct_code ) AS struct_num
FROM
st_ivt_structattr sa
WHERE
sa.is_delete = '0'
AND sa.is_used = '1'
AND sa.lock_type = '1'
AND sa.sect_code = 'ZC01'
OPTION 输入.layer_num <> ""
sa.layer_num = 输入.layer_num
ENDOPTION
GROUP BY
sa.block_num,
sa.row_num
) a
WHERE
EXISTS (
SELECT
*
FROM
(
SELECT
block_num,
row_num,
COUNT( sa2.struct_code ) AS struct_num
FROM
st_ivt_structattr sa2
WHERE
sa2.lock_type = '1'
AND sa2.is_used = '1'
AND sa2.is_delete = '0'
AND sa2.sect_code = 'ZC01'
AND IFNULL( sa2.storagevehicle_code, '' ) = ''
OPTION 输入.layer_num <> ""
sa2.layer_num = 输入.layer_num
ENDOPTION
GROUP BY
sa2.block_num,
sa2.row_num
) b
WHERE
b.block_num = a.block_num
AND b.row_num = a.row_num
) ORDER BY struct_num DESC
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
*
FROM
(
SELECT
sa.block_num,
sa.row_num,
COUNT( sa.struct_code ) AS struct_num
FROM
st_ivt_structattr sa
WHERE
sa.is_delete = '0'
AND sa.is_used = '1'
AND sa.lock_type = '1'
AND sa.sect_code = 'ZZ01'
OPTION 输入.layer_num <> ""
sa.layer_num = 输入.layer_num
ENDOPTION
GROUP BY
sa.block_num,
sa.row_num
) a
WHERE
EXISTS (
SELECT
*
FROM
(
SELECT
block_num,
row_num,
COUNT( sa2.struct_code ) AS struct_num
FROM
st_ivt_structattr sa2
WHERE
sa2.lock_type = '1'
AND sa2.is_used = '1'
AND sa2.is_delete = '0'
AND sa2.sect_code = 'ZZ01'
AND IFNULL( sa2.storagevehicle_code, '' ) <> ''
OPTION 输入.layer_num <> ""
sa2.layer_num = 输入.layer_num
ENDOPTION
GROUP BY
sa2.block_num,
sa2.row_num
) b
WHERE
b.block_num = a.block_num
AND b.row_num = a.row_num
AND a.struct_num = b.struct_num
) ORDER BY struct_num DESC
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -2671,7 +2671,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
for (int k = 0; k < numArr.size(); k++) {
JSONObject json = numArr.getJSONObject(k);
error += json.getString("struct_code") + ",";
error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code");
}
throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!");
@@ -2705,7 +2705,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
for (int k = 0; k < numArr.size(); k++) {
JSONObject json = numArr.getJSONObject(k);
error += json.getString("struct_code") + ",";
error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code");
}
throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!");
@@ -2739,7 +2739,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
for (int k = 0; k < numArr.size(); k++) {
JSONObject json = numArr.getJSONObject(k);
error += json.getString("struct_code") + ",";
error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code");
}
throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!");
@@ -3131,7 +3131,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
for (int k = 0; k < numArr.size(); k++) {
JSONObject json = numArr.getJSONObject(k);
error += json.getString("struct_code") + ",";
error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code");
}
throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!");
@@ -3163,7 +3163,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
for (int k = 0; k < numArr.size(); k++) {
JSONObject json = numArr.getJSONObject(k);
error += json.getString("struct_code") + ",";
error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code");
}
throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!");
@@ -3195,7 +3195,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
for (int k = 0; k < numArr.size(); k++) {
JSONObject json = numArr.getJSONObject(k);
error += json.getString("struct_code") + ",";
error += json.getString("struct_code") + ", 锁定单据号:"+json.getString("inv_code");
}
throw new BadRequestException("仓位:" + error + "被锁定且未下发任务,无法生成任务!");