rev:1.RGV输送线出库任务卡控只允许一条任务优化2.成品出库任务下发卡控优化

This commit is contained in:
2024-08-18 18:23:17 +08:00
parent 2b873d0749
commit 20be60031a
4 changed files with 166 additions and 4 deletions

View File

@@ -13,6 +13,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
@@ -40,12 +41,30 @@ public class TwoOutHeapTask extends AbstractAcsTask {
//任务表
WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task");
JSONArray taskArr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
List<JSONObject> taskArrAll = wo_Task
.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' ORDER BY create_time")
.getResultJSONArray(0).toJavaList(JSONObject.class);
// 是否下发多个AGV输送出库任务
String is_send_many = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("is_send_many").getValue();
// 是否异常出库口任务
String TWO_EXCEP = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("TWO_EXCEP").getValue();
List<JSONObject> taskArr;
if (TWO_EXCEP.equals(IOSEnum.IS_NOTANDYES.code(""))) {
if (is_send_many.equals(IOSEnum.IS_NOTANDYES.code(""))) {
// 只允许每个行架点位有一条任务
taskArr = sendTask(taskArrAll);
} else {
taskArr = taskArrAll;
}
} else {
taskArr = taskArrAll;
}
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
for (int i = 0; i < taskArr.size(); i++) {
JSONObject json = taskArr.getJSONObject(i);
JSONObject json = taskArr.get(i);
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1);
AcsTaskDto dto = AcsTaskDto.builder()
@@ -79,6 +98,58 @@ public class TwoOutHeapTask extends AbstractAcsTask {
return resultList;
}
private List<JSONObject> sendTask(List<JSONObject> taskArrAll) {
/*
* 一个行架点位只允许一个任务正在执行或下发中
*/
WQLObject wo_Task = WQLObject.getWQLObject("sch_base_task");
ArrayList<JSONObject> taskArr = new ArrayList<>();
// 判断这两个点位是否有任务:如果没有则下发任务
List<JSONObject> pointJson = wo_Task.query("handle_class = '" + THIS_CLASS + "' AND task_status IN ('05','06') AND is_delete = '0' ORDER BY point_code2")
.getResultJSONArray(0).toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(pointJson)) {
// 下发两个的任务
JSONObject oneJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(oneJson)) {
taskArr.add(oneJson);
}
JSONObject twoJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(twoJson)) {
taskArr.add(twoJson);
}
} else {
// 哪里空了就下发哪里的
if (pointJson.size() == 1) {
JSONObject json = pointJson.get(0);
if (json.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1"))) {
JSONObject twoJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位2")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(twoJson)) {
taskArr.add(twoJson);
}
} else {
JSONObject oneJson = taskArrAll.stream()
.filter(row -> row.getString("point_code2").equals(IOSEnum.OUT_HANGER.code("行架位1")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(oneJson)) {
taskArr.add(oneJson);
}
}
}
}
return taskArr;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) {
@@ -132,6 +203,8 @@ public class TwoOutHeapTask extends AbstractAcsTask {
LashManageServiceImpl bean1 = SpringContextHolder.getBean(LashManageServiceImpl.class);
bean1.createLashTask(jsonParam);
// 再次下发
immediateNotifyAcs(null);
}
}
}

View File

