fix:去除桁架任务卡控了逻辑、新增空木箱出库改为系统参数配置卡控

This commit is contained in:
zhouz
2026-03-10 17:41:45 +08:00
parent 3d15ecd351
commit 0cb1b47d59
3 changed files with 70 additions and 12 deletions

View File

@@ -180,11 +180,11 @@ public class TwoOutBoxTask extends AbstractAcsTask {
} }
} }
RedissonUtils.lock(c->{ /*RedissonUtils.lock(c->{
if (status.equals(TaskStatusEnum.FINISHED.getCode())) { if (status.equals(TaskStatusEnum.FINISHED.getCode())) {
immediateNotifyAcs(null); immediateNotifyAcs(null);
} }
},"zjInBound",20,25,this); },"zjInBound",20,25,this);*/
} }
// 取消 // 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) { if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {

View File

@@ -11,13 +11,15 @@ import org.nl.b_lms.sch.tasks.TwoOutBoxTask;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService;
import org.nl.modules.wql.core.bean.WQLObject; 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.AcsTaskDto;
import org.nl.wms.sch.AcsUtil; import org.nl.wms.sch.AcsUtil;
import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.manage.TaskStatusEnum;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.*;
import static org.nl.wms.util.TaskUtil.getRoutePlanCode; import static org.nl.wms.util.TaskUtil.getRoutePlanCode;
@@ -47,20 +49,74 @@ public class AutoIssueOutEmptyTask {
* 下发给ACS时需要特殊处理 * 下发给ACS时需要特殊处理
*/ */
// 判断当前有多少个正在执行中的任务 // 判断当前有多少个正在执行中的任务
int num = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + TASK_CLASS + "' and task_status IN ('05','06') and is_delete ='0'") JSONArray task_ing = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + TASK_CLASS + "' and task_status IN ('05','06') and is_delete ='0'")
.getResultJSONArray(0).size(); .getResultJSONArray(0);
int num = task_ing.size();
int empty_num = Integer.parseInt(SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("empty_num").getValue());
// 如果缓存了4个箱子则不下发任务 // 如果缓存了4个箱子则不下发任务
if (num >= 2) { if (num >= empty_num) {
return; return;
} }
//判断当前目的点位上是否存在木箱
JSONArray packageinfoivt = WQLObject.getWQLObject("bst_ivt_packageinfoivt").query("point_status = '5' AND ivt_status = '1'").getResultJSONArray(0);
HashMap<String,Integer> pointNum = new HashMap<>();
pointNum.put("ZXQ_1_1",0);
pointNum.put("ZXQ_2_1",0);
for (int i = 0; i < task_ing.size(); i++) {
JSONObject task = task_ing.getJSONObject(i);
String pointCode2 = task.getString("point_code2");
if (pointNum.containsKey(pointCode2)){
int currentCount = pointNum.get(pointCode2);
pointNum.put(pointCode2, currentCount + 1);
}
}
for (int i = 0; i < packageinfoivt.size(); i++) {
JSONObject pack = packageinfoivt.getJSONObject(i);
String pointCode = pack.getString("point_code");
if (pointNum.containsKey(pointCode)){
int currentCount = pointNum.get(pointCode);
pointNum.put(pointCode, currentCount + 1);
}
}
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + TASK_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by create_time").getResultJSONArray(0); JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + TASK_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by create_time").getResultJSONArray(0);
// 3. 将JSONArray转为List<JSONObject>(方便自定义排序)
List<JSONObject> taskList = new ArrayList<>();
for (int i = 0; i < arr.size(); i++) { for (int i = 0; i < arr.size(); i++) {
taskList.add(arr.getJSONObject(i));
}
// 4. 按pointNum中装箱对接位的数量升序排序数量少的排前面
Collections.sort(taskList, new Comparator<JSONObject>() {
@Override
public int compare(JSONObject taskA, JSONObject taskB) {
// 获取两个任务的目的点
String pointA = taskA.getString("point_code2");
String pointB = taskB.getString("point_code2");
// 空值/未统计点位处理:默认给一个大数(排到最后)
int countA = pointNum.getOrDefault(pointA, Integer.MAX_VALUE);
int countB = pointNum.getOrDefault(pointB, Integer.MAX_VALUE);
// 升序排序countA - countB → 数量少的排前面
return Integer.compare(countA, countB);
}
});
// 5. 将排序后的List转回JSONArray供后续下发使用
JSONArray sortedArr = new JSONArray();
sortedArr.addAll(taskList);
for (int i = 0; i < sortedArr.size(); i++) {
if (num >= 2) { if (num >= 2) {
break; break;
} }
ArrayList<AcsTaskDto> resultList = new ArrayList<>(); ArrayList<AcsTaskDto> resultList = new ArrayList<>();
JSONObject json = arr.getJSONObject(i); JSONObject json = sortedArr.getJSONObject(i);
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
JSONObject attr = attrTab.query("struct_code = '" + json.getString("point_code1") + "'").uniqueResult(0); JSONObject attr = attrTab.query("struct_code = '" + json.getString("point_code1") + "'").uniqueResult(0);
@@ -111,7 +167,7 @@ public class AutoIssueOutEmptyTask {
resultList.add(dto); resultList.add(dto);
JSONArray list = JSONArray.parseArray(JSON.toJSONString(resultList)); JSONArray list = JSONArray.parseArray(JSON.toJSONString(resultList));
AcsUtil.notifyAcs("api/wms/task", list); AcsUtil.notifyAcs("api/wms/task", list);
num += 1; return;
} }
} }

