rev:出库加手动式事务优化

This commit is contained in:
2024-08-10 16:35:58 +08:00
parent e164cdc0e3
commit 468c57f550
4 changed files with 554 additions and 1 deletions

View File

@@ -101,6 +101,18 @@ public interface IStIvtIostorinvOutService extends IService<StIvtIostorinv> {
*/
void cancelDiv(JSONObject whereJson);
/**
* 全部设置站点
* @param whereJson {
* iostorinv_id 单据标识
* bill_code单据编码
* checked是否异常出库
* point_code终点编码
* }
*/
void allSetPoint2(JSONObject whereJson);
/**
* 全部设置站点
* @param whereJson {

View File

@@ -38,12 +38,14 @@ import org.nl.wms.basedata.st.service.StorattrService;
import org.nl.wms.basedata.st.service.dto.StorattrDto;
import org.nl.wms.pda.mps.eum.RegionTypeEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.util.TranUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -545,7 +547,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
@Override
@Transactional
public void allSetPoint(JSONObject whereJson) {
public void allSetPoint2(JSONObject whereJson) {
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
@@ -599,6 +601,59 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
@Override
public void allSetPoint(JSONObject whereJson) {
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
StIvtIostorinv mstDao = this.getById(whereJson.getLongValue("iostorinv_id"));
// 查询此明细所有未生成的分配明细
List<JSONObject> disDaoList = stIvtIostorinvdisMapper.getNotCreateDis(whereJson);
if (ObjectUtil.isEmpty(disDaoList)) {
throw new BadRequestException("当前没有可设置的分配明细!");
}
/*
* 下发任务
* 1.根据木箱 长、宽、高、订单号、物料分组
* 2.相同木箱规格、订单号、物料的木箱一个任务组
*/
// 定义一个函数,将需要分组的元素映射到一个建的集合里
Function<JSONObject, List<String>> compositeKey = row ->
Arrays.asList(row.getString("box_length"), row.getString("box_width"),
row.getString("box_high"),row.getString("sale_order_name"),
row.getString("material_id")
);
Map<List<String>, List<JSONObject>> groupingDisMap =
disDaoList.stream().collect(Collectors.groupingBy(compositeKey, Collectors.toList()));
// 创建手动式事务
ArrayList<String> arr = new ArrayList<>();
TranUtil.openTransaction((req, allTransactionConsumer) -> {
for (List<JSONObject> disLikeList : groupingDisMap.values()) {
// 调用任务生成处理
List<JSONObject> taskMangeList = createTaskMange2(disLikeList,mstDao.getIostorinv_id().toString(),allTransactionConsumer);
// 创建任务并下发一组任务
createTask2(taskMangeList,disLikeList,whereJson.getString("point_code"),allTransactionConsumer);
allTransactionConsumer.accept("finish");
}
return arr;
}, new JSONArray());
// 下发任务:判断当前单据是否有正在执行的的任务
JSONArray disArr = taskService.query("table_fk = '" + mstDao.getIostorinv_id().toString() + "' and is_delete = '0' and task_status = '" + TaskStatusEnum.EXECUTING.getCode() + "'")
.getResultJSONArray(0);
if (ObjectUtil.isEmpty(disArr)) {
TwoOutTask twoOutTask = new TwoOutTask();
twoOutTask.immediateNotifyAcs(null);
}
}
@Override
@Transactional
public void confirm(JSONObject whereJson) {
@@ -1108,6 +1163,65 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
return needCreateAttrList;
}
/**
* 生成任务前处理
* @param disLikeList 相同规格木箱、订单、物料的分配明细集合
* @param iostorinv_id 单据标识
* @return List<JSONObject> 生成任务的集合
*/
private List<JSONObject> createTaskMange2(List<JSONObject> disLikeList, String iostorinv_id, Consumer<String> allTransactionConsumer) {
// 仓位表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
// 获取仓位集合
String structCodeIn = disLikeList.stream()
.map(row -> row.getString("struct_code"))
.distinct().collect(Collectors.joining("','"));
List<JSONObject> attrList = attrTab.query("struct_code IN ('" + structCodeIn + "')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
/*
* 判断是否被阻挡
*/
// 获取所在排所有仓位
String rowIn = attrList.stream()
.map(row -> row.getString("row_num"))
.distinct().collect(Collectors.joining("','"));
List<JSONObject> attrRowList = attrTab.query("stor_id = '" + IOSEnum.STOR_ID.code("二期") + "' AND row_num IN ('" + rowIn + "')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
// 需移库仓位集合
List<JSONObject> needMoveAttrList = new ArrayList<>();
// 需生成出库任务的仓位集合
List<JSONObject> needCreateAttrList = new ArrayList<>();
// 循环准备任务参数
for (int i = 0; i < attrList.size(); i++) {
JSONObject jsonAttr = attrList.get(i);
// 判断是深位还是浅位
if (jsonAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code(""))) {
// 深位:判断对应浅位是否阻挡
JSONObject jsonBoxStop = ifBoxStop2(jsonAttr,attrRowList,iostorinv_id,allTransactionConsumer);
if (ObjectUtil.isNotEmpty(jsonBoxStop)) {
// 加入需要移库的集合
needMoveAttrList.add(jsonBoxStop);
}
}
// 加入需要出库的集合
needCreateAttrList.add(jsonAttr);
}
// 创建移库单下发移库任务
outBussManageService.createMove2(needMoveAttrList,allTransactionConsumer);
return needCreateAttrList;
}
/**
* 判断是否阻挡
* @param jsonAttr 要出库的仓位
@@ -1245,6 +1359,146 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
return result;
}
/**
* 判断是否阻挡
* @param jsonAttr 要出库的仓位
* @param attrRowList 相同规格所在排所有仓位
* @param iostorinv_id 单据标识
* @return JSONObject 需要移库的仓位
*/
private JSONObject ifBoxStop2(JSONObject jsonAttr, List<JSONObject> attrRowList, String iostorinv_id, Consumer<String> allTransactionConsumer) {
// 仓位表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
// 子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
// 载具扩展属性表
WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
JSONObject result = new JSONObject();
// 获取要出库仓位所对应的浅货位
List<JSONObject> lowAttrList = attrRowList.stream()
.filter(row -> row.getString("row_num").equals(jsonAttr.getString("row_num")) &&
row.getString("layer_num").equals(jsonAttr.getString("layer_num")) &&
row.getString("col_num").equals(jsonAttr.getString("col_num")) &&
row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code(""))
)
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(lowAttrList)) {
throw new BadRequestException("仓位数据错误,请检查!");
}
// 判断是否有货
JSONObject jsonLow = lowAttrList.get(0);
if (ObjectUtil.isNotEmpty(jsonLow.getString("storagevehicle_code"))) {
// 未锁定说明可以移库
if (jsonLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) {
result = jsonLow;
} else if (jsonLow.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库锁"))) {
allTransactionConsumer.accept(jsonLow.getString("struct_code"));
boolean flag = true;
// 判断是否是此单据下相同订单、长宽高、物料的木箱
List<StIvtIostorinvdis> disDaoList = iStIvtIostorinvdisService.list(
new QueryWrapper<StIvtIostorinvdis>().lambda()
.eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id)
.eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code"))
);
if (ObjectUtil.isNotEmpty(disDaoList)) {
// 不为空说明是此单据下的木箱
flag = false;
} else {
// 为空:判断此木箱是否有任务
JSONObject jsonTask = taskService.query("vehicle_code = '" + jsonLow.getString("storagevehicle_code") + "' and task_status <> '07' and is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonTask)) {
flag = false;
}
}
if (flag) {
// 查询移入货位
JSONObject moveParam = new JSONObject();
moveParam.put("stor_id", IOSEnum.STOR_ID.code("二期"));
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
moveParam.put("box_no", jsonLow.getString("storagevehicle_code"));
//根据木箱高度,判断入库仓位的高度、
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue();
// 查询木箱信息
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, jsonLow.getString("storagevehicle_code"))
);
String box_high = boxDao.getBox_high();
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
height = "('1','2','3')";
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
height = "('2','3')";
} else {
height = "('3')";
}
moveParam.put("height", height);
moveParam.put("vehicle_type", boxDao.getVehicle_type());
moveParam.put("move_block_num", jsonLow.getString("block_num"));
// 查询物料id
StIvtIostorinvdis disDao = iStIvtIostorinvdisService.list(
new QueryWrapper<StIvtIostorinvdis>().lambda()
.ne(StIvtIostorinvdis::getWork_status,IOSEnum.BILL_STATUS.code("完成"))
.eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code"))
).get(0);
moveParam.put("material_id", disDao.getMaterial_id());
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
// 查询木箱对应的载具
JSONObject jsonVeExt = extTab.query("pcsn = '" + jsonLow.getString("storagevehicle_code") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+jsonLow.getString("storagevehicle_code"));
}
// 生成任务
JSONObject jsonTaskParam = new JSONObject();
jsonTaskParam.put("task_type", "010709");
jsonTaskParam.put("start_device_code", jsonLow.getString("struct_code"));
jsonTaskParam.put("next_device_code", jsonMove.getString("struct_code"));
jsonTaskParam.put("vehicle_code", jsonLow.getString("storagevehicle_code"));
jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
jsonTaskParam.put("table_fk", iostorinv_id);
TwoOutExceptionalTask taskBean = new TwoOutExceptionalTask();
String task_id = taskBean.createTask(jsonTaskParam);
taskBean.immediateNotifyAcs(task_id);
// 锁定:标记货位为异常并生成异常移库任务
jsonLow.put("lock_type", IOSEnum.LOCK_TYPE.code("出库异常锁"));
jsonLow.put("task_code", task_id);
attrTab.update(jsonLow);
// 更新移入货位为出库异常货位
jsonMove.put("lock_type",IOSEnum.LOCK_TYPE.code("出库异常锁"));
jsonLow.put("task_code", task_id);
attrTab.update(jsonMove);
}
}
}
return result;
}
/**
* 创建任务
* @param taskMangeList仓位集合
@@ -1375,6 +1629,138 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
}
/**
* 创建任务
* @param taskMangeList仓位集合
* @param disLikeList分配明细集合
* @param point_code 终点
*/
private void createTask2(List<JSONObject> taskMangeList,List<JSONObject> disLikeList, String point_code, Consumer<String> allTransactionConsumer) {
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
// 点位表
WQLObject schBasePointService = WQLObject.getWQLObject("sch_base_point");
// 载具扩展属性表
WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
// 查询异常货位任务集合
String TaskCodeIn = taskMangeList.stream()
.filter(row -> row.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁")))
.map(row -> row.getString("task_code"))
.distinct().collect(Collectors.joining("','"));
List<JSONObject> taskList = taskService.query("task_id IN ('" + TaskCodeIn + "') and is_delete = '0'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
// 任务组标识
String task_group_id = IdUtil.getStringId();
// 起点
String start_device_code = "";
// 是否自动下发
String is_auto_issue = IOSEnum.IS_SEND.code("");
for (int i = 0; i < taskMangeList.size(); i++) {
JSONObject json = taskMangeList.get(i);
allTransactionConsumer.accept(json.getString("struct_code"));
// 确定起点
start_device_code = json.getString("struct_code");
// 确定终点: 根据仓位所在排确定终点
String end_device_code = IsEndCode(json);
// 过滤此仓位的分配明细
List<StIvtIostorinvdis> disDaoList = disLikeList.stream()
.filter(row -> row.getString("struct_code").equals(json.getString("struct_code")))
.map(row -> JSONObject.parseObject(JSONObject.toJSONString(row), StIvtIostorinvdis.class))
.collect(Collectors.toList());
// 判断是否是异常货位
if (json.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁"))) {
/*
* 判断异常货位上的任务是否完成
* 完成生成完成任务的point_code2 当做起点的任务
* 未完成:只更新分配明细状态为生成
*/
JSONObject jsonTask = taskList.stream()
.filter(row -> row.getString("task_id").equals(json.getString("task_code")))
.collect(Collectors.toList()).get(0);
// 完成
if (jsonTask.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) {
start_device_code = jsonTask.getString("point_code2");
is_auto_issue = IOSEnum.IS_SEND.code("");
} else {
// 未完成只更新分配明细状态不更新任务id
disDaoList.forEach(row -> {
row.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
row.setTask_id(Long.parseLong(task_group_id));
});
iStIvtIostorinvdisService.updateBatchById(disDaoList);
// 标记任务
jsonTask.put("is_auto_issue",IOSEnum.IS_SEND.code(""));
taskService.update(jsonTask);
continue;
}
}
// 查询木箱对应的载具
JSONObject jsonVeExt = extTab.query("pcsn = '" + json.getString("storagevehicle_code") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+json.getString("storagevehicle_code"));
}
// 生成任务
JSONObject jsonTaskParam = new JSONObject();
jsonTaskParam.put("task_type", "010711");
jsonTaskParam.put("point_code1", start_device_code);
jsonTaskParam.put("point_code2", end_device_code);
jsonTaskParam.put("vehicle_code", json.getString("storagevehicle_code"));
jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
jsonTaskParam.put("containerType", json.getString("storagevehicle_type"));
jsonTaskParam.put("task_group_id", task_group_id);
jsonTaskParam.put("is_auto_issue", is_auto_issue);
JSONObject request_param = new JSONObject();
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, json.getString("storagevehicle_code"))
);
request_param.put("containerType", boxDao.getVehicle_type());
jsonTaskParam.put("request_param", request_param);
jsonTaskParam.put("table_fk", disDaoList.get(0).getIostorinv_id().toString());
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("")) ||
json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("")))
{
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("")));
} else {
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("")));
}
jsonTaskParam.put("request_param", jsonTaskParam);
TwoOutTask twoOutTask = new TwoOutTask();
String task_id = twoOutTask.createTask(jsonTaskParam);
// 更新分配明细
JSONObject jsonPoint = schBasePointService.query("point_code = '" + end_device_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonPoint)) {
throw new BadRequestException("出库点位不存在:"+end_device_code);
}
disDaoList.forEach(row -> {
row.setWork_status(IOSEnum.WORK_STATUS.code("生成"));
row.setTask_id(Long.parseLong(task_id));
row.setPoint_id(jsonPoint.getLongValue("point_id"));
});
iStIvtIostorinvdisService.updateBatchById(disDaoList);
}
}
/**
* 确定终点:根据仓位所在排确定终点
* @param structDao仓位对象

View File

@@ -33,6 +33,7 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
@@ -479,4 +480,151 @@ public class OutBussManageServiceImpl implements OutBussManageService {
}
}
@Override
public void createMove2(List<JSONObject> list, Consumer<String> allTransactionConsumer) {
//子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
//物料表
WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase");
// 载具扩展属性表
WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
// 获取子卷包装集合
String vehilcle_in = list.stream()
.map(row -> row.getString("storagevehicle_code"))
.collect(Collectors.joining("','"));
List<JSONObject> subList = subTab.query("package_box_sn IN ('" + vehilcle_in + "')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
// 查询物料集合
String materialCode_in = subList.stream()
.map(row -> row.getString("product_name"))
.collect(Collectors.joining("','"));
List<JSONObject> materList = materTab.query("material_code IN ('" + materialCode_in + "')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
for (int i = 0; i < list.size(); i++) {
JSONObject json = list.get(i);
allTransactionConsumer.accept(json.getString("struct_code"));
// 生成移库单传入参数
JSONObject mapParam = new JSONObject();
// 明细参数
JSONArray table = new JSONArray();
mapParam.put("bill_type", IOSEnum.MOVE_TYPE.code("出库移库"));
mapParam.put("buss_type", IOSEnum.MOVE_TYPE.code("出库移库"));
mapParam.put("bill_status", IOSEnum.MOVE_STATUS.code("提交"));
mapParam.put("biz_date", DateUtil.today());
mapParam.put("stor_code", json.getString("stor_code"));
mapParam.put("stor_id", json.getString("stor_id"));
mapParam.put("stor_name", json.getString("stor_name"));
mapParam.put("is_task", IOSEnum.IS_NOTANDYES.code(""));
// 过滤对应物料
JSONObject jsonSub = subList.stream()
.filter(row -> row.getString("package_box_sn").equals(json.getString("storagevehicle_code")))
.collect(Collectors.toList()).get(0);
JSONObject jsonMater = materList.stream()
.filter(row -> row.getString("material_code").equals(jsonSub.getString("product_name")))
.collect(Collectors.toList()).get(0);
// 查询移入货位
JSONObject moveParam = new JSONObject();
moveParam.put("stor_id", json.getString("stor_id"));
moveParam.put("sect_id", RegionTypeEnum.TWO_BZC01.getId());
moveParam.put("box_no", json.getString("storagevehicle_code"));
moveParam.put("material_id", jsonMater.getString("material_id"));
//根据木箱高度,判断入库仓位的高度、
String height = "";
String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue();
String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue();
// 查询木箱信息
BstIvtBoxinfo boxDao = iBstIvtBoxinfoService.getOne(
new QueryWrapper<BstIvtBoxinfo>().lambda()
.eq(BstIvtBoxinfo::getBox_no, json.getString("storagevehicle_code"))
);
String box_high = boxDao.getBox_high();
if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) {
height = "('1','2','3')";
} else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) {
height = "('2','3')";
} else {
height = "('3')";
}
moveParam.put("height", height);
moveParam.put("vehicle_type", boxDao.getVehicle_type());
// 移库巷道
moveParam.put("move_block_num",json.getString("block_num"));
JSONObject jsonMove = inBussManageService.getOneStruct(moveParam);
// 查询移出货位的库存物料
JSONObject jsonMoveIvt = WQL.getWO("ST_OUTIVT03")
.addParam("flag", "6")
.addParam("struct_id", json.getString("struct_id"))
.process().uniqueResult(0);
// 移库单明细
JSONObject jsonMoveDtl = new JSONObject();
jsonMoveDtl.put("is_task", "2");
jsonMoveDtl.put("turnout_sect_id", json.getLongValue("sect_id"));
jsonMoveDtl.put("turnout_sect_code", json.getString("sect_code"));
jsonMoveDtl.put("turnout_sect_name", json.getString("sect_name"));
jsonMoveDtl.put("turnout_struct_id", json.getLongValue("struct_id"));
jsonMoveDtl.put("turnout_struct_code", json.getString("struct_code"));
jsonMoveDtl.put("turnout_struct_name", json.getString("struct_name"));
jsonMoveDtl.put("material_id", jsonMoveIvt.getLongValue("material_id"));
jsonMoveDtl.put("pcsn", jsonMoveIvt.getString("pcsn"));
jsonMoveDtl.put("quality_scode", IOSEnum.QUALITY_SCODE.code("合格品"));
jsonMoveDtl.put("qty_unit_id", jsonMoveIvt.getLongValue("qty_unit_id"));
jsonMoveDtl.put("qty_unit_name", jsonMoveIvt.getString("unit_name"));
jsonMoveDtl.put("qty", jsonMoveIvt.getDoubleValue("canuse_qty"));
jsonMoveDtl.put("storagevehicle_code", json.getString("storagevehicle_code"));
jsonMoveDtl.put("turnin_sect_id", jsonMove.getLongValue("sect_id"));
jsonMoveDtl.put("turnin_sect_code", jsonMove.getString("sect_code"));
jsonMoveDtl.put("turnin_sect_name", jsonMove.getString("sect_name"));
jsonMoveDtl.put("turnin_struct_id", jsonMove.getLongValue("struct_id"));
jsonMoveDtl.put("turnin_struct_code", jsonMove.getString("struct_code"));
jsonMoveDtl.put("turnin_struct_name", jsonMove.getString("struct_name"));
// 查询木箱对应的载具
JSONObject jsonVeExt = extTab.query("pcsn = '" + json.getString("storagevehicle_code") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+json.getString("storagevehicle_code"));
}
// 生成任务
JSONObject param2 = new JSONObject();
param2.put("task_type", "010709");
param2.put("vehicle_code", json.getString("storagevehicle_code"));
param2.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
param2.put("point_code1", json.getString("struct_code"));
param2.put("point_code2", jsonMove.getString("struct_code"));
HandMoveStorAcsTask handMoveStorAcsTask = new HandMoveStorAcsTask();
String move_task_id = handMoveStorAcsTask.createTask(param2);
// 回显移库明细任务id
jsonMoveDtl.put("task_id", move_task_id);
table.add(jsonMoveDtl);
mapParam.put("tableData", table);
// 调用移库单新增方法
handMoveStorService.insertDtl2(mapParam);
// 下发任务
handMoveStorAcsTask.immediateNotifyAcs(null);
}
}
}

View File

@@ -7,6 +7,7 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
/**
* <p>
@@ -66,4 +67,10 @@ public interface OutBussManageService {
*/
void createMove(List<JSONObject> list);
/**
* 创建移库单
* @param list 需要创建移库单的仓位
*/
void createMove2(List<JSONObject> list, Consumer<String> allTransactionConsumer);
}