rev:1.RGV输送线出库任务卡控只允许一条任务优化2.成品出库任务下发卡控优化
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
// 根据终点点位进行分组
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user