rev:1.移库自动扩容2.虚拟区自动扩容3.出库设置任务报错信息信息优化
This commit is contained in:
@@ -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+"'");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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 + "被锁定且未下发任务,无法生成任务!");
|
||||
|
||||
Reference in New Issue
Block a user