diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/dao/SchBaseTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/dao/SchBaseTask.java index 767a2649c..08cf1bbb2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/dao/SchBaseTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/dao/SchBaseTask.java @@ -277,6 +277,11 @@ public class SchBaseTask extends Model { private String vehicle_code2; + /** + * 是否立即下发 + */ + private String is_send; + /** * 获取主键值 * 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 new file mode 100644 index 000000000..6c5f15ee7 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java @@ -0,0 +1,228 @@ +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.IdUtil; +import cn.hutool.core.util.StrUtil; +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.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; +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.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 4 目标待检区, 满轴缓存位 -> 待检区,agv任务 + * + * @author gbx + * @since 2024-01-24 + */ +@Service() +@RequiredArgsConstructor +@Slf4j +public class DjqTask extends AbstractAcsTask { + @Resource + private IschBaseTaskService taskService; + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + + @Resource + private MzhcwTask mzhcwTask; + @Resource + private ZxqTask zxqTask; + + private final String THIS_CLASS = DjqTask.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楼叉车系统")) + //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) + //.dtl_type(r.getDtl_type()) + //.params(r.getParams()) + .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(StringUtils.isNotBlank(taskObj.getString("task_code")), SchBaseTask::getTask_code, taskObj.getString("task_code")), 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())); + //更新库存记录 + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); + //todo 3.手持确认包装关系,生产包装关系表数据 + //todo 4.根据子卷包装关系查询木箱号,调刘先源的空木箱出库服务创建出库任务 + //5.查询是否有未下发的输送线->满轴位任务,有就下发 + List notIssueTaskList = taskService.list(new LambdaUpdateWrapper() + //确定起点 + .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); + } + //6.创建子卷搬运到装箱区任务 + 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("空")) + .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); + //装箱区有点位,就下发 + if (CollectionUtils.isNotEmpty(zxqPointList)) { + JSONObject jo = new JSONObject(); + jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); + jo.put("point_code1", schBaseTask.getPoint_code2()); + jo.put("point_code2", zxqPointList.get(0).getPoint_code()); + jo.put("vehicle_code", schBaseTask.getVehicle_code()); + zxqTask.createTask(jo); + } + //todo 装箱区没有点位 + + } + // 取消 + 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(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public String createTask(JSONObject form) { + Assert.notNull(form, "请求参数不能为空"); + String task_type = form.getString("task_type"); + if (StrUtil.isBlank(task_type)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicle_code = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } + String point_code1 = form.getString("point_code1"); + if (StrUtil.isBlank(point_code1)) { + throw new BadRequestException("起点不能为空"); + } + String point_code2 = form.getString("point_code2"); + if (StrUtil.isBlank(point_code2)) { + throw new BadRequestException("下一点不能为空"); + } + JSONObject json = new JSONObject(); + String point_code3 = form.getString("point_code3"); + String point_code4 = form.getString("point_code4"); + json.put("vehicle_code", form.getString("vehicle_code")); + 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("priority", "1"); + json.put("point_code1", point_code1); + json.put("point_code2", point_code2); + json.put("point_code3", point_code3); + json.put("point_code4", point_code4); + json.put("handle_class", this.getClass().getName()); + json.put("create_id", SecurityUtils.getCurrentUserId()); + json.put("create_name", SecurityUtils.getCurrentUsername()); + json.put("create_time", DateUtil.now()); + json.put("task_status", StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")); + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + json.put("is_send", isSend); + json.put("product_area", form.getString("product_area")); + taskService.save(json.toJavaObject(SchBaseTask.class)); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.immediateNotifyAcs(json.getString("task_id")); + } + return json.getString("task_id"); + } + + + @Override + public void forceFinish(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("满轴缓存位 -> 待检区强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public void cancel(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("满轴缓存位 -> 待检区取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(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/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java new file mode 100644 index 000000000..5ab6aa1a6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java @@ -0,0 +1,205 @@ +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.IdUtil; +import cn.hutool.core.util.StrUtil; +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.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; +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.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 4 目标管制区, 满轴缓存位 -> 管制区,agv任务 + * + * @author gbx + * @since 2024-01-24 + */ +@Service() +@RequiredArgsConstructor +@Slf4j +public class GzqTask extends AbstractAcsTask { + + private final String THIS_CLASS = GzqTask.class.getName(); + @Resource + private IschBaseTaskService taskService; + @Resource + private IbstIvtPackageinfoivtService packageinfoivtService; + @Resource + private MzhcwTask mzhcwTask; + + @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楼叉车系统")) + //.truss_type(PackageInfoIvtEnum.TRUSS_TYPE.code("点对点任务")) + //.dtl_type(r.getDtl_type()) + //.params(r.getParams()) + .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(StringUtils.isNotBlank(taskObj.getString("task_code")), SchBaseTask::getTask_code, taskObj.getString("task_code")), 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())); + //更新库存记录 + 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() + //确定起点 + .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); + } + } + // 取消 + 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(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public String createTask(JSONObject form) { + Assert.notNull(form, "请求参数不能为空"); + String task_type = form.getString("task_type"); + if (StrUtil.isBlank(task_type)) { + throw new BadRequestException("业务类型不能为空"); + } + String vehicle_code = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } + String point_code1 = form.getString("point_code1"); + if (StrUtil.isBlank(point_code1)) { + throw new BadRequestException("起点不能为空"); + } + String point_code2 = form.getString("point_code2"); + if (StrUtil.isBlank(point_code2)) { + throw new BadRequestException("下一点不能为空"); + } + JSONObject json = new JSONObject(); + String point_code3 = form.getString("point_code3"); + String point_code4 = form.getString("point_code4"); + json.put("vehicle_code", form.getString("vehicle_code")); + 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("priority", "1"); + json.put("point_code1", point_code1); + json.put("point_code2", point_code2); + json.put("point_code3", point_code3); + json.put("point_code4", point_code4); + json.put("handle_class", this.getClass().getName()); + json.put("create_id", SecurityUtils.getCurrentUserId()); + json.put("create_name", SecurityUtils.getCurrentUsername()); + json.put("create_time", DateUtil.now()); + json.put("task_status", StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")); + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + json.put("is_send", isSend); + json.put("product_area", form.getString("product_area")); + taskService.save(json.toJavaObject(SchBaseTask.class)); + //如果目标点位没有空位先创建不下发 + if (isSend) { + this.immediateNotifyAcs(json.getString("task_id")); + } + return json.getString("task_id"); + } + + + @Override + public void forceFinish(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("满轴缓存位 -> 管制区强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); + } + + @Override + public void cancel(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("满轴缓存位 -> 管制区取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(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/packingArea/KzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java similarity index 69% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/KzjhcwTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java index 8bef6769f..ec58d79c4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/KzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/KzjhcwTask.java @@ -1,7 +1,8 @@ -package org.nl.b_lms.sch.tasks.packingArea; +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.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; @@ -15,6 +16,7 @@ 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.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -22,6 +24,7 @@ import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; @@ -29,7 +32,7 @@ import java.util.List; import java.util.stream.Collectors; /** - * 空载具缓存位到待检区或管制区补空载具桁架任务 + * 3 目标空载具缓存位, 待检区或管制区 -> 空载具缓存位 , 补空载具, agv任务 * * @author gbx * @since 2024-01-24 @@ -72,7 +75,10 @@ public class KzjhcwTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type("2") + .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); }); @@ -80,21 +86,21 @@ public class KzjhcwTask extends AbstractAcsTask { } @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(StringUtils.isNotBlank(taskObj.getString("task_code1")), SchBaseTask::getTask_code, taskObj.getString("task_code1")), false); + .eq(StringUtils.isNotBlank(taskObj.getString("task_code")), SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + ; if (schBaseTask == null) { - throw new BadRequestException("待检区到空载具缓存位搬运空载具桁架任务更新接口任务号为空!"); + throw new BadRequestException("待检区或管制区 -> 空载具缓存位更新接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); - taskService.update(schBaseTask); } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { //1.更改任务状态为完成 schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); - taskService.update(schBaseTask); //2.改变起点点位状态 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); //更新库存记录 @@ -108,17 +114,12 @@ public class KzjhcwTask extends AbstractAcsTask { //待检区和管控区点位 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()); - //空载具缓冲区点位 - List kzjhcqPointList = bstIvtPackageinfoivtList.stream().filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status())).collect(Collectors.toList()); List taskList = taskService.list(new LambdaQueryWrapper() - //确定起点和终点未下发 - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode()) + //确定起点未下发 + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode()) .and(r -> r.in(SchBaseTask::getPoint_code1, djqPointList) ) - .and(r -> - r.in(SchBaseTask::getPoint_code2, kzjhcqPointList) - ) ); taskList.forEach(r -> { //任务下发 @@ -126,6 +127,18 @@ public class KzjhcwTask extends AbstractAcsTask { } ); } + // 取消 + 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(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override @@ -135,6 +148,10 @@ public class KzjhcwTask extends AbstractAcsTask { if (StrUtil.isBlank(task_type)) { throw new BadRequestException("业务类型不能为空"); } + String vehicle_code = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } String point_code1 = form.getString("point_code1"); if (StrUtil.isBlank(point_code1)) { throw new BadRequestException("起点不能为空"); @@ -143,25 +160,14 @@ public class KzjhcwTask extends AbstractAcsTask { if (StrUtil.isBlank(point_code2)) { throw new BadRequestException("下一点不能为空"); } - String point_code3 = form.getString("point_code3"); - - String point_code4 = form.getString("point_code4"); - - String vehicle_code = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code)) { - throw new BadRequestException("载具号不能为空"); - } JSONObject json = new JSONObject(); + String point_code3 = form.getString("point_code3"); + String point_code4 = form.getString("point_code4"); + json.put("vehicle_code", form.getString("vehicle_code")); 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("vehicle_code", form.getString("vehicle_code")); - String task_status = form.getString("task_status"); - if (StrUtil.isEmpty(task_status)) { - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - } else { - json.put("task_status", task_status); - } + json.put("priority", "1"); json.put("point_code1", point_code1); json.put("point_code2", point_code2); json.put("point_code3", point_code3); @@ -170,13 +176,13 @@ public class KzjhcwTask extends AbstractAcsTask { json.put("create_id", SecurityUtils.getCurrentUserId()); json.put("create_name", SecurityUtils.getCurrentUsername()); json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "9"); - json.put("response_param", form.getString("truss_type")); - json.put("request_param", form.getString("request_param")); + json.put("task_status", StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")); + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + json.put("is_send", isSend); + json.put("product_area", form.getString("product_area")); taskService.save(json.toJavaObject(SchBaseTask.class)); //如果目标点位没有空位先创建不下发 - if (form.getBoolean("isSend")) { + if (isSend) { this.immediateNotifyAcs(json.getString("task_id")); } return json.getString("task_id"); @@ -184,11 +190,30 @@ public class KzjhcwTask extends AbstractAcsTask { @Override public void forceFinish(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("待检区或管制区 -> 空载具缓存位强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override public void cancel(String task_id) { - + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("待检区或管制区 -> 空载具缓存位取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(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/packingArea/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java similarity index 73% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/MzhcwTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java index 7f843cd79..42a19299c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/MzhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java @@ -1,7 +1,8 @@ -package org.nl.b_lms.sch.tasks.packingArea; +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.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; @@ -17,14 +18,20 @@ 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.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.impl.StIvtIostorinvdisServiceImpl; import org.nl.common.enums.ContainerLevelEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; @@ -34,8 +41,9 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; + /** - * 输送线到满轴缓存位桁架任务 + * 1 目标满轴缓存位, 输送线点位 -> 满轴缓存位,桁架任务 * * @author gbx * @since 2024-01-24 @@ -87,7 +95,10 @@ public class MzhcwTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type("2") + //.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); }); @@ -95,31 +106,33 @@ public class MzhcwTask extends AbstractAcsTask { } @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(StringUtils.isNotBlank(taskObj.getString("task_code1")), SchBaseTask::getTask_code, taskObj.getString("task_code1")), false); + .eq(StringUtils.isNotBlank(taskObj.getString("task_code")), SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + ; if (schBaseTask == null) { - throw new BadRequestException("接口sendProductToFirstFloor,任务号为空!"); + throw new BadRequestException("输送线点位 -> 满轴缓存位更新接口任务号为空!"); } + // 执行中 if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); - taskService.update(schBaseTask); } + // 完成 if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { //1.更改任务状态为完成 schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); - taskService.update(schBaseTask); //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.acs传子卷信息,去分切计划表查找定级数据,桁架任务完成根据子卷定级创建AGV任务将满轴搬运至质检区或管制区 - if (StringUtils.isBlank(taskObj.getString("container_name"))) { + //3.查询子卷信息,去分切计划表查找定级数据,桁架任务完成根据子卷定级创建AGV任务将满轴搬运至质检区或管制区 + if (StringUtils.isBlank(schBaseTask.getVehicle_code())) { throw new BadRequestException("子卷号不能为空!"); } PdmBiSlittingproductionplan containerInfo = productionPlanService.getOne(new LambdaUpdateWrapper() - .eq(PdmBiSlittingproductionplan::getContainer_name, taskObj.getString("container_name"))); + .eq(PdmBiSlittingproductionplan::getContainer_name, schBaseTask.getVehicle_code())); if (containerInfo == null) { throw new BadRequestException("找不到子卷信息!"); } @@ -151,7 +164,7 @@ public class MzhcwTask extends AbstractAcsTask { } 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()); + && PackageInfoIvtEnum.IVT_STATUS.code("空").equals(r.getIvt_status())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(gkqPointList)) { throw new BadRequestException("管控区暂无空余库位!"); } @@ -163,11 +176,11 @@ public class MzhcwTask extends AbstractAcsTask { //4.创建空载具到输送线任务 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()); + && PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status())).collect(Collectors.toList()); JSONObject toSsxTask = new JSONObject(); toSsxTask.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")); toSsxTask.put("vehicle_code", containerInfo.getContainer_name()); - //判断是否有空载具 + //判断空载具缓存位是否有空载具库存,有就叫agv去任一一个位置搬空载具 if (CollectionUtils.isNotEmpty(kzjPointList)) { //直接创建搬运空载具任务 toSsxTask.put("point_code1", kzjPointList.get(0).getPoint_code()); @@ -175,12 +188,12 @@ 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 查找正在搬运到待检区的任务,假设只有一个,如果有多个车则更改 + //todo 查找正在搬运到待检区的任务,假设只有一个 List taskList = taskService.list(new LambdaUpdateWrapper() //执行中 .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) @@ -190,10 +203,11 @@ public class MzhcwTask extends AbstractAcsTask { //没有正在搬运空载具过来的任务,创建搬运空载具任务 if (CollectionUtils.isEmpty(taskList)) { //查询待检区库位有空载具的 - List djqPointList = packageinfoivtService + 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() @@ -202,8 +216,15 @@ public class MzhcwTask extends AbstractAcsTask { .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_code1", djqPointList.get(0).getPoint_code()); + //送到到任意空载具缓存位 toKzjhcwTask.put("point_code2", kzjPoint.get(0).getPoint_code()); toKzjhcwTask.put("vehicle_code", containerInfo.getContainer_name()); kzjhcwTask.createTask(toKzjhcwTask); @@ -212,6 +233,18 @@ public class MzhcwTask extends AbstractAcsTask { } } } + // 取消 + 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(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override @@ -221,6 +254,10 @@ public class MzhcwTask extends AbstractAcsTask { if (StrUtil.isBlank(task_type)) { throw new BadRequestException("业务类型不能为空"); } + String vehicle_code = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } String point_code1 = form.getString("point_code1"); if (StrUtil.isBlank(point_code1)) { throw new BadRequestException("起点不能为空"); @@ -229,27 +266,14 @@ public class MzhcwTask extends AbstractAcsTask { if (StrUtil.isBlank(point_code2)) { throw new BadRequestException("下一点不能为空"); } - String point_code3 = form.getString("point_code3"); - - String point_code4 = form.getString("point_code4"); - - String vehicle_code = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code)) { - throw new BadRequestException("载具号不能为空"); - } - JSONObject json = new JSONObject(); + String point_code3 = form.getString("point_code3"); + String point_code4 = form.getString("point_code4"); + json.put("vehicle_code", form.getString("vehicle_code")); 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("vehicle_code", form.getString("vehicle_code")); - json.put("product_area", form.getString("product_area")); - String task_status = form.getString("task_status"); - if (StrUtil.isEmpty(task_status)) { - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - } else { - json.put("task_status", task_status); - } + json.put("priority", "1"); json.put("point_code1", point_code1); json.put("point_code2", point_code2); json.put("point_code3", point_code3); @@ -258,13 +282,13 @@ public class MzhcwTask extends AbstractAcsTask { json.put("create_id", SecurityUtils.getCurrentUserId()); json.put("create_name", SecurityUtils.getCurrentUsername()); json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "9"); - json.put("response_param", form.getString("truss_type")); - json.put("request_param", form.getString("request_param")); + json.put("task_status", StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")); + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + json.put("is_send", isSend); + json.put("product_area", form.getString("product_area")); taskService.save(json.toJavaObject(SchBaseTask.class)); //如果目标点位没有空位先创建不下发 - if (form.getBoolean("isSend")) { + if (isSend) { this.immediateNotifyAcs(json.getString("task_id")); } return json.getString("task_id"); @@ -272,11 +296,32 @@ public class MzhcwTask extends AbstractAcsTask { @Override public void forceFinish(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("输送线点位 -> 满轴缓存位强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override public void cancel(String task_id) { - + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("输送线点位 -> 满轴缓存位取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(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/packingArea/SsxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java similarity index 70% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/SsxDjwTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java index 3c8301878..1476a8f99 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/SsxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java @@ -1,6 +1,7 @@ -package org.nl.b_lms.sch.tasks.packingArea; +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.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; @@ -14,6 +15,7 @@ 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.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -21,12 +23,14 @@ import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** - * 空载具缓存位到输送线桁架任务 + * 2 目标输送线点位, 空载具缓存位 -> 输送线,桁架任务 * * @author gbx * @since 2024-01-24 @@ -70,7 +74,10 @@ public class SsxDjwTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type("2") + //.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); }); @@ -78,20 +85,19 @@ public class SsxDjwTask extends AbstractAcsTask { } @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(StringUtils.isNotBlank(taskObj.getString("task_code1")), SchBaseTask::getTask_code, taskObj.getString("task_code1")), false); if (schBaseTask == null) { - throw new BadRequestException("空载具缓存位到输送线桁架任务任务更新接口任务号为空!"); + throw new BadRequestException("空载具缓存位 -> 输送线更新接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); - taskService.update(schBaseTask); } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { //1.更改任务状态为完成 schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); - taskService.update(schBaseTask); //2.改变起点点位状态 packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空")).set("container_name", null).eq("point_code", schBaseTask.getPoint_code1())); //更新库存记录 @@ -114,16 +120,31 @@ public class SsxDjwTask extends AbstractAcsTask { kzjhcwTask.createTask(toKzjhcwTask); } } + // 取消 + 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(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override public String createTask(JSONObject form) { Assert.notNull(form, "请求参数不能为空"); - String task_type = form.getString("task_type"); if (StrUtil.isBlank(task_type)) { throw new BadRequestException("业务类型不能为空"); } + String vehicle_code = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } String point_code1 = form.getString("point_code1"); if (StrUtil.isBlank(point_code1)) { throw new BadRequestException("起点不能为空"); @@ -132,25 +153,14 @@ public class SsxDjwTask extends AbstractAcsTask { if (StrUtil.isBlank(point_code2)) { throw new BadRequestException("下一点不能为空"); } - String point_code3 = form.getString("point_code3"); - - String point_code4 = form.getString("point_code4"); - - String vehicle_code = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code)) { - throw new BadRequestException("载具号不能为空"); - } JSONObject json = new JSONObject(); + String point_code3 = form.getString("point_code3"); + String point_code4 = form.getString("point_code4"); + json.put("vehicle_code", form.getString("vehicle_code")); 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("vehicle_code", form.getString("vehicle_code")); - String task_status = form.getString("task_status"); - if (StrUtil.isEmpty(task_status)) { - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - } else { - json.put("task_status", task_status); - } + json.put("priority", "1"); json.put("point_code1", point_code1); json.put("point_code2", point_code2); json.put("point_code3", point_code3); @@ -159,13 +169,13 @@ public class SsxDjwTask extends AbstractAcsTask { json.put("create_id", SecurityUtils.getCurrentUserId()); json.put("create_name", SecurityUtils.getCurrentUsername()); json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "9"); - json.put("response_param", form.getString("truss_type")); - json.put("request_param", form.getString("request_param")); + json.put("task_status", StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")); + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + json.put("is_send", isSend); + json.put("product_area", form.getString("product_area")); taskService.save(json.toJavaObject(SchBaseTask.class)); //如果目标点位没有空位先创建不下发 - if (form.getBoolean("isSend")) { + if (isSend) { this.immediateNotifyAcs(json.getString("task_id")); } return json.getString("task_id"); @@ -173,11 +183,30 @@ public class SsxDjwTask extends AbstractAcsTask { @Override public void forceFinish(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false) ; + if (schBaseTask == null) { + throw new BadRequestException("空载具缓存位 -> 输送线强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override public void cancel(String task_id) { - + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false) ; + if (schBaseTask == null) { + throw new BadRequestException("空载具缓存位 -> 输送线取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(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/packingArea/DjqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java similarity index 57% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/DjqTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java index 633c2c0bd..f12e0792a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/DjqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java @@ -1,7 +1,8 @@ -package org.nl.b_lms.sch.tasks.packingArea; +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.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; @@ -9,12 +10,13 @@ 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; 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; @@ -22,30 +24,29 @@ import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** - * 满轴缓存位到待检区agv搬运任务 + * 6 目标装箱对接位, 装箱区 -> 装箱对接位,桁架任务 * * @author gbx - * @since 2024-01-24 + * @since 2024-02-01 */ @Service() @RequiredArgsConstructor @Slf4j -public class DjqTask extends AbstractAcsTask { +public class ZxDjwTask extends AbstractAcsTask { @Resource private IschBaseTaskService taskService; @Resource - private IbstIvtPackageinfoivtService packageinfoivtService; - - + private OutBoxManageService outBoxManageService; @Resource - private ZxqTask zxqTask; - - private final String THIS_CLASS = DjqTask.class.getName(); + private IbstIvtPackageinfoivtService packageinfoivtService; + private final String THIS_CLASS = ZxDjwTask.class.getName(); @Override public List addTask() { @@ -67,7 +68,10 @@ public class DjqTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type("2") + //.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); }); @@ -75,46 +79,45 @@ public class DjqTask extends AbstractAcsTask { } @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(StringUtils.isNotBlank(taskObj.getString("task_code1")), SchBaseTask::getTask_code, taskObj.getString("task_code1")), false); + .eq(StringUtils.isNotBlank(taskObj.getString("task_code")), SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + ; if (schBaseTask == null) { - throw new BadRequestException("待检区到空载具缓存位搬运空载具桁架任务更新接口任务号为空!"); + throw new BadRequestException("满轴缓存位 -> 管制区更新接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); - taskService.update(schBaseTask); } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { //1.更改任务状态为完成 schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); - taskService.update(schBaseTask); //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", 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())); - //todo 3.手持确认包装关系,生产包装关系表数据 - //todo 4.根据子卷包装关系查询木箱号,调刘先源的空木箱出库服务创建出库任务 - //5.创建子卷搬运到装箱区任务 - 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("空")) - .orderByAsc(BstIvtPackageinfoivt::getSort_seq)); - if(CollectionUtils.isNotEmpty(zxqPointList)) - { - JSONObject jo = new JSONObject(); - jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")); - jo.put("point_code1", schBaseTask.getPoint_code2()); - jo.put("point_code2", zxqPointList.get(0).getPoint_code()); - jo.put("vehicle_code", schBaseTask.getVehicle_code()); - zxqTask.createTask(jo); - } - + packageinfoivtService.update(new UpdateWrapper().set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); + //3.创建空木箱出库任务 + //device_code:终点,box_length: 长,box_width: 宽,box_high: 高,num: 子卷数 + JSONObject boxInfo = new JSONObject(); + boxInfo.put("device_code", schBaseTask.getPoint_code2()); + outBoxManageService.outBox(boxInfo); } + // 取消 + 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(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } + @Override public String createTask(JSONObject form) { Assert.notNull(form, "请求参数不能为空"); @@ -122,6 +125,10 @@ public class DjqTask extends AbstractAcsTask { if (StrUtil.isBlank(task_type)) { throw new BadRequestException("业务类型不能为空"); } + String vehicle_code = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } String point_code1 = form.getString("point_code1"); if (StrUtil.isBlank(point_code1)) { throw new BadRequestException("起点不能为空"); @@ -130,25 +137,14 @@ public class DjqTask extends AbstractAcsTask { if (StrUtil.isBlank(point_code2)) { throw new BadRequestException("下一点不能为空"); } - String point_code3 = form.getString("point_code3"); - - String point_code4 = form.getString("point_code4"); - - String vehicle_code = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code)) { - throw new BadRequestException("载具号不能为空"); - } JSONObject json = new JSONObject(); + String point_code3 = form.getString("point_code3"); + String point_code4 = form.getString("point_code4"); + json.put("vehicle_code", form.getString("vehicle_code")); 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("vehicle_code", form.getString("vehicle_code")); - String task_status = form.getString("task_status"); - if (StrUtil.isEmpty(task_status)) { - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - } else { - json.put("task_status", task_status); - } + json.put("priority", "1"); json.put("point_code1", point_code1); json.put("point_code2", point_code2); json.put("point_code3", point_code3); @@ -157,25 +153,45 @@ public class DjqTask extends AbstractAcsTask { json.put("create_id", SecurityUtils.getCurrentUserId()); json.put("create_name", SecurityUtils.getCurrentUsername()); json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "9"); - json.put("response_param", form.getString("truss_type")); - json.put("request_param", form.getString("request_param")); + json.put("task_status", StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")); + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + json.put("is_send", isSend); + json.put("product_area", form.getString("product_area")); taskService.save(json.toJavaObject(SchBaseTask.class)); //如果目标点位没有空位先创建不下发 - if (form.getBoolean("isSend")) { + if (isSend) { this.immediateNotifyAcs(json.getString("task_id")); } return json.getString("task_id"); } + @Override public void forceFinish(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区 -> 装箱对接位强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override public void cancel(String task_id) { - + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("装箱区 -> 装箱对接位取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(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/packingArea/ZxqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java similarity index 71% rename from lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/ZxqTask.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java index 435f49dc2..54f5ecca3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/ZxqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java @@ -1,7 +1,8 @@ -package org.nl.b_lms.sch.tasks.packingArea; +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.IdUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; @@ -16,6 +17,7 @@ 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.storage_manage.ios.enums.IOSEnum; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -23,6 +25,7 @@ import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.TaskStatusEnum; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; @@ -30,7 +33,7 @@ import java.util.List; /** - * 待检区到装箱区搬运任务 + * 5 目标装箱区,待检区 -> 装箱区 ,agv任务 * * @author gbx * @since 2024-02-01 @@ -72,7 +75,10 @@ public class ZxqTask extends AbstractAcsTask { .priority(r.getPriority()) .remark(r.getRemark()) .product_area(r.getProduct_area()) - .agv_system_type("2") + .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); }); @@ -80,28 +86,27 @@ public class ZxqTask extends AbstractAcsTask { } @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() - .eq(StringUtils.isNotBlank(taskObj.getString("task_code1")), SchBaseTask::getTask_code, taskObj.getString("task_code1")), false); + .eq(StringUtils.isNotBlank(taskObj.getString("task_code")), SchBaseTask::getTask_code, taskObj.getString("task_code")), false); + ; if (schBaseTask == null) { - throw new BadRequestException("待检区到空载具缓存位搬运空载具桁架任务更新接口任务号为空!"); + throw new BadRequestException("待检区 -> 装箱区更新接口任务号为空!"); } if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { // 更新任务状态为执行中 schBaseTask.setTask_status(TaskStatusEnum.EXECUTING.getCode()); - taskService.update(schBaseTask); } if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { //1.更改任务状态为完成 schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); - taskService.update(schBaseTask); //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())); //todo 3.刘先源的空木箱出库任务完成状态更新时,判断装箱区是否存在木箱号对应的子卷,如果存在,就创建搬运任务 - //4.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱位,否,什么都不做 + //4.查询子卷对应的包装关系表,判断装箱位的木箱号是否为子卷对应的木箱号,是,创建搬运任务到装箱对接位位,否,什么都不做 PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService .getOne(new LambdaUpdateWrapper().eq(PdmBiSubpackagerelation::getContainer_name, schBaseTask.getVehicle_code()), false); if (pdmBiSubpackagerelation != null) { @@ -121,6 +126,18 @@ public class ZxqTask extends AbstractAcsTask { } } } + // 取消 + 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(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @@ -131,6 +148,10 @@ public class ZxqTask extends AbstractAcsTask { if (StrUtil.isBlank(task_type)) { throw new BadRequestException("业务类型不能为空"); } + String vehicle_code = form.getString("vehicle_code"); + if (StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } String point_code1 = form.getString("point_code1"); if (StrUtil.isBlank(point_code1)) { throw new BadRequestException("起点不能为空"); @@ -139,25 +160,14 @@ public class ZxqTask extends AbstractAcsTask { if (StrUtil.isBlank(point_code2)) { throw new BadRequestException("下一点不能为空"); } - String point_code3 = form.getString("point_code3"); - - String point_code4 = form.getString("point_code4"); - - String vehicle_code = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code)) { - throw new BadRequestException("载具号不能为空"); - } JSONObject json = new JSONObject(); + String point_code3 = form.getString("point_code3"); + String point_code4 = form.getString("point_code4"); + json.put("vehicle_code", form.getString("vehicle_code")); 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("vehicle_code", form.getString("vehicle_code")); - String task_status = form.getString("task_status"); - if (StrUtil.isEmpty(task_status)) { - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - } else { - json.put("task_status", task_status); - } + json.put("priority", "1"); json.put("point_code1", point_code1); json.put("point_code2", point_code2); json.put("point_code3", point_code3); @@ -166,25 +176,46 @@ public class ZxqTask extends AbstractAcsTask { json.put("create_id", SecurityUtils.getCurrentUserId()); json.put("create_name", SecurityUtils.getCurrentUsername()); json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "9"); - json.put("response_param", form.getString("truss_type")); - json.put("request_param", form.getString("request_param")); + json.put("task_status", StrUtil.isEmpty(form.getString("task_status")) ? TaskStatusEnum.START_AND_POINT.getCode() : form.getString("task_status")); + boolean isSend = !StrUtil.isNotBlank(form.getString("is_send")) || BooleanUtil.toBoolean(form.getString("is_send")); + json.put("is_send", isSend); + json.put("product_area", form.getString("product_area")); taskService.save(json.toJavaObject(SchBaseTask.class)); //如果目标点位没有空位先创建不下发 - if (form.getBoolean("isSend")) { + if (isSend) { this.immediateNotifyAcs(json.getString("task_id")); } return json.getString("task_id"); } + @Override public void forceFinish(String task_id) { + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("待检区 -> 装箱区强制完成接口任务号为空!"); + } + schBaseTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(SecurityUtils.getCurrentUserId())); + schBaseTask.setUpdate_optname(SecurityUtils.getCurrentNickName()); + taskService.update(schBaseTask); } @Override public void cancel(String task_id) { - + SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper() + .eq(StringUtils.isNotBlank(task_id), SchBaseTask::getTask_id, task_id), false); + if (schBaseTask == null) { + throw new BadRequestException("待检区 -> 装箱区取消接口任务号为空!"); + } + schBaseTask.setTask_status(IOSEnum.ACS_RESULT.code("取消")); + schBaseTask.setUpdate_time(DateUtil.now()); + schBaseTask.setUpdate_optid(Long.valueOf(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/packingArea/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/GzqTask.java deleted file mode 100644 index 4015a6d07..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/GzqTask.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.nl.b_lms.sch.tasks.packingArea; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -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.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.stereotype.Service; -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; - -/** - * 满轴缓存位到管制区agv搬运任务 - * - * @author gbx - * @since 2024-01-24 - */ -@Service() -@RequiredArgsConstructor -@Slf4j -public class GzqTask extends AbstractAcsTask { - - private final String THIS_CLASS = GzqTask.class.getName(); - @Resource - private IschBaseTaskService taskService; - - - @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("2") - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - public void updateTaskStatus(JSONObject taskObj, String status) { - - } - - @Override - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String task_type = form.getString("task_type"); - if (StrUtil.isBlank(task_type)) { - throw new BadRequestException("业务类型不能为空"); - } - String point_code1 = form.getString("point_code1"); - if (StrUtil.isBlank(point_code1)) { - throw new BadRequestException("起点不能为空"); - } - String point_code2 = form.getString("point_code2"); - if (StrUtil.isBlank(point_code2)) { - throw new BadRequestException("下一点不能为空"); - } - String point_code3 = form.getString("point_code3"); - - String point_code4 = form.getString("point_code4"); - - String vehicle_code = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code)) { - throw new BadRequestException("载具号不能为空"); - } - 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("vehicle_code", form.getString("vehicle_code")); - String task_status = form.getString("task_status"); - if (StrUtil.isEmpty(task_status)) { - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - } else { - json.put("task_status", task_status); - } - json.put("point_code1", point_code1); - json.put("point_code2", point_code2); - json.put("point_code3", point_code3); - json.put("point_code4", point_code4); - json.put("handle_class", this.getClass().getName()); - json.put("create_id", SecurityUtils.getCurrentUserId()); - json.put("create_name", SecurityUtils.getCurrentUsername()); - json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "9"); - json.put("response_param", form.getString("truss_type")); - json.put("request_param", form.getString("request_param")); - taskService.save(json.toJavaObject(SchBaseTask.class)); - //如果目标点位没有空位先创建不下发 - if (form.getBoolean("isSend")) { - this.immediateNotifyAcs(json.getString("task_id")); - } - return json.getString("task_id"); - - - } - - @Override - public void forceFinish(String task_id) { - - } - - @Override - public void cancel(String task_id) { - - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/ZxDjwTask.java deleted file mode 100644 index fd3414191..000000000 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/packingArea/ZxDjwTask.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.nl.b_lms.sch.tasks.packingArea; - -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -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.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.stereotype.Service; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; - -/** - * 装箱区到装装箱对接位搬运任务 - * - * @author gbx - * @since 2024-02-01 - */ -@Service() -@RequiredArgsConstructor -@Slf4j -public class ZxDjwTask extends AbstractAcsTask { - @Resource - private IschBaseTaskService taskService; - private final String THIS_CLASS = ZxDjwTask.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("2") - .build(); - resultList.add(dto); - }); - return resultList; - } - - @Override - public void updateTaskStatus(JSONObject taskObj, String status) { - - - } - - @Override - public String createTask(JSONObject form) { - Assert.notNull(form, "请求参数不能为空"); - String task_type = form.getString("task_type"); - if (StrUtil.isBlank(task_type)) { - throw new BadRequestException("业务类型不能为空"); - } - String point_code1 = form.getString("point_code1"); - if (StrUtil.isBlank(point_code1)) { - throw new BadRequestException("起点不能为空"); - } - String point_code2 = form.getString("point_code2"); - if (StrUtil.isBlank(point_code2)) { - throw new BadRequestException("下一点不能为空"); - } - String point_code3 = form.getString("point_code3"); - - String point_code4 = form.getString("point_code4"); - - String vehicle_code = form.getString("vehicle_code"); - if (StrUtil.isBlank(vehicle_code)) { - throw new BadRequestException("载具号不能为空"); - } - 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("vehicle_code", form.getString("vehicle_code")); - String task_status = form.getString("task_status"); - if (StrUtil.isEmpty(task_status)) { - json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); - } else { - json.put("task_status", task_status); - } - json.put("point_code1", point_code1); - json.put("point_code2", point_code2); - json.put("point_code3", point_code3); - json.put("point_code4", point_code4); - json.put("handle_class", this.getClass().getName()); - json.put("create_id", SecurityUtils.getCurrentUserId()); - json.put("create_name", SecurityUtils.getCurrentUsername()); - json.put("create_time", DateUtil.now()); - json.put("priority", "1"); - json.put("acs_task_type", "9"); - json.put("response_param", form.getString("truss_type")); - json.put("request_param", form.getString("request_param")); - taskService.save(json.toJavaObject(SchBaseTask.class)); - //如果目标点位没有空位先创建不下发 - if (form.getBoolean("isSend")) { - this.immediateNotifyAcs(json.getString("task_id")); - } - return json.getString("task_id"); - } - - @Override - public void forceFinish(String task_id) { - - } - - @Override - public void cancel(String task_id) { - - } -} diff --git a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java index d1e5c5865..1a0bc88ff 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/enums/PackageInfoIvtEnum.java @@ -20,13 +20,28 @@ public enum PackageInfoIvtEnum { //点位类型 POINT_STATUS(MapOf.of("满轴缓存位", "1", "空载具缓存位", "2", "待检区", "3", "管制区", "4", "装箱区", "5", "装箱位", "6")), - TASK_TYPE(MapOf.of("输送线->满轴缓存位", "010701", "满轴缓存位->待检区", "010702", "满轴缓存位->管制区", "010703", "放空(空载具缓存位->输送线)", "010704", "取空(待检区->空载具缓存位)", "010705", "待检区->管制区", "010706","管制区->待检区", "010707","待检区->装箱区", "010708", "装箱区->装箱对接位", "010709")), + //任务类型 + TASK_TYPE(MapOf.of("输送线->满轴缓存位", "010701", "满轴缓存位->待检区", "010702", "满轴缓存位->管制区", "010703", "放空(空载具缓存位->输送线)", + "010704", "取空(待检区->空载具缓存位)", "010705", "待检区->管制区", "010706","管制区->待检区", "010707","待检区->装箱区", "010708", "装箱区->装箱对接位", "010709")), + + //ACS任务类型 + ACS_TASK_TYPE(MapOf.of("agv任务", "1", "桁架任务", "6")), + + //ACS系统类型 + AGV_SYSTEM_TYPE(MapOf.of("1楼叉车系统", "1", "2楼1区域AGV系统", "2", "2楼2区域AGV系统", "3")), + + //桁架任务类型 + TRUSS_TYPE(MapOf.of("点对点任务", "1", "下卷拔轴任务", "6", "换轴任务", "7","放轴任务", "8")), + //是否 IS_USED(MapOf.of("启用", "1", "未启用", "0")), + //位置 POINT_LOCATION(MapOf.of("上", "0", "下", "1")), + //库存状态 IVT_STATUS(MapOf.of("空", "0", "1", "空载具", "2", "有子卷")); + private Map code; public String code(String desc) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 02f584710..d995100a9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.ext.acs.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.NumberUtil; @@ -7,7 +8,6 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.google.common.collect.Interner; import com.google.common.collect.Interners; @@ -17,18 +17,12 @@ 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.dao.mapper.BstIvtPackageinfoivtMapper; -import org.nl.b_lms.sch.point.dao.mapper.SchBasePointMapper; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.point.service.IschBasePointService; -import org.nl.b_lms.sch.point.service.impl.BstIvtPackageinfoivtServiceImpl; -import org.nl.b_lms.sch.point.service.impl.SchBasePointServiceImpl; import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper; import org.nl.b_lms.sch.task.service.IschBaseTaskService; -import org.nl.b_lms.sch.task.service.impl.SchBaseTaskServiceImpl; import org.nl.b_lms.sch.tasks.TwoEmpExcepTask; -import org.nl.b_lms.sch.tasks.packingArea.MzhcwTask; +import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InVehicleManageService; @@ -1719,19 +1713,18 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { */ @Override public JSONObject sendProductToFirstFloor(JSONObject whereJson) { - log.info("sendProductToFirstFloor--------------------------:" + whereJson.toString()); - JSONObject result = new JSONObject(); - String task_code1 = whereJson.getString("task_code1"); - SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(StringUtils.isNotBlank(task_code1), SchBaseTask::getTask_code, task_code1)); - if (schBaseTask == null) { - throw new BadRequestException("接口sendProductToFirstFloor,任务号为空!"); - } - // JSONObject whereJson 应该传子卷信息,子卷等级,载具号,任务号,车间号 + // JSONObject whereJson 应该传子卷号,设备号,车间号 // 先查询满轴缓存位是否有可用库位,有创建搬运任务 // 任务完成创建空载具补充到输送线桁架任务,子卷搬运至待检区或或管制区agv任务 // 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发; // 这个情况是有agv任务在搬去待检区或管制区的路上,还没有更新任务状态;需要查询是否有这种任务,等这个任务更新完后, // 再补发之前创建的输送线到满轴缓存位任务; + log.info("sendProductToFirstFloor--------------------------:" + whereJson.toString()); + JSONObject result = new JSONObject(); + if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) { + throw new BadRequestException("接口sendProductToFirstFloor,任务号或子卷号参数为空!"); + + } //1.查询满轴缓存位是否有空位 List bstIvtPackageinfoivtList = packageinfoivtService .list(new LambdaUpdateWrapper() @@ -1739,40 +1732,52 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { .eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用")) .eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code("空")).orderByAsc(BstIvtPackageinfoivt::getSort_seq)); JSONObject jo = new JSONObject(); - //todo 添加任务类型 jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")); - //一楼到输送线任务的目标点为当前位置,为起点 - jo.put("point_code1", schBaseTask.getPoint_code2()); - //任意一个满轴缓存位为终点 - jo.put("point_code2", bstIvtPackageinfoivtList.get(0).getPoint_code()); - //获取子卷号 - jo.put("vehicle_code", whereJson.getString("container_name1")); + jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务")); + //todo 获取子卷号,子卷号就是载具号? + jo.put("vehicle_code", whereJson.getString("material_barcode")); + //2.创建输送线->满轴位桁架任务, + String point_code1 = whereJson.getString("device_code"); + jo.put("point_code1", point_code1); if (CollectionUtils.isNotEmpty(bstIvtPackageinfoivtList)) { - jo.put("isSend", true); + //任意一个满轴缓存位为终点 + jo.put("point_code2", bstIvtPackageinfoivtList.get(0).getPoint_code()); + jo.put("is_send", true); mzhcwTask.createTask(jo); result.put("status", HttpStatus.OK.value()); result.put("message", "反馈成功!"); return result; } else { - //满轴缓存位点位 + //3.满轴缓存位点位,查找正在搬运到待检区的任务 List packageinfoivtList = packageinfoivtService .list(new LambdaUpdateWrapper() .eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))); - //todo 查找正在搬运到待检区的任务,假设只有一个,现场其实有多个车正在搬运过去 + //todo 查找正在起点为满轴缓存位点位,且执行中搬运到待检区或管制区的任务,如果有一个或多个,现场其实有多个车正在搬运过去 List taskList = taskService.list(new LambdaUpdateWrapper() //执行中 + .nested( + r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")) + .or().eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->管制区"))) .eq(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()) .and( r -> r.in(SchBaseTask::getPoint_code1, packageinfoivtList) )); - // 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发; + //4.满轴缓存位无空闲库位,且无执行中搬运到待检区或管制区的任务,则报错! + if (CollectionUtils.isEmpty(taskList)) { + throw new BadRequestException("接口sendProductToFirstFloor,满轴缓存位暂无空闲库位!"); + } + // 5.如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发; + // 创建前先判断是否有已创建相同任务 List existTaskList = taskService.list(new LambdaUpdateWrapper() - //是否存在已创建的目标点相同的未下发的任务 - .eq(SchBaseTask::getPoint_code2, taskList.get(0).getPoint_code1()) - .eq(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode())); + .eq(SchBaseTask::getPoint_code1, point_code1) + .eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())); + //6.如果有就不创建,没有就创建 + // 等这边空出来点位,也就是满轴位->待检区或管制区任务完成后,再补发; if (CollectionUtils.isEmpty(existTaskList)) { - jo.put("point_code2", taskList.get(0).getPoint_code1()); - jo.put("isSend", false); + //暂时只确定起点,正在搬运的满轴位->待检区的点位,暂不作为终点 + //jo.put("point_code2", taskList.get(0).getPoint_code1()); + jo.put("task_status", TaskStatusEnum.SURE_START.getCode()); + jo.put("is_send", false); mzhcwTask.createTask(jo); } result.put("status", HttpStatus.OK.value()); @@ -1822,7 +1827,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘入库"))) { // 2-空盘入库 - whereJson.put("vehicle_type",whereJson.getString("container_type")); + whereJson.put("vehicle_type", whereJson.getString("container_type")); inVehicleManageService.inVehicle(whereJson); } else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("空盘出库"))) { @@ -1832,7 +1837,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { throw new BadRequestException("载具类型不能为空!"); } - whereJson.put("vehicle_type",whereJson.getString("container_type")); + whereJson.put("vehicle_type", whereJson.getString("container_type")); outVehicleManageService.outVehicle(whereJson); } else if (type.equals(IOSEnum.ACSTOLMS_TYPE.code("异常处理位"))) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java index 338e17b49..b6b958c94 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java @@ -14,10 +14,9 @@ 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.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.ProcessTask; -import org.nl.b_lms.sch.tasks.packingArea.DjqTask; -import org.nl.b_lms.sch.tasks.packingArea.GzqTask; +import org.nl.b_lms.sch.tasks.first_floor_area.DjqTask; +import org.nl.b_lms.sch.tasks.first_floor_area.GzqTask; import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -1574,9 +1573,8 @@ public class MesToLmsServiceImpl implements MesToLmsService { log.info("sendTargetHouse输入参数为:-------------------" + param.toString()); JSONObject resultParam = new JSONObject(); try { - String containerName = param.getString("ContainerName"); + String containerName = param.getString("sconds"); String TargetHouse = param.getString("TargetHouse"); - if (StringUtils.isBlank(containerName)) { throw new BadRequestException("传入的母卷号不能为空!"); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java index c9afb704b..b1a25052c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AbstractAcsTask.java @@ -110,7 +110,6 @@ public abstract class AbstractAcsTask { public JSONObject immediateNotifyAcs(String task_id) { List taskList = this.schedule(); if (ObjectUtil.isNotEmpty(taskList)) { - JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList)); return AcsUtil.notifyAcs("api/wms/task", arr); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java index 6fdcea1f6..d30bace53 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/TaskStatusEnum.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.manage; public enum TaskStatusEnum { + CREATED("01", "生成"), SURE_START("02", "确定起点"), SURE_END("03", "确定终点"),