@@ -645,6 +645,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 创建手动式事务
ArrayList<String> arr = new ArrayList<>();
TranUtil.openTransaction((req, allTransactionConsumer) -> {
// 判断是否有异常任务
String exceptionPointCode = exceptionPointCode(disDaoList);
if (ObjectUtil.isNotEmpty(exceptionPointCode)) {
throw new BadRequestException(exceptionPointCode);
}
for (List<JSONObject> disLikeList : groupingDisMap.values()) {
// 调用任务生成处理
List<JSONObject> taskMangeList = createTaskMange2(disLikeList,mstDao.getIostorinv_id().toString(),allTransactionConsumer);
@@ -1960,4 +1966,71 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
return mstDao;
}
/**
* 判断是否有异常货位 - 10
* @param disDaoList - 分配明细集合
* @return 仓位
*/
private String exceptionPointCode(List<JSONObject> disDaoList) {
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
WQLObject TaskTab = WQLObject.getWQLObject("sch_base_task");
String result = "";
// 查找库内是否有异常货位
List<JSONObject> attrExceptionList = attrTab
.query("sect_code = 'BZC01' AND is_delete = '0' AND is_used = '1' and lock_type = '" + IOSEnum.LOCK_TYPE.code("出库异常锁") + "' and zdepth = '"+IOSEnum.ZDEPTH_STRUCT.code("")+"'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(attrExceptionList)) {
return null;
}
List<JSONObject> exceptionList = new ArrayList<>();
// 查询异常货位对应的深货位
attrExceptionList.forEach(row -> {
JSONObject json = attrTab.query("row_num = '" + row.getString("row_num") + "' AND col_num = '" + row.getString("col_num") + "' AND " +
"layer_num = '" + row.getString("layer_num") + "' AND zdepth = '" + IOSEnum.ZDEPTH_STRUCT.code("") + "'"
).uniqueResult(0);
if (ObjectUtil.isNotEmpty(json)) {
exceptionList.add(json);
}
});
// 进行对比
String struct_code_in = disDaoList.stream()
.map(row -> row.getString("struct_code"))
.distinct()
.collect(Collectors.joining("','"));
List<JSONObject> resultList = exceptionList.stream()
.filter(row -> struct_code_in.contains(row.getString("struct_code")))
.collect(Collectors.toList());
if (ObjectUtil.isEmpty(resultList)) {
return null;
} else {
JSONObject jsonObject = resultList.get(0);
JSONObject expJson = attrExceptionList.stream()
.filter(row -> row.getString("row_num").equals(jsonObject.getString("row_num")))
.filter(row -> row.getString("col_num").equals(jsonObject.getString("col_num")))
.filter(row -> row.getString("layer_num").equals(jsonObject.getString("layer_num")))
.filter(row -> row.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("")))
.findFirst().orElse(null);
if (ObjectUtil.isEmpty(expJson)) {
return "货位【"+jsonObject.getString("struct_code")+"'】 对应的浅货位有出库异常任务,请检查!";
}
// 查询对应的异常任务
JSONObject jsonTask = TaskTab
.query("handle_class = '" + TwoOutExceptionalTask.class.getName() + "' AND is_delete = '0' and point_code2 = '" + expJson.getString("struct_code") + "' ORDER BY create_time DESC")
.uniqueResult(0);
result = "请先下发木箱号为【"+jsonTask.getString("vehicle_code")+"】的出库任务!";
}
return result;
}
}

View File

@@ -103,6 +103,9 @@ public class LashManageServiceImpl implements LashManageService {
JSONObject jsonSub = WQLObject.getWQLObject("pdm_bi_subpackagerelation")
.query("package_box_sn = '" + boxDao.getBox_no() + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonSub)) {
throw new BadRequestException("子卷包装关系不存在:【"+boxDao.getBox_no()+"");
}
//查询木箱对应的托盘绑定关系,并清除
WQLObject veExtTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
@@ -226,7 +229,7 @@ public class LashManageServiceImpl implements LashManageService {
// 比较两行架点位的任务个数
List<JSONObject> executeArr = WQLObject.getWQLObject("SCH_BASE_Task")
.query("handle_class = '" + TwoOutHeapTask.class.getName() + "' and task_status IN ('05','06') and is_delete = '0' ")
.query("handle_class = '" + TwoOutHeapTask.class.getName() + "' and task_status IN ('04','05','06') and is_delete = '0' ")
.getResultJSONArray(0).toJavaList(JSONObject.class);
// 根据终点点位进行分组

View File

@@ -2236,6 +2236,19 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (type.equals("1") || type.equals("4")) {
point_code = inBussManageService.taskExceptional(whereJson);
}
} else if (taskDao.getTask_type().equals(TASKEnum.PROUD_TYPE.code("成品出库"))) {
// 成品出库:空出
if (type.equals("2")) {
taskDao.setRemark("【空出】请检查货位库存!");
taskDao.setCar_no("【空出】请检查货位库存!");
taskService.updateById(taskDao);
result.put("status", HttpStatus.OK.value());
result.put("message", "【成品出库】空出,任务跳过处理!");
result.put("point_code", "");
result.put("vehicle_code", "");
log.info("deviceApplyExceptional返回参数---------------------------------------------" + result.toString());
return result;
}
}
if (!type.equals("3") && ObjectUtil.isEmpty(point_code)) {