From 3b744ea6988deb5b9e763cbf670f4f9ea3f259af Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Wed, 30 Apr 2025 10:35:40 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=96=B0=E5=A2=9E=E7=A9=BA=E8=BD=B4?= =?UTF-8?q?=E9=80=80=E5=9B=9E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IBstIvtShafttubeivtService.java | 2 + .../dao/mapper/BstIvtShafttubeivtMapper.java | 4 + .../dao/mapper/BstIvtShafttubeivtMapper.xml | 19 ++ .../impl/BstIvtShafttubeivtServiceImpl.java | 5 + .../pda/controller/SlitterPdaController.java | 7 + .../sch/tasks/slitter/ReturnShaftAgvTask.java | 219 ++++++++++++++++++ .../tasks/slitter/SendShaftToCacheTask.java | 166 +++++++++++++ .../tasks/slitter/constant/SlitterEnum.java | 2 +- .../tasks/slitter/service/SlitterService.java | 7 + .../service/impl/SlitterServiceImpl.java | 77 ++++++ .../java/org/nl/common/utils/TaskUtils.java | 16 ++ .../acs/service/impl/AcsToWmsServiceImpl.java | 31 +++ 12 files changed, 554 insertions(+), 1 deletion(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/ReturnShaftAgvTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendShaftToCacheTask.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java index f8c65d218..0f02c094b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/IBstIvtShafttubeivtService.java @@ -103,4 +103,6 @@ public interface IBstIvtShafttubeivtService extends IService * @return / */ List getOtherCBJData(String pointCode, String location); + + List getNotTaskEmptyShaftCache(String size, String qzz_generation, String location); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java index d86e3de21..3ab9dd097 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.java @@ -35,4 +35,8 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper List getNotTaskShaftCacheEmpty(@Param("startPoint") BstIvtShafttubeivt startPoint); List getOtherCBJData(String pointCode, String location); + + List getNotTaskEmptyShaftCache(@Param("size") String size, + @Param("qzz_generation") String qzz_generation, + @Param("location") String location); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml index b701258c1..029697188 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/dao/mapper/BstIvtShafttubeivtMapper.xml @@ -64,4 +64,23 @@ AND (IFNULL(bsf.container_name1,'') ]]> '' OR IFNULL(bsf.container_name2,'') ]]> '') AND point_location = #{location} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java index 3037e44fc..0ecafd762 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/shafttubeivt/service/impl/BstIvtShafttubeivtServiceImpl.java @@ -149,4 +149,9 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl getNotTaskEmptyShaftCache(String size, String qzz_generation,String location) { + return bstIvtShafttubeivtMapper.getNotTaskEmptyShaftCache(size, qzz_generation, location); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java index 58303962a..f640d194c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/SlitterPdaController.java @@ -244,4 +244,11 @@ public class SlitterPdaController { public ResponseEntity downBait(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(slitterService.downBait(whereJson), HttpStatus.OK); } + + @PostMapping("/returnShaft") + @Log("空轴送回") + @SaIgnore + public ResponseEntity returnShaft(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterService.returnShaft(param), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/ReturnShaftAgvTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/ReturnShaftAgvTask.java new file mode 100644 index 000000000..82685ff3e --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/ReturnShaftAgvTask.java @@ -0,0 +1,219 @@ +package org.nl.b_lms.sch.tasks.slitter; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService; +import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt; +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.slitter.constant.SlitterConstant; +import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.TaskUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.InHotTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Author: tq + * @Description: 空轴退回的AGV任务 + * @Date: 2025/4/25 + */ +@Slf4j +@Service +public class ReturnShaftAgvTask extends AbstractAcsTask { + private final String THIS_CLASS = ReturnShaftAgvTask.class.getName(); + @Autowired + private IschBaseTaskService taskService; + @Autowired + private IBstIvtCutpointivtService bcutpointivtService; + @Autowired + private IBstIvtShafttubeivtService shafttubeivtService; + @Autowired + private SendShaftToCacheTask sendShaftToCacheTask; + + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + List taskList = taskService.getIssueTasks(THIS_CLASS); + + ArrayList resultList = new ArrayList<>(); + String agv_system_type = "2"; + for (SchBaseTask task : taskList) { + String requestParam = task.getRequest_param(); + JSONObject requestParamObj = JSONObject.parseObject(requestParam); + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(task.getTask_id()) + .task_code(task.getTask_code()) + .task_type(task.getAcs_task_type()) + .start_device_code(task.getPoint_code1()) + .next_device_code(task.getPoint_code2()) + .start_device_code2(task.getPoint_code3()) + .next_device_code2(task.getPoint_code4()) + .vehicle_code(task.getVehicle_code()) + .agv_system_type(agv_system_type) + .priority(task.getPriority()) + .remark(task.getRemark()) + .product_area(task.getProduct_area()) + .build(); + resultList.add(dto); + } + return resultList; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject taskObj, String status) { + SchBaseTask task = taskService.getById(taskObj.getString("task_id")); + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + task.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + } + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + if (TaskStatusEnum.FINISHED.getCode().equals(task.getTask_status())) { + throw new BadRequestException("任务[" + task.getTask_code() + "]已经完成!"); + } + task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + JSONObject requestParam = JSONObject.parseObject(task.getRequest_param()); + // 互换资源 + // update: 在acs请求取货完成就已经清空点位信息 + String endPoint = task.getPoint_code2(); + BstIvtCutpointivt endPointObj = bcutpointivtService.getPintByAgvCode(endPoint, false); + TaskUtils.pointMaintenanceInventory(task, endPointObj, "4"); + bcutpointivtService.updateById(endPointObj); + + BstIvtShafttubeivt putWaitPoint = shafttubeivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtShafttubeivt::getPoint_location, endPointObj.getPoint_location()) + .eq(BstIvtShafttubeivt::getPoint_type, "8")); + if (ObjectUtil.isEmpty(putWaitPoint)) { + throw new BadRequestException("未找到可存放气涨轴规格「" + endPoint + "」的等待点位"); + } + + + // 创建行架任务 + if (ObjectUtil.isNotEmpty(endPointObj.getQzz_no1())){ + String qzzSize = endPointObj.getQzz_no1(); + String[] split = qzzSize.split("-"); + String size = split[0]; + String qzz_generation = split[1]; + List shafttubeivts = checkIsHaveEmptyPoint(size,qzz_generation); + if (shafttubeivts.size() == 0) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); + } + JSONObject param = new JSONObject(); + param.put("point_code1", endPointObj.getTruss_point_code1()); + param.put("point_code2", putWaitPoint.getPoint_code()); + // hint: 当前分切计划的气涨轴尺寸 + param.put("qzz_size", endPointObj.getQzz_no1()); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>气胀轴缓存位")); + param.put("is_bushing", "0"); + sendShaftToCacheTask.createTask(param); + } + if (ObjectUtil.isNotEmpty(endPointObj.getQzz_no2())){ + String qzzSize = endPointObj.getQzz_no2(); + String[] split = qzzSize.split("-"); + String size = split[0]; + String qzz_generation = split[1]; + List shafttubeivts = checkIsHaveEmptyPoint(size,qzz_generation); + if (shafttubeivts.size() == 0) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); + } + JSONObject param = new JSONObject(); + param.put("point_code1", endPointObj.getTruss_point_code2()); + param.put("point_code2", putWaitPoint.getPoint_code()); + // hint: 当前分切计划的气涨轴尺寸 + param.put("qzz_size", endPointObj.getQzz_no2()); + param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>气胀轴缓存位")); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + param.put("is_bushing", "0"); + sendShaftToCacheTask.createTask(param); + } + + } + // 取消 + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + } + task.setUpdate_time(DateUtil.now()); + taskService.updateById(task); + } + + private List checkIsHaveEmptyPoint(String size, String qzz_generation) { + // 获取空位 + List shafttubeivts = shafttubeivtService.getNotTaskEmptyShaftCache(size, qzz_generation,"0"); + return shafttubeivts; + } + + + @Override + public String createTask(JSONObject form) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setPoint_code1(form.getString("point_code1")); + task.setPoint_code2(form.getString("point_code2")); + task.setVehicle_code(form.getString("vehicle_code1")); + task.setVehicle_code2(form.getString("vehicle_code2")); + task.setAcs_task_type("3"); + task.setIs_delete("0"); + task.setRequest_param(form.toJSONString()); + task.setTask_type(form.getString("task_type")); + task.setProduct_area(form.getString("product_area")); + task.setRequest_param(JSONObject.toJSONString(form)); + task.setCreate_id(currentUserId); + task.setCreate_name(currentUsername); + task.setCreate_time(DateUtil.now()); + task.setHandle_class(THIS_CLASS); + //根据类型获取对应的任务优先级 + JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0); + if (ObjectUtil.isEmpty(priority_jo)) { + task.setPriority("1"); + } else { + task.setPriority(priority_jo.getString("value")); + } + taskService.save(task); + this.immediateNotifyAcs(null); + return task.getTask_id(); + } + + @Override + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + + @Override + public void cancel(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, "0"); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendShaftToCacheTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendShaftToCacheTask.java new file mode 100644 index 000000000..6300a5e44 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendShaftToCacheTask.java @@ -0,0 +1,166 @@ +package org.nl.b_lms.sch.tasks.slitter; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService; +import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt; +import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService; +import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt; +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.slitter.constant.SlitterEnum; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.common.utils.SecurityUtils; +import org.nl.common.utils.TaskUtils; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: tq + * @Description: 桁架从套轴对接位送气涨轴库 + * @Date: 2025/4/25 + */ +@Slf4j +@Service +public class SendShaftToCacheTask extends AbstractAcsTask { + private final String THIS_CLASS = SendShaftToCacheTask.class.getName(); + @Autowired + private IschBaseTaskService taskService; + @Autowired + private IBstIvtShafttubeivtService shafttubeivtService; + @Autowired + private IBstIvtCutpointivtService bcutpointivtService; + + @Override + public List addTask() { + /* + * 下发给ACS时需要特殊处理 + */ + List taskList = taskService.getIssueTasks(THIS_CLASS); + + ArrayList resultList = new ArrayList<>(); + String agv_system_type = "2"; + for (SchBaseTask task : taskList) { + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(task.getTask_id()) + .task_code(task.getTask_code()) + .task_type(task.getAcs_task_type()) + .start_device_code(task.getPoint_code1()) + .next_device_code(task.getPoint_code2()) + .start_device_code2(task.getPoint_code3()) + .next_device_code2(task.getPoint_code4()) + .vehicle_code(task.getVehicle_code()) + .agv_system_type(agv_system_type) + .priority(task.getPriority()) + .remark(task.getRemark()) + .product_area(task.getProduct_area()) + .build(); + resultList.add(dto); + } + return resultList; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void updateTaskStatus(JSONObject taskObj, String status) { + SchBaseTask task = taskService.getById(taskObj.getString("task_id")); + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + task.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + } + + if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) { + // 更改任务状态为完成 + task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + String startPoint = task.getPoint_code1(); + String prefix = startPoint.substring(0, startPoint.length() - 2); + String endPoint = task.getPoint_code2(); + BstIvtCutpointivt startPointObj = bcutpointivtService.getPintByAgvCode(prefix, false); + BstIvtShafttubeivt endPointObj = shafttubeivtService.getByPointCode(endPoint, false); + // 起点清空 + if (startPoint.contains("A")) { + startPointObj.setQzz_no1(""); + } + if (startPoint.contains("B")) { + startPointObj.setQzz_no2(""); + } + TaskUtils.pointMaintenance(task, startPointObj); + bcutpointivtService.updateById(startPointObj); + + endPointObj.setHave_qzz("1"); + TaskUtils.updateOptMessageByBShaftPoint(endPointObj); + shafttubeivtService.updateById(endPointObj); + BstIvtCutpointivt startPointParam = bcutpointivtService.getPintByAgvCode(prefix, false); + if (ObjectUtil.isEmpty(startPointParam.getQzz_no1()) && ObjectUtil.isEmpty(startPointParam.getQzz_no2())) { + startPointParam.setPoint_status("1"); + bcutpointivtService.updateById(startPointParam); + } + } + // 取消 + if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { + task.setTask_status(TaskStatusEnum.FINISHED.getCode()); + } + TaskUtils.updateOptMessageByTask(task); + taskService.updateById(task); + } + + @Override + public String createTask(JSONObject form) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr()); + task.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); + task.setPoint_code1(form.getString("point_code1")); + task.setPoint_code2(form.getString("point_code2")); + task.setTask_type("010815"); + task.setAcs_task_type("6"); + task.setIs_delete("0"); + task.setRequest_param(form.toJSONString()); + task.setTask_type(form.getString("task_type")); + task.setProduct_area(form.getString("product_area")); + task.setCreate_id(currentUserId); + task.setCreate_name(currentUsername); + task.setCreate_time(DateUtil.now()); + task.setHandle_class(THIS_CLASS); + //根据类型获取对应的任务优先级 + JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0); + if (ObjectUtil.isEmpty(priority_jo)) { + task.setPriority("1"); + } else { + task.setPriority(priority_jo.getString("value")); + } + taskService.save(task); + this.immediateNotifyAcs(null); + return task.getTask_id(); + } + + @Override + public void forceFinish(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); + } + + + @Override + public void cancel(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, "0"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java index 1ca942f2b..ed852f5c2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/constant/SlitterEnum.java @@ -22,7 +22,7 @@ public enum SlitterEnum { TASK_TYPE(MapOf.of("穿拔轴缓存<>穿拔轴位", "010801", "穿拔轴缓存<>分切对接位", "010802", "穿拔轴位<>气胀轴缓存位", "010803" , "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807" , "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811" - , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814")); + , "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815")); private Map code; public String code(String desc) { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java index 0df996b0d..f67edcdf1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/SlitterService.java @@ -355,4 +355,11 @@ public interface SlitterService { * @return */ JSONObject downBait(JSONObject param); + + /** + * 空轴退回 + * @param param + * @return + */ + JSONObject returnShaft(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index 36487aced..53f97ddb4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -124,6 +124,8 @@ public class SlitterServiceImpl implements SlitterService { @Autowired private UpShaftTrussTask upShaftTrussTask; @Autowired + private ReturnShaftAgvTask returnShaftAgvTask; + @Autowired private ISysNoticeService noticeService; @Override @@ -2354,6 +2356,81 @@ public class SlitterServiceImpl implements SlitterService { return res; } + @Override + public JSONObject returnShaft(JSONObject param) { + log.info("空轴退回 - {}", param); + JSONObject res = new JSONObject(); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "创建AGV任务成功!"); + // param: point_code + String pointCode = param.getString("point_code"); + //缓存A气胀轴规格 3-4 三寸四代 + String size1 = param.getString("size1"); + //缓存B气胀轴规格 + String size2 = param.getString("size2"); + + BstIvtCutpointivt point = bcutpointivtService.getPintByAgvCode(pointCode, false); + // 校验是否存在行架任务 + Boolean haveTaskByZcPoint = taskService.checkHaveTaskByZcPoint(point); + if (haveTaskByZcPoint) { + throw new BadRequestException("操作失败,点位[" + pointCode + "]存在未完成的行架任务!"); + } + // 校验是否存在agv任务 + List taskList = taskService.checkHaveStartTask(pointCode); + if (taskList.size() > 0) { + throw new BadRequestException("操作失败,点位[" + pointCode + "]存在未完成的agv任务!"); + } + + if (ObjectUtil.equals(point.getPoint_status(), "2")) { + // 如果是没货 + throw new BadRequestException("点位:" + point.getPoint_code() + "检测空气胀轴,请先清空点位信息再触发!!"); + } + if (ObjectUtil.equals(point.getPoint_status(), "3")) { + throw new BadRequestException("点位:" + point.getPoint_code() + "检测子卷,请先清空点位信息再触发!!"); + } + if (ObjectUtil.isNotEmpty(point.getQzz_no1()) || ObjectUtil.isNotEmpty(point.getQzz_no2())) { + throw new BadRequestException("点位:" + point.getPoint_code() + " 的气胀轴编码不为空,请先清空点位信息再触发!!"); + } + if (Objects.equals(point.getPoint_status(), "1") && ObjectUtil.isEmpty(point.getQzz_no1()) && ObjectUtil.isEmpty(point.getQzz_no2())) { + // 如果是没货 绑定为空轴状态 + point.setPoint_status("4"); + bcutpointivtService.updateById(point); + } + JSONObject taskParam = new JSONObject(); + + // 获取内包间缓存位 + List areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", "0", "2"); + if (areaEmptyNotTaskPoint.size() <= 1) { + throw new BadRequestException("请求搬运失败,内包间没有可存放位置!"); + } + BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0); + RLock lock = redissonClient.getLock(endPoint.getPoint_code()); + boolean tryLock; + try { + tryLock = lock.tryLock(0, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new BadRequestException("获取锁异常"); + } + try { + if (tryLock) { + taskParam.put("point_code1", point.getPoint_code()); + taskParam.put("point_code2", endPoint.getPoint_code()); + taskParam.put("vehicle_code1", size1); + taskParam.put("vehicle_code2", size2); + taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下料AGV到内包间")); + taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + returnShaftAgvTask.createTask(taskParam); + } else { + throw new BadRequestException("系统繁忙,稍后在试!!"); + } + } finally { + if (lock.isLocked() && lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + return res; + } + @Override @Transactional(rollbackFor = Exception.class) public JSONObject downBait(JSONObject param) { diff --git a/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java b/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java index 90c30a0ab..38cb2421d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/common/utils/TaskUtils.java @@ -66,6 +66,22 @@ public class TaskUtils { target.setUpdate_time(now); } + + /** + * 根据任务维护分切点位库存 + * @param target + */ + public static void pointMaintenance(SchBaseTask task, BstIvtCutpointivt target) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + target.setUpdate_optid(currentUserId); + target.setUpdate_optname(currentUsername); + target.setUpdate_time(now); + } + + + /** * 用0,1,2,3四个的二进制字符表示是下单(双)上单(双) * @param currentUpPlan 要下来的上轴 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 84e7cbe54..244f554bf 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 @@ -2892,6 +2892,37 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { targetPoint = task.getPoint_code2(); } } + if ("3".equals(type)) { + if (task.getPoint_code2().contains("FHD")) { + // 请求放货 + // 穿拔轴点位 + String deviceCode = task.getPoint_code1(); + BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); + JSONObject requestParam = JSONObject.parseObject(task.getRequest_param()); + String qzzSize = requestParam.getString("qzz_size"); + if (ObjectUtil.isEmpty(qzzSize)) { + throw new BadRequestException("气涨轴规格不能为空!"); + } + String[] split = qzzSize.split("-"); + String size = split[0]; + String qzz_generation = split[1]; + + // 获取空位 + List shafttubeivts = shafttubeivtService.getNotTaskEmptyShaftCache(size, qzz_generation,"0"); + if (shafttubeivts.size() == 0) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); + } + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + targetPoint = shafttubeivt.getPoint_code(); + // 修改任务 + task.setPoint_code2(targetPoint); + task.setRemark("放货请求成功"); + task.setUpdate_time(DateUtil.now()); + updateFlag = true; + } else { + targetPoint = task.getPoint_code2(); + } + } if (updateFlag) { taskService.updateById(task); }