diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java index baf9cb4fb..911db000e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/IBstIvtCutpointivtService.java @@ -83,4 +83,13 @@ public interface IBstIvtCutpointivtService extends IService { * @return */ List getAreaNotTaskPointByLocationAreaAndStatus(String location); + + /** + * 获取一半的点位 + * @param type 点位类型:1套轴对接位,2分切缓存位,3分切对接位 + * @param pointStatus 点位状态:1空位、2有气涨轴、3有子卷 + * @param location 区域:0上1下 + * @return / + */ + List getAllHalfPlacePoints(String type, String pointStatus, String location); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java index f1c122218..934c1b105 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.java @@ -16,4 +16,6 @@ public interface BstIvtCutpointivtMapper extends BaseMapper { List getPointByTypeAndShaftSize(String type, String size, String generation); List getAreaNotTaskPointByLocationAreaAndStatus(String location); + + List getAllHalfPlacePoints(String type, String pointStatus, String location); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml index 0dd7c4c97..3a4c9555e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/dao/mapper/BstIvtCutpointivtMapper.xml @@ -63,4 +63,34 @@ OR t.point_code1 = bic.truss_point_code2 oR t.point_code2 = bic.truss_point_code2) ) + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java index b774b79c8..63634fda2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/cutpointivt/service/impl/BstIvtCutpointivtServiceImpl.java @@ -118,4 +118,9 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getAreaNotTaskPointByLocationAreaAndStatus(String location) { return bstIvtCutpointivtMapper.getAreaNotTaskPointByLocationAreaAndStatus(location); } + + @Override + public List getAllHalfPlacePoints(String type, String pointStatus, String location) { + return bstIvtCutpointivtMapper.getAllHalfPlacePoints(type, pointStatus, location); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java index 6caabfa53..b62a1608c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/IPdmBiSlittingproductionplanService.java @@ -63,4 +63,11 @@ public interface IPdmBiSlittingproductionplanService extends IService getByQzzNos(List qzzNo, String status); + + /** + * 获取需要的分切计划 + * @param qzzs / + * @return / + */ + List getAllHalfPlan(List qzzs); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java index 3d00a379c..c3ada8353 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.java @@ -13,4 +13,6 @@ import java.util.List; public interface PdmBiSlittingproductionplanMapper extends BaseMapper { List getAllCutPlan(); + + List getAllHalfPlan(List qzzs); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml index 38b92bc50..296520e16 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/dao/mapper/PdmBiSlittingproductionplanMapper.xml @@ -88,4 +88,63 @@ p.split_group, p.up_or_down + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java index a54cb40de..8f05ce315 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/bi/slittingproductionplan/service/impl/PdmBiSlittingproductionplanServiceImpl.java @@ -99,6 +99,10 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl getAllHalfPlan(List qzzs) { + return pdmBiSlittingproductionplanMapper.getAllHalfPlan(qzzs); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java index c9c60d44a..1d92ff64b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/controller/PdmBiSubpackagerelationController.java @@ -103,7 +103,7 @@ public class PdmBiSubpackagerelationController { } @PostMapping("/updateEntityList") - @Log("子卷分配木箱规格") + @Log("子卷装箱") //@SaCheckPermission("@el.check(updateEntityList)") public ResponseEntity updateEntityList(@RequestBody JSONObject whereJson) { pdmBiSubpackagerelationService.updateEntityList(whereJson); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index 994fe22fc..e899a8eac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -16,14 +16,17 @@ import cn.hutool.core.date.DateUtil; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.tasks.first_floor_area.ZxDjwTask; import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask; +import org.nl.b_lms.sch.tasks.first_floor_area.auto.TaskQueueManager; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.modules.common.exception.BadRequestException; +import org.nl.system.service.param.ISysParamService; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.nl.common.domain.query.PageQuery; @@ -61,7 +64,8 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) { - return pdmBiSubpackagerelationMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()), new QueryWrapper() .lambda()); } @@ -175,7 +178,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl entityList, List packagerelationList, String boxType) { + JSONObject boxInfo = new JSONObject(); + boxInfo.put("device_code", "ZXQ_2_1"); + boxInfo.put("material_code", "MX6510"); + //String workorderId = "1597797877554483219"; + //子卷个数 + boxInfo.put("num", "1"); + String boxSn = outBoxManageService.outBox(boxInfo); + if (StringUtils.isBlank(boxSn)) { + throw new BadRequestException("库位 -> 装箱对接位,木箱码不能为空!"); + } + //更新子卷包装关系更新木箱号 + // UpdateWrapper updateWrapper1 = new UpdateWrapper<>(); + // updateWrapper1.set("package_box_sn", boxSn); + // updateWrapper1.eq("workorder_id", workorderId); + // pdmBiSubpackagerelationMapper.update(null, updateWrapper1); + } + + + + + private void transferToPacking1(List packagerelationList) { + JSONObject jo = new JSONObject(); + //子卷号 + String containerName = "A1652211050505A2"; + //获取纸管长度 + String frpDescription = "1300"; + //获取木箱高度等级 + String height = "730"; + //起点 + String point_code1 = "ZXQ_1_9"; + //终点 + String point_code2 = "ZXQ_1_1"; + //托盘类型 1小托盘 2大托盘 + String containerType = "2"; + //木箱高度等级 + String heightLevel = ""; + String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); + String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); + if (Integer.parseInt(height) <= Integer.parseInt(heightLevel1)) { + heightLevel = "1"; + } else if (Integer.parseInt(height) > Integer.parseInt(heightLevel1) && Integer.parseInt(height) <= Integer.parseInt(heightLevel2)) { + heightLevel = "2"; + } else { + heightLevel = "3"; + } + jo.put("point_code1", point_code1); + jo.put("point_code2", point_code2); + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); + jo.put("vehicle_code", containerName); + jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + jo.put("is_send", "1"); + JSONObject param = new JSONObject(); + //木箱最大数量 + param.put("maxNo", "1"); + //木箱放入子卷数量 + param.put("boxNo", "1"); + //是否最后子卷 + param.put("lastOne", "1"); + //子卷号 + param.put("barcode", containerName); + //子卷长度 + param.put("len", frpDescription); + //木箱高度等级 + param.put("heightLevel", heightLevel); + //托盘类型 1小托盘 2大托盘 + param.put("containerType", containerType); + jo.put("request_param", param.toString()); + zxDjwTask.createTask(jo); + } + + /** * 空木箱出库 @@ -265,7 +345,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl 待检区,木箱码不能为空!"); + throw new BadRequestException("库位 -> 装箱对接位,木箱码不能为空!"); } //更新子卷包装关系更新木箱号 UpdateWrapper updateWrapper1 = new UpdateWrapper<>(); @@ -276,6 +356,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl装箱区agv任务 */ @@ -285,7 +366,7 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl() .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区")) .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("有子卷")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("合格品")) .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); Set containerNames = packagerelationList.stream() .map(PdmBiSubpackagerelation::getContainer_name) @@ -293,37 +374,35 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl djqPoints = djqPointList.stream() .filter(djqPoint -> containerNames.contains(djqPoint.getContainer_name())) .collect(Collectors.toList()); - //下发agv任务 + //任务组id + String groupId =deviceCode.substring(deviceCode.indexOf("_") + 1); + List schBaseTaskList =new ArrayList<>(); + //确定起点,安装装箱组标识加入任务队列 djqPoints.forEach(r -> { - //装箱区点位 - List zxqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) - .eq(BstIvtPackageinfoivt::getBlock, deviceCode.substring(deviceCode.indexOf("_") + 1)) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); JSONObject jo = new JSONObject(); jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); jo.put("vehicle_code", r.getContainer_name()); jo.put("point_code1", r.getPoint_code()); //木箱号 jo.put("vehicle_code2", boxSn); - //装箱区没满,则确定起点与终点,如果满了则只确定起点 - if (CollectionUtils.isNotEmpty(zxqPointList)) { - jo.put("point_code2", zxqPointList.get(0).getPoint_code()); - } - zxqTask.createTask(jo); + SchBaseTask task = zxqTask.dynamicCreateTask(jo); + //增加任务到队列 + schBaseTaskList.add(task); }); + TaskQueueManager taskQueueManager = new TaskQueueManager(); + taskQueueManager.addTasksToQueue(deviceCode,schBaseTaskList); } + + + private void transferToPacking(List packagerelationList) { //下发装箱区->装箱对接位桁架任务 JSONObject jo = new JSONObject(); jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("装箱区->装箱对接位")); //todo 测试,装箱点位-1-1 - jo.put("point_code1", "ZXQ_1_9"); + jo.put("point_code1", "ZXQ_1_8"); //todo 测试,装箱对接位01 jo.put("point_code2", "ZXQ_1_1"); jo.put("vehicle_code", packagerelationList.get(0).getContainer_name()); @@ -356,13 +435,15 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery pageable); + /** + * 查询没有搬运任务的空的目标点位 + * @param ivtType 点位类型 + * @param ivtStatus 库存状态 + * @return List + */ + List checkEndPointTask(String ivtType, String ivtStatus, String pointCode,String taskType); + + + + + /** * 创建 * @@ -52,6 +66,9 @@ public interface IbstIvtPackageinfoivtService extends IService ids); + + + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java index 57c1e8192..e1634621c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/point/service/impl/BstIvtPackageinfoivtServiceImpl.java @@ -1,20 +1,27 @@ package org.nl.b_lms.sch.point.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.dao.mapper.BstIvtPackageinfoivtMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import cn.hutool.core.date.DateUtil; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.nl.common.domain.query.PageQuery; import javax.annotation.Resource; +import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; /** @@ -30,6 +37,14 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl checkEndPointTask(String ivtType, String ivtStatus, String pointCode,String taskType) { + List bstIvtPackageinfoivtList = bstIvtPackageinfoivtMapper + .selectList(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .eq(BstIvtPackageinfoivt::getPoint_status, ivtType) + .eq(BstIvtPackageinfoivt::getIvt_status, ivtStatus) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + if (pointCode.equals("1")) { + List taskList = taskService.list(new LambdaUpdateWrapper() + //起点未完成任务 + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getTask_type, taskType) + .and( + r -> r.in(SchBaseTask::getPoint_code1, bstIvtPackageinfoivtList) + )); + return bstIvtPackageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code1).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList()); + } else { + List taskList = taskService.list(new LambdaUpdateWrapper() + //终点未完成任务 + .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .eq(SchBaseTask::getTask_type, taskType) + .and( + r -> r.in(SchBaseTask::getPoint_code2, bstIvtPackageinfoivtList) + )); + return bstIvtPackageinfoivtList.stream().filter(r -> !taskList.stream().map(SchBaseTask::getPoint_code2).collect(Collectors.toSet()).contains(r.getPoint_code())).collect(Collectors.toList()); + } + } + + + /** * 创建 * diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/impl/SchBaseTaskServiceImpl.java index fd91c6756..4c33fefe3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/impl/SchBaseTaskServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -109,6 +109,10 @@ public class SchBaseTaskServiceImpl extends ServiceImpl Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) { throw new BadRequestException("任务已执行不能取消"); } - // 更新任务表删除字段 map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是")); - // 解锁仓位 JSONObject jsonAttr = attrTab.query("struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); jsonAttr.put("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")); attrTab.update(jsonAttr); } - map.put("update_optid", SecurityUtils.getCurrentUserId()); map.put("update_optname", SecurityUtils.getCurrentNickName()); map.put("update_time", DateUtil.now()); - WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java index 05197bbc2..81c4b1f54 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutEmpTask.java @@ -17,6 +17,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import static org.nl.wms.util.TaskUtil.getRoutePlanCode; + /** * 二期空托盘出库任务类 * Created by Lxy on 2024/1/19. @@ -45,6 +47,7 @@ public class TwoOutEmpTask extends AbstractAcsTask { .task_code(json.getString("task_code")) .task_type(json.getString("acs_task_type")) .start_device_code(json.getString("point_code1")) + .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) .next_device_code(json.getString("point_code2")) .vehicle_code(json.getString("vehicle_code")) .priority(json.getString("priority")) @@ -167,7 +170,6 @@ public class TwoOutEmpTask extends AbstractAcsTask { json.put("create_time", DateUtil.now()); json.put("priority", "1"); json.put("acs_task_type", "7"); - WQLObject.getWQLObject("SCH_BASE_Task").insert(json); return json.getString("task_id"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java index 81ce93f2e..74ad6b44f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java @@ -18,6 +18,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import static org.nl.wms.util.TaskUtil.getRoutePlanCode; + /** * 二期出库异常任务类 * Created by Lxy on 2024/1/19. @@ -50,6 +52,7 @@ public class TwoOutExceptionalTask extends AbstractAcsTask { .vehicle_code(json.getString("vehicle_code")) .priority(json.getString("priority")) .class_type(json.getString("task_type")) + .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) .dtl_type(String.valueOf(dtl_type)) .remark(json.getString("remark")) .build(); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java index 0ac8617e2..0b8419274 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutTask.java @@ -30,6 +30,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static org.nl.wms.util.TaskUtil.getRoutePlanCode; + /** * Created by Lxy on 2021/12/22. */ @@ -101,6 +103,7 @@ public class TwoOutTask extends AbstractAcsTask { .next_device_code(json.getString("point_code2")) .vehicle_code(json.getString("vehicle_code")) .interaction_json(json.getJSONObject("request_param")) + .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) .priority(json.getString("priority")) .class_type(json.getString("task_type")) .dtl_type(String.valueOf(dtl_type)) @@ -158,6 +161,7 @@ public class TwoOutTask extends AbstractAcsTask { // 调用标识完成 StIvtIostorinvOutServiceImpl bean = SpringContextHolder.getBean(StIvtIostorinvOutServiceImpl.class); bean.finishTask(jsonTask); + // 判断此任务组是否全部完成 JSONArray resultJSONArray = taskTab.query("task_group_id = '" + jsonTask.getString("task_group_id") + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'") .getResultJSONArray(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java index e25acb39e..7b5d04e7e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoSendOutTask.java @@ -26,6 +26,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import static org.nl.wms.util.TaskUtil.getRoutePlanCode; + @Service @RequiredArgsConstructor @Slf4j @@ -54,6 +56,7 @@ public class TwoSendOutTask extends AbstractAcsTask { .priority(json.getString("priority")) .class_type(json.getString("task_type")) .dtl_type(String.valueOf(dtl_type)) + .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) .remark(json.getString("remark")) .build(); resultList.add(dto); @@ -127,13 +130,13 @@ public class TwoSendOutTask extends AbstractAcsTask { if (cutConveyorTask.isSingleTask(point_code2)) { throw new BadRequestException("点位:" + point_code2 + "存在未完成的任务!"); } - JSONObject json = new JSONObject(); json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); json.put("task_type", form.getString("task_type")); json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); json.put("point_code1", form.getString("point_code1")); + json.put("route_plan_code", getRoutePlanCode(json.getString("point_code1"))); json.put("point_code2", form.getString("point_code2")); json.put("vehicle_code", form.getString("vehicle_code")); json.put("handle_class", THIS_CLASS); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java index e258f040d..0443bbe3d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java @@ -4,21 +4,21 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; import org.nl.b_lms.sch.task.service.IschBaseTaskService; 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.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -72,10 +72,8 @@ public class DjqTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) - //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) - //.dtl_type(r.getDtl_type()) - //.params(r.getParams()) + .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) + .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); resultList.add(dto); }); @@ -87,7 +85,7 @@ public class DjqTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("满轴缓存位 -> 待检区更新接口任务号为空!"); + throw new BadRequestException("满轴缓存位 -> 待检区完成接口任务号为空!"); } if (StringUtils.isBlank(schBaseTask.getVehicle_code())) { throw new BadRequestException("满轴缓存位 -> 待检区,子卷号不能为空!"); @@ -102,18 +100,26 @@ public class DjqTask extends AbstractAcsTask { //2.改变起点点位状态 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); //3更新库存记录 - packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); - //4.查询是否有未下发的输送线->满轴位任务,有就下发 - List notIssueTaskList = taskService.list(new LambdaUpdateWrapper() - //确定起点 + //todo 暂时改为质检合格品 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("合格品")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); + //4.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务 + List taskList = taskService.list(new LambdaQueryWrapper() + //确定起点未下发 + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .eq(SchBaseTask::getPoint_code1, "NBJ1002") .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())); - if (CollectionUtils.isNotEmpty(notIssueTaskList)) { - JSONObject jo = (JSONObject) JSONObject.toJSON(notIssueTaskList.get(0)); - jo.put("point_code2", schBaseTask.getPoint_code1()); - jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); - jo.put("is_send", true); - mzhcwTask.createTask(jo); + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + ); + if (CollectionUtils.isNotEmpty(taskList)) { + SchBaseTask task = taskList.get(0); + task.setPoint_code2(schBaseTask.getPoint_code1()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setUpdate_time(DateUtil.now()); + task.setUpdate_optid(SecurityUtils.getCurrentUserId()); + task.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(task); + //任务下发 + mzhcwTask.immediateNotifyAcs(task.getTask_id().toString()); } } // 取消 @@ -207,4 +213,6 @@ public class DjqTask extends AbstractAcsTask { schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); taskService.update(schBaseTask); } + + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java index b9a81ce8b..acdad9c4a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java @@ -3,7 +3,9 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; @@ -67,10 +69,10 @@ public class GzqTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) + .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) //.dtl_type(r.getDtl_type()) - //.params(r.getParams()) + .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); resultList.add(dto); }); @@ -82,7 +84,7 @@ public class GzqTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("满轴缓存位 -> 管制区更新接口任务号为空!"); + throw new BadRequestException("满轴缓存位 -> 管制区完成接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 @@ -95,17 +97,24 @@ public class GzqTask extends AbstractAcsTask { packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); //更新库存记录 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); - //3.查询是否有未下发的输送线->满轴位任务,有就下发 - List notIssueTaskList = taskService.list(new LambdaUpdateWrapper() - //确定起点 + //3.判断是否存在确定起点的输送线->满轴缓存位任务,存在就下发任务 + List taskList = taskService.list(new LambdaQueryWrapper() + //确定起点未下发 + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) + .eq(SchBaseTask::getPoint_code1, "NBJ1002") .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())); - if (CollectionUtils.isNotEmpty(notIssueTaskList)) { - JSONObject jo = (JSONObject) JSONObject.toJSON(notIssueTaskList.get(0)); - jo.put("point_code2", schBaseTask.getPoint_code1()); - jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); - jo.put("is_send", true); - mzhcwTask.createTask(jo); + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + ); + if (CollectionUtils.isNotEmpty(taskList)) { + SchBaseTask task = taskList.get(0); + task.setPoint_code2(schBaseTask.getPoint_code1()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setUpdate_time(DateUtil.now()); + task.setUpdate_optid(SecurityUtils.getCurrentUserId()); + task.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(task); + //任务下发 + mzhcwTask.immediateNotifyAcs(task.getTask_id().toString()); } } // 取消 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java index cb7be9a16..862c84cb5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java @@ -4,12 +4,15 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -28,10 +31,10 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; + /** - * 3 目标空载具缓存位, 待检区或管制区 -> 空载具缓存位 , 补空载具, agv任务 + * 3 目标空载具缓存位, 待检区或管制区 -> 空载具缓存位补空agv任务 * * @author gbx * @since 2024-01-24 @@ -48,10 +51,8 @@ public class KzjhcwTask extends AbstractAcsTask { @Resource private IbstIvtPackageinfoivtService packageinfoivtService; - - @Resource - private KzjhcwTask kzjhcwTask; + private SsxDjwTask ssxDjwTask; @Override @@ -74,10 +75,8 @@ public class KzjhcwTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) - //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) - //.dtl_type(r.getDtl_type()) - //.params(r.getParams()) + .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) + .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); resultList.add(dto); }); @@ -87,10 +86,9 @@ public class KzjhcwTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false); - ; + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("待检区或管制区 -> 空载具缓存位更新接口任务号为空!"); + throw new BadRequestException("待检区或管制区 -> 空载具缓存位完成接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 @@ -102,28 +100,25 @@ public class KzjhcwTask extends AbstractAcsTask { //2.改变起点点位状态 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); //更新库存记录 - packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); - //3.待检区搬运空载具到空载具缓存位完毕,判断是否有未下发的空载具送输送线任务,有就下发 - List bstIvtPackageinfoivtList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - //待检区和管控区点位 - List djqPointList = bstIvtPackageinfoivtList.stream().filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) - || PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status())).collect(Collectors.toList()); + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); + //3.待检区或管制区搬运空载具到空载具缓存位完毕,判断是否存在确定终点的空载具缓存位->输送线任务,存在就下发任务 List taskList = taskService.list(new LambdaQueryWrapper() - //确定起点未下发 - .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) - .and(r -> - r.in(SchBaseTask::getPoint_code1, djqPointList) - ) - ); - taskList.forEach(r -> { - //任务下发 - kzjhcwTask.immediateNotifyAcs(r.getTask_id().toString()); - } + //确定终点未下发 + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_END.getCode()) + .eq(SchBaseTask::getPoint_code2, "NBJ1002") + .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")).eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) ); + if (CollectionUtils.isNotEmpty(taskList)) { + SchBaseTask task = taskList.get(0); + task.setPoint_code1(schBaseTask.getPoint_code2()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setUpdate_time(DateUtil.now()); + task.setUpdate_optid(SecurityUtils.getCurrentUserId()); + task.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(task); + //任务下发 + ssxDjwTask.immediateNotifyAcs(task.getTask_id().toString()); + } } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -215,4 +210,45 @@ public class KzjhcwTask extends AbstractAcsTask { schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); taskService.update(schBaseTask); } + + /** + * 装箱区->空载具缓存位补空 + */ + public void toKzjHcw(String pointCode) { + //存在空载具缓存位无空载具的点位 + List kzjIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("空"), "2", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); + String pointCode1 = null; + JSONObject toKzjHcwTask = new JSONObject(); + if (StringUtils.isNotBlank(pointCode)) { + pointCode1 = pointCode; + } else { + //查询待检区有空载具 + List djqPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区")) + .eq(BstIvtPackageinfoivt::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + if (CollectionUtils.isNotEmpty(djqPointList)) { + pointCode1 = djqPointList.get(0).getPoint_code(); + } else { + //去管制区搬运空载具 + List gzqPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("管制区")) + .eq(BstIvtPackageinfoivt::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + if (CollectionUtils.isNotEmpty(gzqPointList)) { + pointCode1 = gzqPointList.get(0).getPoint_code(); + } + } + //去待检区或管制区搬运空载具 + if (CollectionUtils.isNotEmpty(kzjIvtList) && pointCode1 != null) { + toKzjHcwTask.put("point_code1", pointCode1); + //送到到任意空载具缓存位 + toKzjHcwTask.put("point_code2", kzjIvtList.get(0).getPoint_code()); + toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); + this.createTask(toKzjHcwTask); + } + } + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java index 53d4d63b3..d178935da 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -94,10 +95,7 @@ public class MzhcwTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - //.agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) - //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) - //.dtl_type(r.getDtl_type()) - //.params(r.getParams()) + .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); resultList.add(dto); }); @@ -109,7 +107,7 @@ public class MzhcwTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("输送线点位 -> 满轴缓存位更新接口任务号为空!"); + throw new BadRequestException("输送线点位 -> 满轴缓存位完成接口任务号为空!"); } // 执行中 if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { @@ -120,66 +118,25 @@ public class MzhcwTask extends AbstractAcsTask { if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { //1.更改任务状态为完成 schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); - //2.改变起点点位状态 - packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //更新库存记录 + //2.更新库存记录 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); //3.任务一、待检区AGV搬运任务,查询子卷信息,去分切计划表查找定级数据,桁架任务完成根据子卷定级创建AGV任务将满轴搬运至质检区或管制区 - if (StringUtils.isBlank(schBaseTask.getVehicle_code())) { - throw new BadRequestException("子卷号不能为空!"); - } - PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper() - .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code())); - if (containerInfo == null) { - throw new BadRequestException("找不到子卷信息!"); - } - //子卷等级 - String level = containerInfo.getLevel() == null ? "1" : containerInfo.getLevel(); - // if (Arrays.stream(ContainerLevelEnum.values()).noneMatch(enumItem -> enumItem.getCode().equals(level))) { - // throw new BadRequestException("非法的子卷等级!"); - // } - //查询待检区和管制区库位情况 - List bstIvtPackageinfoivtList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - // JSONObject toDjqTask = new JSONObject(); - // //获取子卷号 - // toDjqTask.put("vehicle_code", containerInfo.getContainer_name()); - // // 判断子卷等级属于待检区还是管制区,创建满轴缓存位到待检区或管制区的agv任务 - // if (Stream.of(ContainerLevelEnum.BEST, ContainerLevelEnum.WELL, ContainerLevelEnum.COMMON).anyMatch(enumItem -> enumItem.getCode().equals(level))) { - // List djqPointList = bstIvtPackageinfoivtList.stream() - // .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) - // && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status())).collect(Collectors.toList()); - // if (CollectionUtils.isEmpty(djqPointList)) { - // throw new BadRequestException("待检区暂无空余库位!"); - // } - // toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); - // toDjqTask.put("point_code1", schBaseTask.getPoint_code2()); - // toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); - // djqTask.createTask(toDjqTask); - // } else if (Stream.of(ContainerLevelEnum.REWORK, ContainerLevelEnum.CONTROL).anyMatch(enumItem -> enumItem.getCode().equals(level))) { - // List gkqPointList = bstIvtPackageinfoivtList.stream() - // .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status()) - // && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status())).collect(Collectors.toList()); - // if (CollectionUtils.isEmpty(gkqPointList)) { - // throw new BadRequestException("管控区暂无空余库位!"); - // } - // toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")); - // toDjqTask.put("point_code1", schBaseTask.getPoint_code2()); - // toDjqTask.put("point_code2", gkqPointList.get(0).getPoint_code()); - // gzqTask.createTask(toDjqTask); - // } - //4.创建空载具到输送线任务 - // if (schBaseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))) { - List kzjPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())).collect(Collectors.toList()); + //createTaskToDjq(schBaseTask); + //4.创建空载具到输送线任务,完成后需要创建空载具缓存位->输送线任务 + if (schBaseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))) { + //如果是输送线->满轴缓存位任务 + List kzjPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); JSONObject toSsxTask = new JSONObject(); toSsxTask.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); toSsxTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")); - toSsxTask.put("vehicle_code", containerInfo.getContainer_name()); - //判断空载具缓存位是否有空载具库存,有就叫桁架去任一一个位置搬空载具 + toSsxTask.put("vehicle_code", schBaseTask.getVehicle_code()); + //toSsxTask.put("vehicle_code", containerInfo.getContainer_name()); + //判断空载具缓存位是否有空载具库存,有就叫桁架去任一位置搬空载具 if (CollectionUtils.isNotEmpty(kzjPointList)) { //直接创建搬运空载具任务 toSsxTask.put("point_code1", kzjPointList.get(0).getPoint_code()); @@ -187,49 +144,11 @@ public class MzhcwTask extends AbstractAcsTask { toSsxTask.put("point_code2", schBaseTask.getPoint_code1()); ssxDjwTask.createTask(toSsxTask); } else { - //空载具缓存位没有可用的库存:判断是否有正在搬运空载具过来的任务,有的话不创建 - //没有的话创建搬运空载具任务, 当任务完成的时候,补发桁架任务。 - List packageinfoivtList = packageinfoivtService.list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))); - //todo 查找正在搬运到待检区的任务,假设只有一个 - List taskList = taskService.list(new LambdaUpdateWrapper() - //执行中 - .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) - .and( - r -> r.in(SchBaseTask::getPoint_code2, packageinfoivtList) - )); - //没有正在搬运空载具过来的任务,创建搬运空载具任务 - if (CollectionUtils.isEmpty(taskList)) { - //查询待检区或管制区有空载具的 - List djqOrGzqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .in(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.POINT_STATUS.code("管制区")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - List djqPointList = djqOrGzqPointList.stream().filter(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))).collect(Collectors.toList()); - //待检区库位有空载具 - if (CollectionUtils.isNotEmpty(djqPointList)) { - List kzjPoint = packageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())) - .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)) - .collect(Collectors.toList()); - //创建搬运空载具任务 - JSONObject toKzjhcwTask = new JSONObject(); - if (CollectionUtils.isNotEmpty(djqPointList)) { - //优先去待检区取空载具 - toKzjhcwTask.put("point_code1", djqPointList.get(0).getPoint_code()); - } else { - - toKzjhcwTask.put("point_code1", djqOrGzqPointList.get(0).getPoint_code()); - } - toKzjhcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区->空载具缓存位)")); - //送到到任意空载具缓存位 - toKzjhcwTask.put("point_code2", kzjPoint.get(0).getPoint_code()); - toKzjhcwTask.put("vehicle_code", containerInfo.getContainer_name()); - kzjhcwTask.createTask(toKzjhcwTask); - } - } - //} + //sendVehicle(schBaseTask); + } + } else { + //四个点任务,改变pointCode3点位状态 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code3())); } } // 取消 @@ -246,6 +165,100 @@ public class MzhcwTask extends AbstractAcsTask { taskService.update(schBaseTask); } + private void sendVehicle(SchBaseTask schBaseTask) { + //空载具缓存位空载具:判断是否有正在搬运空载具过来的任务,有的话不创建 + //没有的话创建搬运空载具任务, 当任务完成的时候,补发桁架任务。 + List packageinfoivtList = packageinfoivtService.list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位")) + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))); + List taskList = taskService.list(new LambdaUpdateWrapper() + //执行中 + .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) + .and( + r -> r.in(SchBaseTask::getPoint_code2, packageinfoivtList) + )); + //没有正在搬运空载具过来的任务,创建搬运空载具任务 + if (CollectionUtils.isEmpty(taskList)) { + //查询待检区或管制区有空载具的 + List djqOrGzqPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .in(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.POINT_STATUS.code("管制区")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + List djqPointList = djqOrGzqPointList.stream().filter(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))).collect(Collectors.toList()); + //待检区库位有空载具 + if (CollectionUtils.isNotEmpty(djqPointList)) { + List kzjPoint = packageinfoivtList.stream() + .filter(r -> PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())) + .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)) + .collect(Collectors.toList()); + //创建搬运空载具任务 + JSONObject toKzjHcwTask = new JSONObject(); + if (CollectionUtils.isNotEmpty(djqPointList)) { + //优先去待检区取空载具 + toKzjHcwTask.put("point_code1", djqPointList.get(0).getPoint_code()); + } else { + + toKzjHcwTask.put("point_code1", djqOrGzqPointList.get(0).getPoint_code()); + } + toKzjHcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); + //送到到任意空载具缓存位 + toKzjHcwTask.put("point_code2", kzjPoint.get(0).getPoint_code()); + //toKzjHcwTask.put("vehicle_code", containerInfo.getContainer_name()); + toKzjHcwTask.put("vehicle_code", schBaseTask.getVehicle_code()); + kzjhcwTask.createTask(toKzjHcwTask); + } + } + } + + private void createTaskToDjq(SchBaseTask schBaseTask) { + if (StringUtils.isBlank(schBaseTask.getVehicle_code())) { + throw new BadRequestException("子卷号不能为空!"); + } + PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper() + .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code())); + if (containerInfo == null) { + throw new BadRequestException("找不到子卷信息!"); + } + //子卷等级 + String level = containerInfo.getLevel() == null ? "1" : containerInfo.getLevel(); + if (Arrays.stream(ContainerLevelEnum.values()).noneMatch(enumItem -> enumItem.getCode().equals(level))) { + throw new BadRequestException("非法的子卷等级!"); + } + //查询库位信息 + List bstIvtPackageinfoivtList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + JSONObject toDjqTask = new JSONObject(); + //获取子卷号 + toDjqTask.put("vehicle_code", schBaseTask.getVehicle_code()); + // 判断子卷等级属于待检区还是管制区,创建满轴缓存位到待检区或管制区的agv任务 + if (Stream.of(ContainerLevelEnum.BEST, ContainerLevelEnum.WELL, ContainerLevelEnum.COMMON).anyMatch(enumItem -> enumItem.getCode().equals(level))) { + List djqPointList = bstIvtPackageinfoivtList.stream() + .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) + && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(djqPointList)) { + throw new BadRequestException("待检区暂无空余库位!"); + } + toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); + toDjqTask.put("point_code1", schBaseTask.getPoint_code2()); + toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); + djqTask.createTask(toDjqTask); + } else if (Stream.of(ContainerLevelEnum.REWORK, ContainerLevelEnum.CONTROL).anyMatch(enumItem -> enumItem.getCode().equals(level))) { + List gkqPointList = bstIvtPackageinfoivtList.stream() + .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status()) + && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(gkqPointList)) { + throw new BadRequestException("管控区暂无空余库位!"); + } + toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")); + toDjqTask.put("point_code1", schBaseTask.getPoint_code2()); + toDjqTask.put("point_code2", gkqPointList.get(0).getPoint_code()); + gzqTask.createTask(toDjqTask); + } + + } + @Override public String createTask(JSONObject form) { Assert.notNull(form, "请求参数不能为空"); @@ -262,9 +275,9 @@ public class MzhcwTask extends AbstractAcsTask { throw new BadRequestException("起点不能为空"); } String pointCode2 = form.getString("point_code2"); - if (StrUtil.isBlank(pointCode2)) { - throw new BadRequestException("下一点不能为空"); - } + // if (StrUtil.isBlank(pointCode2)) { + // throw new BadRequestException("下一点不能为空"); + // } //是否立即下发 boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java new file mode 100644 index 000000000..fd84e82af --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendKzjTask.java @@ -0,0 +1,190 @@ +package org.nl.b_lms.sch.tasks.first_floor_area; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.dto.SchBaseTaskVO; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 7 目标待检区, 装箱区 -> 待检区或管制区送空载具,agv任务 + * + * @author gbx + * @since 2024-01-24 + */ +@Service() +@RequiredArgsConstructor +@Slf4j +public class SendKzjTask extends AbstractAcsTask { + @Resource + private IschBaseTaskService taskService; + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + private final String THIS_CLASS = SendKzjTask.class.getName(); + + @Override + public List addTask() { + ArrayList resultList = new ArrayList<>(); + List taskList = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getHandle_class, THIS_CLASS) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) + .eq(SchBaseTask::getIs_delete, 0) + ); + taskList.forEach(r -> { + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(r.getTask_id().toString()) + .task_code(r.getTask_code()) + .task_type(r.getAcs_task_type()) + .start_device_code(r.getPoint_code1()) + .next_device_code(r.getPoint_code2()) + .start_device_code2(r.getPoint_code3()) + .next_device_code2(r.getPoint_code4()) + .vehicle_code(r.getVehicle_code()) + .priority(r.getPriority()) + .remark(r.getRemark()) + .product_area(r.getProduct_area()) + .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) + .interaction_json(JSON.parseObject(r.getRequest_param())) + .build(); + resultList.add(dto); + }); + return resultList; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区->待检区或管制区送空载具完成接口任务号为空!"); + } + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + } + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + //1.更改任务状态为完成 + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + //2.改变起点点位状态 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); + //3.更新库存记录 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")).eq("point_code", schBaseTask.getPoint_code2())); + } + // 取消 + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { + throw new BadRequestException("任务已执行不能取消"); + } + //更新任务表删除字段 + schBaseTask.setIs_delete(IOSEnum.IS_NOTANDYES.code("是")); + } + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public String createTask(JSONObject form) { + Assert.notNull(form, "请求参数不能为空"); + String taskType = form.getString("task_type"); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicleCode)) { + throw new BadRequestException("载具号不能为空"); + } + String pointCode1 = form.getString("point_code1"); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = form.getString("point_code2"); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() + .task_type(taskType) + .vehicle_code(vehicleCode) + .point_code1(pointCode1) + .point_code2(pointCode2) + .point_code3(form.getString("point_code3")) + .point_code4(form.getString("point_code4")) + .task_id(org.nl.common.utils.IdUtil.getStringId()) + .task_code(org.nl.common.utils.IdUtil.getStringId()) + .handle_class(THIS_CLASS) + .create_id(SecurityUtils.getCurrentUserId()) + .create_name(SecurityUtils.getCurrentUsername()) + .create_time(DateUtil.now()) + .is_send(isSend ? "1" : "0") + .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) + .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .build(); + SchBaseTask task = new SchBaseTask(); + BeanUtils.copyProperties(schBaseTaskVo, task); + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.immediateNotifyAcs(null); + } + return task.getTask_id(); + } + + + @Override + public void forceFinish(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区->待检区或管制区送空载具强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public void cancel(String taskId) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(SchBaseTask::getTask_id, taskId), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区->待检区或管制区送空载具取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(SecurityUtils.getCurrentUserId()); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java index a7f4267db..618d687a1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java @@ -3,12 +3,12 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -49,8 +49,7 @@ public class SsxDjwTask extends AbstractAcsTask { private IbstIvtPackageinfoivtService packageinfoivtService; - @Resource - private KzjhcwTask kzjhcwTask; + @Override @@ -73,10 +72,7 @@ public class SsxDjwTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - //.agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) - //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) - //.dtl_type(r.getDtl_type()) - //.params(r.getParams()) + .interaction_json(JSON.parseObject(r.getRequest_param())) .build(); resultList.add(dto); }); @@ -88,7 +84,7 @@ public class SsxDjwTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq( SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("空载具缓存位 -> 输送线更新接口任务号为空!"); + throw new BadRequestException("空载具缓存位 -> 输送线完成接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 @@ -99,25 +95,22 @@ public class SsxDjwTask extends AbstractAcsTask { schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); //2.改变起点点位状态 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); - //更新库存记录 - packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); //3.空载具缓存位到输送线送空任务完成,去待检区或管制区补空载具 - List djqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .in(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.POINT_STATUS.code("管制区")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - //有空载具 - if (CollectionUtils.isNotEmpty(djqPointList)) { - //创建搬运空载具任务 - JSONObject toKzjhcwTask = new JSONObject(); - toKzjhcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区->空载具缓存位)")); - toKzjhcwTask.put("point_code1", djqPointList.get(0).getPoint_code()); - //任务起点为补空载具终点 - toKzjhcwTask.put("point_code2", schBaseTask.getPoint_code1()); - kzjhcwTask.createTask(toKzjhcwTask); - } + // List zxqPointList = packageinfoivtService + // .list(new LambdaUpdateWrapper() + // .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) + // .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")) + // .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + // .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + // //有空载具,创建搬运空载具任务 + // if (CollectionUtils.isNotEmpty(zxqPointList)) { + // JSONObject toKzjhcwTask = new JSONObject(); + // toKzjhcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区或管制区->空载具缓存位)")); + // toKzjhcwTask.put("point_code1", zxqPointList.get(0).getPoint_code()); + // //任务起点为补空载具终点 + // toKzjhcwTask.put("point_code2", schBaseTask.getPoint_code1()); + // kzjhcwTask.createTask(toKzjhcwTask); + // } } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -141,13 +134,13 @@ public class SsxDjwTask extends AbstractAcsTask { throw new BadRequestException("业务类型不能为空"); } String vehicleCode = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicleCode)) { - throw new BadRequestException("载具号不能为空"); - } + // if (StrUtil.isBlank(vehicleCode)) { + // throw new BadRequestException("载具号不能为空"); + // } String pointCode1 = form.getString("point_code1"); - if (StrUtil.isBlank(pointCode1)) { - throw new BadRequestException("起点不能为空"); - } + // if (StrUtil.isBlank(pointCode1)) { + // throw new BadRequestException("起点不能为空"); + // } String pointCode2 = form.getString("point_code2"); if (StrUtil.isBlank(pointCode2)) { throw new BadRequestException("下一点不能为空"); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java index a5cb1a534..6e5952590 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; @@ -49,7 +51,8 @@ import java.util.stream.Collectors; @Slf4j public class ZxDjwTask extends AbstractAcsTask { - + @Resource + private KzjhcwTask kzjhcwTask; @Resource private DjqTask djqTask; @Resource @@ -82,13 +85,13 @@ public class ZxDjwTask extends AbstractAcsTask { .start_device_code2(r.getPoint_code3()) .next_device_code2(r.getPoint_code4()) .vehicle_code(r.getVehicle_code()) + .interaction_json(JSON.parseObject(r.getRequest_param())) .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - //.agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) + //.agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) //.dtl_type(r.getDtl_type()) - //.params(r.getParams()) .build(); resultList.add(dto); }); @@ -100,7 +103,7 @@ public class ZxDjwTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("装箱区 -> 装箱对接位更新接口任务号为空!"); + throw new BadRequestException("装箱区 -> 装箱对接位完成接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 @@ -132,24 +135,8 @@ public class ZxDjwTask extends AbstractAcsTask { bstIvtBoxinfo.setIs_packing("1"); bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo); } - //5.装箱区->装箱对接位桁架任务完成后,创建搬运空载具任务,放空(装箱区->待检区) - List djqOrGzqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .in(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.POINT_STATUS.code("管制区")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - List djqPointList = djqOrGzqPointList.stream().filter(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))).collect(Collectors.toList()); - JSONObject toDjqOrGzqTask = new JSONObject(); - toDjqOrGzqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(装箱区->待检区)")); - //装箱区->待检区起点为桁架任务的起点 - toDjqOrGzqTask.put("point_code1", schBaseTask.getPoint_code1()); - if (CollectionUtils.isNotEmpty(djqPointList)) { - //优先送到待检区 - toDjqOrGzqTask.put("point_code2", djqPointList.get(0).getPoint_code()); - } else { - toDjqOrGzqTask.put("point_code2", djqOrGzqPointList.get(0).getPoint_code()); - } - toDjqOrGzqTask.put("vehicle_code", containerInfo.getContainer_name()); - djqTask.createTask(toDjqOrGzqTask); + //创建装箱区->空载具缓存位补空任务 + kzjhcwTask.toKzjHcw(schBaseTask.getPoint_code1()); } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { @@ -165,6 +152,10 @@ public class ZxDjwTask extends AbstractAcsTask { taskService.update(schBaseTask); } + + + + @Override public String createTask(JSONObject form) { Assert.notNull(form, "请求参数不能为空"); @@ -193,6 +184,7 @@ public class ZxDjwTask extends AbstractAcsTask { .point_code2(pointCode2) .point_code3(form.getString("point_code3")) .point_code4(form.getString("point_code4")) + .request_param(form.getString("request_param")) .task_id(org.nl.common.utils.IdUtil.getStringId()) .task_code(org.nl.common.utils.IdUtil.getStringId()) .handle_class(THIS_CLASS) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java index d043ea516..746da5acc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java @@ -27,10 +27,12 @@ import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; +import org.nl.system.service.param.ISysParamService; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -69,9 +71,62 @@ public class ZxqTask extends AbstractAcsTask { @Resource private BstIvtBoxinfoMapper bstIvtBoxinfoMapper; + @Resource + private ISysParamService iSysParamService; + private final String THIS_CLASS = ZxqTask.class.getName(); + + public SchBaseTask dynamicCreateTask(JSONObject form) { + Assert.notNull(form, "请求参数不能为空"); + String taskType = form.getString("task_type"); + if (StrUtil.isBlank(taskType)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicleCode = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicleCode)) { + throw new BadRequestException("载具号不能为空"); + } + String pointCode1 = form.getString("point_code1"); + if (StrUtil.isBlank(pointCode1)) { + throw new BadRequestException("起点不能为空"); + } + String pointCode2 = form.getString("point_code2"); + if (StrUtil.isBlank(pointCode2)) { + throw new BadRequestException("下一点不能为空"); + } + //是否立即下发 + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + SchBaseTaskVO schBaseTaskVo = SchBaseTaskVO.builder() + .task_type(taskType) + .vehicle_code(vehicleCode) + .point_code1(pointCode1) + .point_code2(pointCode2) + .point_code3(form.getString("point_code3")) + .point_code4(form.getString("point_code4")) + .task_id(org.nl.common.utils.IdUtil.getStringId()) + .task_code(org.nl.common.utils.IdUtil.getStringId()) + .handle_class(THIS_CLASS) + .create_id(SecurityUtils.getCurrentUserId()) + .create_name(SecurityUtils.getCurrentUsername()) + .create_time(DateUtil.now()) + .is_send(isSend ? "1" : "0") + .request_param(form.getString("request_param")) + .acs_task_type(StrUtil.isEmpty(form.getString("acs_task_type")) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : form.getString("acs_task_type")) + .task_status(StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")) + .product_area(StrUtil.isEmpty(form.getString("product_area")) ? "B2" : form.getString("product_area")) + .build(); + SchBaseTask task = new SchBaseTask(); + BeanUtils.copyProperties(schBaseTaskVo, task); + taskService.save(task); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.immediateNotifyAcs(null); + } + return task; + } + @Override public List addTask() { ArrayList resultList = new ArrayList<>(); @@ -93,7 +148,7 @@ public class ZxqTask extends AbstractAcsTask { .remark(r.getRemark()) .product_area(r.getProduct_area()) .interaction_json(JSON.parseObject(r.getRequest_param())) - .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼叉车系统")) + .agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务")) //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) //.dtl_type(r.getDtl_type()) .build(); @@ -107,7 +162,7 @@ public class ZxqTask extends AbstractAcsTask { public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); if (schBaseTask == null) { - throw new BadRequestException("待检区 -> 装箱区更新接口任务号为空!"); + throw new BadRequestException("待检区 -> 装箱区完成接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 @@ -168,6 +223,20 @@ public class ZxqTask extends AbstractAcsTask { if (bstIvtBoxinfo == null) { throw new BadRequestException("找不到木箱信息!"); } + //获取木箱高度等级 + String height = ""; + String heightLevel1 = iSysParamService.findByCode("height_level_1").getValue(); + String heightLevel2 = iSysParamService.findByCode("height_level_2").getValue(); + String box_high = bstIvtBoxinfo.getBox_high(); + if (Integer.parseInt(box_high) <= Integer.parseInt(heightLevel1)) { + height = "1"; + } else if (Integer.parseInt(box_high) > Integer.parseInt(heightLevel1) && Integer.parseInt(box_high) <= Integer.parseInt(heightLevel2)) { + height = "2"; + } else { + height = "3"; + } + //木箱高度等级 + param.put("heightLevel", height); //木箱最大数量 param.put("maxNo", bstIvtBoxinfo.getNum()); //托盘类型 1小托盘 2大托盘 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendEmptyVehicle.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendEmptyVehicle.java deleted file mode 100644 index 0e575bffe..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendEmptyVehicle.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.nl.b_lms.sch.tasks.first_floor_area.auto; - -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.tasks.first_floor_area.KzjhcwTask; -import org.nl.common.enums.PackageInfoIvtEnum; -import org.nl.wms.sch.manage.TaskStatusEnum; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - - -@Slf4j -@Component -public class AutoSendEmptyVehicle { - - @Resource - private KzjhcwTask kzjhcwTask; - - - @Resource - private IschBaseTaskService taskService; - - - @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - public void run() { - this.sendKzjHcwEmptyVehicle(); - } - - void sendKzjHcwEmptyVehicle() { - //查询空载具缓存位是否有空载具 - List bstIvtPackageinfoivtList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - List kzjPointList = bstIvtPackageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status()) - && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status())).collect(Collectors.toList()); - //如果空载具缓存位都为空,则去搬运空载具 - if (CollectionUtils.isEmpty(kzjPointList)) { - //空载具缓存位没有可用的库存:判断是否有正在搬运空载具过来的任务,有的话不创建 - //没有的话创建搬运空载具任务, 当任务完成的时候,补发桁架任务。 - List packageinfoivtList = packageinfoivtService.list(new LambdaUpdateWrapper() - .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位")) - .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))); - //todo 查找正在搬运到待检区的任务,假设只有一个 - List taskList = taskService.list(new LambdaUpdateWrapper() - //执行中 - .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) - .and( - r -> r.in(SchBaseTask::getPoint_code2, packageinfoivtList) - )); - //没有正在搬运空载具过来的任务,创建搬运空载具任务 - if (CollectionUtils.isEmpty(taskList)) { - //查询待检区或管制区有空载具的 - List djqOrGzqPointList = packageinfoivtService - .list(new LambdaUpdateWrapper() - .in(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.POINT_STATUS.code("管制区")) - .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - List djqPointList = djqOrGzqPointList.stream().filter(r -> r.getPoint_status().equals(PackageInfoIvtEnum.POINT_STATUS.code("待检区"))).collect(Collectors.toList()); - //待检区库位有空载具 - if (CollectionUtils.isNotEmpty(djqPointList)) { - List kzjPoint = packageinfoivtList.stream() - .filter(r -> PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())) - .sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)) - .collect(Collectors.toList()); - //创建搬运空载具任务 - JSONObject toKzjhcwTask = new JSONObject(); - if (CollectionUtils.isNotEmpty(djqPointList)) { - //优先去待检区取空载具 - toKzjhcwTask.put("point_code1", djqPointList.get(0).getPoint_code()); - } else { - toKzjhcwTask.put("point_code1", djqOrGzqPointList.get(0).getPoint_code()); - } - toKzjhcwTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("取空(待检区->空载具缓存位)")); - //送到到任意空载具缓存位 - toKzjhcwTask.put("point_code2", kzjPoint.get(0).getPoint_code()); - //todo 载具号 - toKzjhcwTask.put("vehicle_code", "containerInfo.getContainer_name()"); - kzjhcwTask.createTask(toKzjhcwTask); - } - } - } - } - - -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java new file mode 100644 index 000000000..e7786b6c5 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendMzToDjq.java @@ -0,0 +1,105 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +@Component +public class AutoSendMzToDjq { + + @Resource + private DjqTask djqTask; + + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + //满轴->待检区agv自动搬运任务 + public void run() { + this.sendMzqToDjq(); + } + + void sendMzqToDjq() { + JSONObject toDjqTask =new JSONObject(); + //满轴有子卷且没有未完成任务 + List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), "1", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); + if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) { + List djqPointList = bstIvtPackageinfoivtList.stream() + .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) + && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(djqPointList)) { + toDjqTask.put("vehicle_code", bstIvtPackageinfoivtList.get(0).getContainer_name()); + toDjqTask.put("point_code1", bstIvtPackageinfoivtList.get(0).getPoint_code()); + toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); + toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); + djqTask.createTask(toDjqTask); + } + } + } + // void sendMzqToDjq() { + // //满轴位有子卷 + // List bstIvtPackageinfoivtList = bstIvtPackageinfoivtMapper + // .selectList(new LambdaUpdateWrapper() + // .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) + // .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位")) + // .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("有子卷")) + // .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + // if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) { + // String containerName = bstIvtPackageinfoivtList.get(0).getContainer_name(); + // String pointCode = bstIvtPackageinfoivtList.get(0).getPoint_code(); + // //查询子卷信息,去分切计划表查找定级数据,桁架任务完成根据子卷定级创建AGV任务将满轴搬运至质检区或管制区 + // PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper() + // .eq(PdmBiSlittingproductionplan::getContainer_name, containerName)); + // if (containerInfo == null) { + // throw new BadRequestException("找不到子卷信息!"); + // } + // //子卷等级 + // String level = containerInfo.getLevel() == null ? "1" : containerInfo.getLevel(); + // String finalLevel = level; + // if (Arrays.stream(ContainerLevelEnum.values()).noneMatch(enumItem -> enumItem.getCode().equals(finalLevel))) { + // throw new BadRequestException("非法的子卷等级!"); + // } + // level = "1"; + // JSONObject toDjqTask = new JSONObject(); + // toDjqTask.put("vehicle_code", containerName); + // // 判断子卷等级属于待检区还是管制区,创建满轴缓存位到待检区或管制区的agv任务 + // String finalLevel1 = level; + // if (Stream.of(ContainerLevelEnum.BEST, ContainerLevelEnum.WELL, ContainerLevelEnum.COMMON).anyMatch(enumItem -> enumItem.getCode().equals(finalLevel1))) { + // List djqPointList = bstIvtPackageinfoivtList.stream() + // .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("待检区").equals(r.getPoint_status()) + // && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); + // if (CollectionUtils.isEmpty(djqPointList)) { + // throw new BadRequestException("待检区暂无空余库位!"); + // } + // toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); + // toDjqTask.put("point_code1", pointCode); + // toDjqTask.put("point_code2", djqPointList.get(0).getPoint_code()); + // djqTask.createTask(toDjqTask); + // } else { + // String finalLevel2 = level; + // if (Stream.of(ContainerLevelEnum.REWORK, ContainerLevelEnum.CONTROL).anyMatch(enumItem -> enumItem.getCode().equals(finalLevel2))) { + // List gkqPointList = bstIvtPackageinfoivtList.stream() + // .filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("管制区").equals(r.getPoint_status()) + // && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status()) && r.getIs_used().equals(PackageInfoIvtEnum.IS_USED.code("启用"))).collect(Collectors.toList()); + // if (CollectionUtils.isEmpty(gkqPointList)) { + // throw new BadRequestException("管控区暂无空余库位!"); + // } + // toDjqTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区")); + // toDjqTask.put("point_code1", pointCode); + // toDjqTask.put("point_code2", gkqPointList.get(0).getPoint_code()); + // gzqTask.createTask(toDjqTask); + // } + // } + // } + // } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java new file mode 100644 index 000000000..692ae9c04 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendToZxq.java @@ -0,0 +1,44 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + + +@Slf4j +@Component +public class AutoSendToZxq { + + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + //待检区->装箱区agv自动搬运任务 + public void run() { + this.sendDjqToZxq(); + } + + void sendDjqToZxq() { + //装箱区有空位 + List bstIvtPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),"2",PackageInfoIvtEnum.IVT_STATUS.code("空")); + if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) { + Map> ivtList = bstIvtPackageinfoivtList.stream() + .collect(Collectors.groupingBy( + BstIvtPackageinfoivt::getPoint_code, + LinkedHashMap::new, + Collectors.mapping(BstIvtPackageinfoivt::getPoint_name, Collectors.toList()) + )); + TaskQueueManager taskQueueManager =new TaskQueueManager(); + taskQueueManager.processTasks(ivtList); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java new file mode 100644 index 000000000..b70b7f6a1 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToDjq.java @@ -0,0 +1,67 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.tasks.first_floor_area.SendKzjTask; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + + +@Slf4j +@Component +public class AutoSendVehicleToDjq { + + + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + @Resource + private SendKzjTask sendKzjTask; + + //装箱区->待检区送空agv自动搬运任务 + public void run() { + this.sendKzjHcwEmptyVehicle(); + } + + + void sendKzjHcwEmptyVehicle() { + JSONObject task = new JSONObject(); + String pointCode1=null; + String pointCode2; + //待检区有空位 + List djqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),"2",PackageInfoIvtEnum.TASK_TYPE.code("送空(装箱区->待检区或管制区)")); + if (CollectionUtils.isNotEmpty(djqList)) { + pointCode2=djqList.get(0).getPoint_code(); + }else{ + //管制区有空位 + List zxqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空"),"2",PackageInfoIvtEnum.TASK_TYPE.code("送空(装箱区->待检区或管制区)")); + pointCode2=zxqList.get(0).getPoint_code(); + } + //查询装箱区有空载具 + List zxqPointList = packageinfoivtService + .list(new LambdaUpdateWrapper() + .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("装箱区")) + .eq(BstIvtPackageinfoivt::getIs_used, IOSEnum.IS_NOTANDYES.code("是")) + .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空载具")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + //装箱区有空载具 + if (CollectionUtils.isNotEmpty(zxqPointList)) { + pointCode1 = zxqPointList.get(0).getPoint_code(); + } + //去装箱区搬运空载具 + if (pointCode1 != null && pointCode2 != null) { + task.put("point_code1", pointCode1); + task.put("point_code2", pointCode2); + task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("送空(装箱区->待检区或管制区)")); + sendKzjTask.createTask(task); + } + } + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKz.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKz.java new file mode 100644 index 000000000..a6d66f08e --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoSendVehicleToKz.java @@ -0,0 +1,28 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.tasks.first_floor_area.KzjhcwTask; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +@Slf4j +@Component +public class AutoSendVehicleToKz { + + @Resource + private KzjhcwTask kzjhcwTask; + + + public void run() { + this.sendToKzjHcw(); + } + + //待检区->空轴缓存位送空agv自动搬运任务 + void sendToKzjHcw() { + kzjhcwTask.toKzjHcw(""); + } + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueueManager.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueueManager.java new file mode 100644 index 000000000..dd2bbbadc --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/TaskQueueManager.java @@ -0,0 +1,75 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.sch.tasks.first_floor_area.ZxqTask; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; + +@Service() +@RequiredArgsConstructor +@Slf4j +public class TaskQueueManager { + + @Resource + private IschBaseTaskService taskService; + + private final Map> taskGroupQueues; + + public TaskQueueManager() { + taskGroupQueues = new HashMap<>(); + } + + + public void addTasksToQueue(String groupIdentifier, List tasks) { + if (!taskGroupQueues.containsKey(groupIdentifier)) { + taskGroupQueues.put(groupIdentifier, new LinkedList<>()); + } + Queue queue = taskGroupQueues.get(groupIdentifier); + queue.addAll(tasks); + } + + + public void processTasks(Map> tasksToProcessPerQueue) { + //队列剩余数量 + // int tasksCount = taskQueueManager.taskGroupQueues.getOrDefault("Group1", new LinkedList<>()).size(); + //队列为空 + // boolean isEmpty = taskQueueManager.taskGroupQueues.values().stream().allMatch(Queue::isEmpty); + + for (Map.Entry> entry : tasksToProcessPerQueue.entrySet()) { + String groupId = entry.getKey(); + int taskCount = entry.getValue().size(); + Queue queue = taskGroupQueues.get(groupId); + if (queue == null) { + continue; + } + int getCount = 0; + while (!queue.isEmpty() && getCount < taskCount) { + String PointCode = entry.getValue().get(getCount); + //从队列中移除任务 + SchBaseTask task = queue.poll(); + executeTask(task, PointCode); + getCount++; + } + } + } + + + // 执行任务 + private void executeTask(SchBaseTask task, String pointCode) { + if (task != null) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.set("point_code2", pointCode); + taskService.update(task, updateWrapper); + ZxqTask taskBean = new ZxqTask(); + //任务下发 + taskBean.immediateNotifyAcs(null); + } + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java index a888d254c..a2491ab6d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/auto/AutoCallAirShaftTask.java @@ -1,6 +1,5 @@ package org.nl.b_lms.sch.tasks.slitter.auto; -import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -23,7 +22,6 @@ import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; import org.nl.common.enums.NoticeTypeEnum; -import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.TaskUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; @@ -32,16 +30,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; /** * @Author: lyd * @Date: 2024/2/1 - * @see TrussCallAirShaftTask#createTask(JSONObject) * @Description: 自动任务 呼叫套轴 根据分切计划来呼叫套轴任务 桁架任务 *

注:内包间只是区分气胀轴大小(即代数),不需要区分锂电/标箔

+ * @see TrussCallAirShaftTask#createTask(JSONObject) */ @Slf4j @Component @@ -81,7 +78,7 @@ public class AutoCallAirShaftTask { public void run() { // 1、获取空的插拔轴位(无任务) List emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2", - "0","0"); + "0", "0"); emptyPoints.forEach(empty -> { // 标箔:1,锂电:2 改:大小:4代5代 String specification = empty.getQzz_generation(); @@ -98,9 +95,25 @@ public class AutoCallAirShaftTask { "1", location, "0"); // 如果满了就只做拔轴 if (emptyShaftPoint.size() == 0) { - // 如果不需要套轴,就只做拔轴 - makePullShaft(empty, specification); - return; + // 校验是否存在半个位置,且有分切计划 + // 获取只有一个位置的点位 + List halfPlacePoint = bcutpointivtService.getAllHalfPlacePoints("1", + "1", location); + List qzzs = halfPlacePoint.stream() + .map(p -> ObjectUtil.isNotEmpty(p.getQzz_no1()) ? p.getQzz_no1() : p.getQzz_no2()) + .collect(Collectors.toList()); + if (qzzs.size() == 0) { + // 如果不需要套轴,就只做拔轴 + makePullShaft(empty, specification); + return; + } + // 从寻查找分切计划,并放在plans, 没有考虑区域问题 + plans = slittingproductionplanService.getAllHalfPlan(qzzs); + if (plans.size() == 0) { + // 如果不需要套轴,就只做拔轴 + makePullShaft(empty, specification); + return; + } } // 获取一个分切计划的Dto。如果是6寸,可以直接使用、如果是3寸,需要判断当前位置是否满足 SlitterPlanDistinctDto planDto = plans.stream() @@ -163,7 +176,7 @@ public class AutoCallAirShaftTask { param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); param.put("qzz_size", needPlan.getQzz_size()); // 所需的纸管规格 - SlitterTaskUtil.putNeedPaperSpec(param, needPlans); + SlitterTaskUtil.putNeedPaperSpec(param, needPlans); // 当前纸管的规格信息 String oldQzzNo = ObjectUtil.isNotEmpty(startPoint.getQzz_no1()) ? startPoint.getQzz_no1() : startPoint.getQzz_no2(); @@ -192,8 +205,9 @@ public class AutoCallAirShaftTask { /** * 呼叫AGV更换纸管 + * * @param needPlans 所需要套轴的分切计划 - * @param location 位置 + * @param location 位置 */ public void toCallAgvMovePaperTube(List needPlans, String location, BstIvtShafttubeivt empty) { // 最多两根 @@ -235,7 +249,7 @@ public class AutoCallAirShaftTask { // 筛选3个位置中数量最少的搬走 BstIvtStockingivt needMovePoint = stockingivtService.getCanMovePointOne(location, "1"); // 空位就直接创建搬过来的任务 - if ("0".equals(needMovePoint.getIvt_status())) { + if (ObjectUtil.isEmpty(needMovePoint) || "0".equals(needMovePoint.getIvt_status())) { // 直接搬过来即可 JSONObject param = new JSONObject(); param.put("point_code1", needPoint.getPoint_code()); @@ -261,13 +275,14 @@ public class AutoCallAirShaftTask { /** * 获取对应的气胀轴库1 - * @param qzzSize 气涨轴尺寸 + * + * @param qzzSize 气涨轴尺寸 * @param location 位置:上半部分还是下半部分 - * @param empty 套拔轴点位 + * @param empty 套拔轴点位 */ private void toAcsOutShaft(String qzzSize, String location, BstIvtShafttubeivt empty) { // 需要区分上下 - List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize, empty.getPoint_code(), location); + List shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize, empty.getPoint_code(), location); if (shafttubeivts.size() == 0) { throw new BadRequestException("气胀轴库找不到[" + qzzSize + "]规格的气涨轴"); } @@ -286,10 +301,11 @@ public class AutoCallAirShaftTask { /** * todo: 预留 * 创建气涨轴缓存的桁架任务 - * @param qzzSize 气涨轴尺寸 + * + * @param qzzSize 气涨轴尺寸 * @param specification 标箔、锂电(1,2) - * @param location 位置:上半部分还是下半部分 - * @param empty 套拔轴点位 + * @param location 位置:上半部分还是下半部分 + * @param empty 套拔轴点位 */ @Deprecated private void toCreatShaftCacheTask(String qzzSize, String specification, String location, BstIvtShafttubeivt empty) { @@ -311,9 +327,10 @@ public class AutoCallAirShaftTask { /** * 保存信息到点位上 - * @param empty 套拔轴机位置 + * + * @param empty 套拔轴机位置 * @param needPlans 需要的分切计划 - * @param qzzSize 气涨轴尺寸 + * @param qzzSize 气涨轴尺寸 */ private void saveCutPlanMessage(BstIvtShafttubeivt empty, List needPlans, String qzzSize) { empty.setHave_qzz(SlitterConstant.SLITTER_YES); @@ -355,7 +372,8 @@ public class AutoCallAirShaftTask { /** * 不需要套轴,就只做拔轴 * update: 不需要(区分标箔、锂电) - * @param empty 空的插拔轴点位 + * + * @param empty 空的插拔轴点位 * @param specification 代数(4、5) */ private void makePullShaft(BstIvtShafttubeivt empty, String specification) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml index 89129599b..92316591c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/mapper/SlitterMapper.xml @@ -10,7 +10,9 @@ `bst_ivt_cutpointivt` bct LEFT JOIN pdm_bi_slittingproductionplan p ON p.qzzno = bct.qzz_no1 OR p.qzzno = bct.qzz_no2 WHERE bct.point_status = '2' AND p.parent_container_name = #{parent_container_name} AND p.split_group = #{split_group} - AND (bct.qzz_no1 IS NULL OR bct.qzz_no1 = '' OR bct.qzz_no2 IS NULL OR bct.qzz_no2 = '') + AND (LENGTH(bic.qzz_no1) = 0 OR LENGTH(bic.qzz_no2) = 0) + AND (LENGTH(bic.qzz_no1) ]]> 0 OR LENGTH(bic.qzz_no2) ]]> 0) + AND bct.is_used = '1' LIMIT 1