View File

@@ -159,7 +159,8 @@ public class AutoSendVehicleToKzj extends Prun{
Set<String> task_block = new HashSet<>(); Set<String> task_block = new HashSet<>();
if (isCalling.equals(IOSEnum.IS_NOTANDYES.code(""))) { if (isCalling.equals(IOSEnum.IS_NOTANDYES.code(""))) {
//存在正在执行的行架任务 //存在正在执行的行架任务
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>() //不需要进行卡控桁架是否正在执行任务
/*List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否"))
.eq(SchBaseTask::getTask_type, "010909")); .eq(SchBaseTask::getTask_type, "010909"));
@@ -168,7 +169,7 @@ public class AutoSendVehicleToKzj extends Prun{
BstIvtPackageinfoivt one = packageinfoivtService.getOne(new LambdaQueryWrapper<BstIvtPackageinfoivt>() BstIvtPackageinfoivt one = packageinfoivtService.getOne(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getPoint_code, point_code)); .eq(BstIvtPackageinfoivt::getPoint_code, point_code));
task_block.add(one.getBlock()); task_block.add(one.getBlock());
}); });*/
/*if (ObjectUtils.isNotEmpty(taskList)) { /*if (ObjectUtils.isNotEmpty(taskList)) {
log.warn("当前装箱区存在执行的行架任务"+taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(","))); log.warn("当前装箱区存在执行的行架任务"+taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
return; return;
@@ -177,9 +178,10 @@ public class AutoSendVehicleToKzj extends Prun{
//存在装箱区有空载具的点位 //存在装箱区有空载具的点位
List<BstIvtPackageinfoivt> zxqVehicleList = packageinfoivtService List<BstIvtPackageinfoivt> zxqVehicleList = packageinfoivtService
.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具")); .selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
if (ObjectUtils.isNotEmpty(task_block)){ //不需要进行卡控桁架是否正在执行任务
/*if (ObjectUtils.isNotEmpty(task_block)){
zxqVehicleList = zxqVehicleList.stream().filter(zxq -> !task_block.contains(zxq.getBlock())).collect(Collectors.toList()); zxqVehicleList = zxqVehicleList.stream().filter(zxq -> !task_block.contains(zxq.getBlock())).collect(Collectors.toList());
} }*/
List<BstIvtPackageinfoivt> djqEmpList = packageinfoivtService List<BstIvtPackageinfoivt> djqEmpList = packageinfoivtService
.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code("")); .selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""));
if (CollectionUtils.isEmpty(zxqVehicleList) || CollectionUtils.isEmpty(djqEmpList)) { if (CollectionUtils.isEmpty(zxqVehicleList) || CollectionUtils.isEmpty(djqEmpList)) {