diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/AcsToWmsController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/AcsToWmsController.java new file mode 100644 index 0000000..b97566c --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/AcsToWmsController.java @@ -0,0 +1,44 @@ +package org.nl.wms.ext; + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.logging.annotation.Log; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: acs请求lms接口 + * @Date: 2023/6/16 + */ +@RestController +@Api(tags = "acs请求lms") +@RequestMapping("/api/wms/task") +@Slf4j +@SaIgnore +public class AcsToWmsController { + @Autowired + private ISchBaseTaskService schBaseTaskService; + + @PostMapping("/apply") + @Log("新增任务管理") + @ApiOperation("新增任务管理") + //@SaCheckPermission("@el.check('schBaseTask:add')") + @SaIgnore + public ResponseEntity apply(@RequestBody Map param) { + schBaseTaskService.apply(JSONObject.parseObject(JSON.toJSONString(param))); + return new ResponseEntity<>(HttpStatus.CREATED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java index f474c8d..3a5c96d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java @@ -108,6 +108,9 @@ public class PdmBdWorkorder implements Serializable { @ApiModelProperty(value = "修改时间") private String update_time; + @ApiModelProperty(value = "是否加急") + private Boolean is_urgent; + @TableField(exist = false) private String material_name; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java index 40a4739..b2a335f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java @@ -137,4 +137,8 @@ public class SchBasePoint implements Serializable { @TableField(exist = false) private String point_status_name; + // 组盘标识 + @TableField(exist = false) + private String group_id; + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 6d19383..453fe8d 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -67,12 +67,17 @@ public class SchBasePointServiceImpl extends ServiceImpl slam.isNotNull(SchBasePoint::getIng_task_code) .ne(SchBasePoint::getIng_task_code, "")) + .orderByAsc(SchBasePoint::getRegion_code) + .orderByAsc(SchBasePoint::getPoint_type) + .orderByAsc(SchBasePoint::getPoint_code) .apply(parent_point, "point_code = parent_point_code"); IPage pages = new Page<>(page.getPage() + 1, page.getSize()); pointMapper.selectPage(pages, lam); // 可以存放的载具类型 pages.getRecords().forEach(point -> { - point.setCan_vehicle_types(Arrays.asList(point.getCan_vehicle_type().split(","))); + if (ObjectUtil.isNotEmpty(point.getCan_vehicle_type())) { + point.setCan_vehicle_types(Arrays.asList(point.getCan_vehicle_type().split(","))); + } String pointStatus = point.getPoint_status(); // 点位状态 String pointType = point.getPoint_type(); // 点位类型 SchBaseRegion regionObj = regionMapper.selectById(point.getRegion_code()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java index f747885..542094f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java @@ -77,16 +77,6 @@ public class SchBaseTaskController { return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.getTaskStatusList()),HttpStatus.OK); } - @PostMapping("/apply") - @Log("新增任务管理") - @ApiOperation("新增任务管理") - //@SaCheckPermission("@el.check('schBaseTask:add')") - @SaIgnore - public ResponseEntity apply(@RequestBody Map param){ - schBaseTaskService.apply(JSONObject.parseObject(JSON.toJSONString(param))); - return new ResponseEntity<>(HttpStatus.CREATED); - } - @PutMapping("/operation") @Log("任务操作") @ApiOperation("任务操作") diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java index ac2e680..ec58783 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java @@ -45,11 +45,14 @@ public class SchBaseTask implements Serializable { @ApiModelProperty(value = "点位4") private String point_code4; + @ApiModelProperty(value = "组盘标识") + private String group_id; + @ApiModelProperty(value = "载具类型") private String vehicle_type; @ApiModelProperty(value = "载具数量") - private BigDecimal vehicle_qty; + private Integer vehicle_qty; @ApiModelProperty(value = "载具编码") private String vehicle_code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java index a7cfed2..28a972f 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java @@ -1,6 +1,8 @@ package org.nl.wms.sch.task.service.dto; import java.math.BigDecimal; + +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -34,6 +36,9 @@ public class SchBaseTaskDto implements Serializable { /** 点位4 */ private String point_code4; + @ApiModelProperty(value = "组盘标识") + private String group_id; + /** 载具类型 */ private String vehicle_type; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java index 0d18d0e..3b1062b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -116,8 +116,8 @@ public class SchBaseTaskServiceImpl extends ServiceImpl lam = new LambdaQueryWrapper<>(); lam.eq(SchBaseTask::getConfig_code, config_code) .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) - .ne(SchBaseTask::getTask_code, task_code) - .ne(SchBaseTask::getIs_delete, true); + .ne(SchBaseTask::getTask_code, task_code) // 不是当前任务 + .eq(SchBaseTask::getIs_delete, false); List schBaseTasks = schBaseTaskMapper.selectList(lam); return schBaseTasks; } @@ -169,6 +169,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl param) { String task_code = ObjectUtil.isNotEmpty(param.get("task_code")) ? param.get("task_code").toString() : null; String method_name = ObjectUtil.isNotEmpty(param.get("method_name")) ? param.get("method_name").toString() : null; + String config_code = ObjectUtil.isNotEmpty(param.get("config_code")) ? param.get("config_code").toString() : null; + if (ObjectUtil.isEmpty(task_code) || ObjectUtil.isEmpty(method_name) || ObjectUtil.isEmpty(config_code)) { + throw new BadRequestException("操作失败"); + } // 根据标识找到任务 SchBaseTask taskOne = schBaseTaskMapper.selectById(task_code); if (Integer.parseInt(taskOne.getTask_status()) >= Integer.parseInt(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("任务已完成或已取消!"); } // 根据配置去工厂类获得类对象 - String processing_class = "HNMLTask"; + String processing_class = config_code; String message = ""; // 根据任务类型获取对应的任务操作类 AbstractTask abstractTask = taskFactory.getTask(processing_class); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index 760f6ba..667d543 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -14,6 +14,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum; +import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum; import org.nl.wms.sch.task_manage.task.AcsUtil; import org.nl.wms.sch.task_manage.task.core.TaskStatus; import org.springframework.beans.factory.annotation.Autowired; @@ -149,7 +150,6 @@ public abstract class AbstractTask { */ public abstract void cancel(String task_code); - /** * 申请任务 * @@ -159,31 +159,35 @@ public abstract class AbstractTask { public void apply(JSONObject param) throws BadRequestException { // 申请任务 SchBaseTask task = new SchBaseTask(); // 任务实体 - String apply_point_code = param.getString("device_code"); - String config_code = param.getString("config_code"); // "HNMLTask" + String apply_point_code = param.getString("device_code"); // 请求点 + String config_code = param.getString("config_code"); // 1、校验数据 SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, config_code)); + Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!"); // 最大任务数 Integer tcmn = taskConfig.getTask_create_max_num(); - List unFinishTasksByTaskConfig = taskService - .findUnFinishTasksByTaskConfig(taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction()); + // 获取执行中的任务 + List unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig( + taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction()); - Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, "该点位申请的任务未完成数已超过上限,无法申请任务"); + Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, + "该点位申请的任务未完成数已超过上限,无法申请任务"); // 获取对接位点位对象 - SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, apply_point_code)); + SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, apply_point_code)); // 判断是否校验工单 if (taskConfig.getIs_check_workorder()) { // 校验工单 // 根据对接位的父点位编码(设备)找到工单设备 SchBasePoint one = pointService.getOne(new LambdaQueryWrapper() .eq(SchBasePoint::getPoint_code, pointObj.getParent_point_code())); - // 查找当前设备、生产中、 + // 查找当前设备、生产中 PdmBdWorkorder workorder = workorderService.getOne(new LambdaQueryWrapper() .eq(PdmBdWorkorder::getPoint_code, one.getPoint_code()) - .eq(PdmBdWorkorder::getWorkorder_status, "3")); + .eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode())); if (ObjectUtil.isEmpty(workorder)) { - throw new BadRequestException("当前设备工单未生产!"); + throw new BadRequestException("设备" + one.getPoint_code() + "工单未生产!"); } param.put("workorder_code", workorder.getWorkorder_code()); // 静置时间 // 设置任务数据 @@ -199,7 +203,9 @@ public abstract class AbstractTask { task.setConfig_code(config_code); task.setCreate_mode(param.getString("create_mode")); task.setVehicle_code(param.getString("vehicle_code")); + task.setVehicle_qty(param.getInteger("vehicle_qty")); task.setTask_status(TaskStatus.APPLY.getCode()); + task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 // 设置起/终点 this.setTaskPoint(taskConfig, task, apply_point_code); task.setExt_group_data(JSONObject.toJSONString(param)); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java index 811ed43..e92e1ef 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java @@ -12,9 +12,9 @@ import lombok.Getter; @AllArgsConstructor public enum PointStatusEnum { - EMPTY_POINT("1", "空位"), - FULL_POINT("2", "有料"), - EMPTY_VEHICLE("3", "空载具"); + EMPTY_POINT("1", "空位/无货"), + FULL_POINT("3", "有料"), + EMPTY_VEHICLE("2", "空载具/有货"); private final String code; private final String label; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.java new file mode 100644 index 0000000..035a895 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.java @@ -0,0 +1,21 @@ +package org.nl.wms.sch.task_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 工单状态枚举 + * @Date: 2023/6/16 + */ +@Getter +@AllArgsConstructor +public enum WorkOrderStatusEnum { + UNPRODUCED("1", "未生产"), + ISSUED("2", "已下发"), + PRODUCING("3", "生产中"), + STOP("4", "暂停"), + COMPLETE("5", "完成"); + private final String code; + private final String name; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java index 124c3a2..f1c6384 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java @@ -1,51 +1,42 @@ package org.nl.wms.sch.task_manage.task; import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.task.tasks.hn.HNMLTask; -import org.nl.wms.sch.task_manage.task.tasks.hn.HNQKTask; -import org.nl.wms.sch.task_manage.task.tasks.yz.YZQLTask; -import org.nl.wms.sch.task_manage.task.tasks.yz.YZSKTask; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; +import java.util.HashMap; +import java.util.Map; + /** * @author ldjun - * @version 1.0 + * @version 2.0 * @date 2023年05月16日 16:42 - * @desc desc + * @desc 采用获取注解来标识任务类型,并通过扫描和反射的方式来获取任务实例 */ @Component public class TaskFactory { + private final Map taskMap; @Autowired - private HNMLTask hnmlTask; - - @Autowired - private YZQLTask yzqlTask; - - @Autowired - private HNQKTask hnqkTask; + public TaskFactory(ApplicationContext applicationContext) { + taskMap = new HashMap<>(); + initializeTasks(applicationContext); + } - @Autowired - private YZSKTask yzskTask; + private void initializeTasks(ApplicationContext applicationContext) { + Map taskBeans = applicationContext.getBeansWithAnnotation(TaskType.class); + for (Object taskBean : taskBeans.values()) { + TaskType taskTypeAnnotation = taskBean.getClass().getAnnotation(TaskType.class); + String taskType = taskTypeAnnotation.value(); + taskMap.put(taskType.toUpperCase(), (AbstractTask) taskBean); + } + } - //使用 getShape 方法获取形状类型的对象 public AbstractTask getTask(String taskType) { if (taskType == null) { return null; } - if (taskType.equalsIgnoreCase("HNMLTask")) { - return hnmlTask; - } - if (taskType.equalsIgnoreCase("YZQLTask")) { - return yzqlTask; - } - if (taskType.equalsIgnoreCase("HNQKTask")) { - return hnqkTask; - } - if (taskType.equalsIgnoreCase("YZSKTask")) { - return yzskTask; - } - return null; + return taskMap.get(taskType.toUpperCase()); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskType.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskType.java new file mode 100644 index 0000000..dd0e424 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskType.java @@ -0,0 +1,18 @@ +package org.nl.wms.sch.task_manage.task; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @Author: lyd + * @Description: 配置任务类型注解 + * @Date: 2023/6/21 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface TaskType { + String value(); +} + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java new file mode 100644 index 0000000..003c6c0 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java @@ -0,0 +1,155 @@ +package org.nl.wms.sch.task_manage.task.tasks.auto; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 入窑口叫料 + * @Date: 2023/6/19 + */ +@Component +@TaskType("RYKQLTask") +public class RYKQLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "RYKQLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Override + protected void create() throws BadRequestException { + + } + + @Override + @Transactional(rollbackFor = Exception.class) + protected void autoCreate() { +// // 自动创建任务 +// // 判断当前点位有没有任务执行 +// List unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(TASK_CONFIG_CODE); +// if (unFinishTasksByTaskConfig.size() > 0) { +// // 有任务在执行就不创建 +// return; +// } +// // 获取任务配置 +// SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() +// .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); +// // 创建任务 +// SchBaseTask task = new SchBaseTask(); // 任务实体 +// // 2、创建申请任务 +// task.setConfig_code(TASK_CONFIG_CODE); +// task.setCreate_mode("1"); +// task.setTask_status(TaskStatus.APPLY.getCode()); +// task.setWorkshop_code(taskConfig.getWorkshop_code()); // 车间编码 +// // 设置起/终点 +// this.setTaskPoint(taskConfig, task, "RYK"); +// // 找起点 +// List startRegionStr = Arrays +// .stream(taskConfig.getStart_region_str().split(",")) +// .collect(Collectors.toList()); +// SchBasePoint point = findStartPoint(startRegionStr); +// if (ObjectUtil.isEmpty(point)) { +// task.setRemark("未找到所需点位!"); +// taskService.create(task); +// // 消息通知 +// return; +// } +// // 设置终点并修改创建成功状态 +// task.setPoint_code1(point.getPoint_code()); +// task.setRemark(""); +// task.setTask_status(TaskStatus.CREATED.getCode()); +// taskService.create(task); +// point.setIng_task_code(task.getTask_code()); +// pointService.update(point); + //下发 +// this.renotifyAcs(task); + } + + private SchBasePoint findStartPoint(List startRegionStr) { + // 无需工单 + // 默认认为缓存线有东西 + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(SchBasePoint::getRegion_code, startRegionStr) + .eq(SchBasePoint::getPoint_type, '2') // 点位类型是缓存输送线出口 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + pointService.update(startPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + pointService.update(startPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java new file mode 100644 index 0000000..bf3c562 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java @@ -0,0 +1,142 @@ +package org.nl.wms.sch.task_manage.task.tasks.dtk; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.dtk.mapper.DTKMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 拆盘机呼叫空托 + * @Date: 2023/6/21 + */ +@Component +@TaskType("CTQKTask") +public class CTQKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "CTQKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private DTKMapper dtkMapper; + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); + // 找起点 + String extGroupData = task.getExt_group_data(); + JSONObject jsonObject = JSONObject.parseObject(extGroupData); + SchBasePoint point = findStartPoint(startRegionStr); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setRemark(""); + task.setVehicle_qty(point.getVehicle_qty()); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + /** + * 从区域中获取一推钢托盘 + * @param startRegionStr + * @return + */ + private SchBasePoint findStartPoint(List startRegionStr) { + List points = dtkMapper.findPointForCTQK(startRegionStr); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { +// 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + endPointObj.setVehicle_type("2"); + endPointObj.setVehicle_qty(taskObj.getVehicle_qty()); + endPointObj.setUpdate_time(DateUtil.now()); + pointService.updateById(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + pointService.update(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java new file mode 100644 index 0000000..79f7030 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java @@ -0,0 +1,134 @@ +package org.nl.wms.sch.task_manage.task.tasks.dtk; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.dtk.mapper.DTKMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 叠托送空盘任务:-> 拆盘机/货架 + * @Date: 2023/6/21 + */ +@Component +@TaskType("DTSKTask") +public class DTSKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "DTSKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private DTKMapper dtkMapper; + + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); + // 找终点 + SchBasePoint point = findNextPoint(nextRegionStr); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + private SchBasePoint findNextPoint(List nextRegionStr) { + List points = dtkMapper.findPointForDTSK(nextRegionStr); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) ? taskObj.getVehicle_type() : ""; + SchBasePoint endPointObj = pointService.getById(endPoint); + SchBasePoint startPointObj = pointService.getById(startPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 设置载具类型、点位状态、释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_type(vehicleType); + endPointObj.setVehicle_qty(endPointObj.getVehicle_qty() + taskObj.getVehicle_qty()); // 设置载具数量 + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + pointService.update(endPointObj); + // 起点清空 + PointUtils.clearPoint(startPointObj); + } + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("任务取消"); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.java new file mode 100644 index 0000000..9bccb0b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.java @@ -0,0 +1,15 @@ +package org.nl.wms.sch.task_manage.task.tasks.dtk.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 叠托库mapper + * @Date: 2023/6/21 + */ +public interface DTKMapper { + List findPointForDTSK(List regionCode); + List findPointForCTQK(List regionCode); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml new file mode 100644 index 0000000..d4bdd92 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml @@ -0,0 +1,45 @@ + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java new file mode 100644 index 0000000..54aac39 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java @@ -0,0 +1,188 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 分拣满空任务 - 4点 + * @Date: 2023/6/21 + */ +@Component +@TaskType("FJMKTask") +public class FJMKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "FJMKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private IPdmBdWorkorderService workorderService; + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); + String extGroupData = task.getExt_group_data();// 任务的其他数据 + JSONObject jsonObject = JSONObject.parseObject(extGroupData); + // 找终点 + SchBasePoint packagePoint = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(packagePoint)) { + task.setRemark("包装线不可用!"); + taskService.update(task); + // 消息通知 + continue; + } + SchBasePoint LaminatePoint = findStartPoint(startRegionStr, jsonObject); + if (ObjectUtil.isEmpty(LaminatePoint)) { + task.setRemark("覆膜区不可用!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(packagePoint.getPoint_code()); + task.setPoint_code3(LaminatePoint.getPoint_code()); + task.setPoint_code4(task.getPoint_code1()); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.update(task); + + packagePoint.setIng_task_code(task.getTask_code()); + pointService.update(packagePoint); + LaminatePoint.setIng_task_code(task.getTask_code()); + pointService.update(LaminatePoint); + + //下发 +// this.renotifyAcs(task); + } + } + + /** + * 从覆膜区找个空木托盘 + * @param startRegionStr + * @param extData + * @return + */ + private SchBasePoint findStartPoint(List startRegionStr, JSONObject extData) { + // 当前设备的工单 + String workorderCode = extData.getString("workorder_code"); + PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + : null; + if (one == null) { + throw new BadRequestException("工单不能为空!"); + } + String vehicleType = one.getVehicle_type(); + // todo: 向ACS请求所需木托盘在那个栈拆盘机? + // todo: 请求ACS释放一个木托盘 + // 这个点的父点位为起点 + SchBasePoint point = pointService.getById("FMADJW"); + return point; + } + + /** + * 从包装线找个位置放货 + * @param nextRegionStr + * @param extData + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject extData) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(SchBasePoint::getRegion_code, nextRegionStr) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .orderByAsc(SchBasePoint::getIn_order_seq) + .orderByAsc(SchBasePoint::getPoint_code); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + @Transactional + protected void updateStatus(String task_code, TaskStatus status) { + // todo: 任务完成需要组盘,包装线解锁,覆膜对接位清空,分拣拆垛对接位设置空盘 + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + String bzxPoint = taskObj.getPoint_code2(); // 获取终点1 + String fmPoint = taskObj.getPoint_code3(); // 获取起点2 + String fjcPoint = taskObj.getPoint_code4(); // 获取终点2 + SchBasePoint bzxPointObj = pointService.getById(bzxPoint); + SchBasePoint fmPointObj = pointService.getById(fmPoint); + SchBasePoint fjcPointObj = pointService.getById(fjcPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + PointUtils.clearPoint(bzxPointObj); + PointUtils.clearPoint(fmPointObj); + fjcPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + fjcPointObj.setVehicle_qty(1); + fjcPointObj.setVehicle_type(taskObj.getVehicle_type()); + pointService.update(fjcPointObj); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 释放点位 + fmPointObj.setIng_task_code(""); + bzxPointObj.setIng_task_code(""); + pointService.update(fmPointObj); + pointService.update(bzxPointObj); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("任务取消"); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java new file mode 100644 index 0000000..4e5452e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java @@ -0,0 +1,146 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 分拣呼叫空托盘任务 + * @Date: 2023/6/21 + */ +@Component +@TaskType("FJQKTask") +public class FJQKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "FJQKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private IPdmBdWorkorderService workorderService; + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); + // 找起点 + String extGroupDataStr = task.getExt_group_data(); + JSONObject extGroupData = JSONObject.parseObject(extGroupDataStr); + SchBasePoint point = findStartPoint(startRegionStr, extGroupData); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置起点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setVehicle_code(point.getVehicle_code()); + task.setGroup_id(point.getGroup_id()); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { + // 当前设备的工单 + String workorderCode = extGroupData.getString("workorder_code"); + PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + : null; + if (one == null) { + throw new BadRequestException("工单不能为空!"); + } + String vehicleType = one.getVehicle_type(); + // todo: 向ACS请求所需木托盘在那个栈拆盘机? + // todo: 请求ACS释放一个木托盘 + // 这个点的父点位为起点 + SchBasePoint point = pointService.getById("FMADJW"); + return point; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 载具编码:前面需要根据任务判断,没有载具不能生成任务 + String vehicle_code = taskObj.getVehicle_code(); + String startPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + pointService.update(startPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java new file mode 100644 index 0000000..57de35a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java @@ -0,0 +1,161 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.fj.mapper.FJMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 分拣缺料任务 + * @Date: 2023/6/20 + */ +@Component +@TaskType("FJQLTask") +public class FJQLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "FJQLTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private FJMapper fjMapper; + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); + // 找起点 + String extGroupDataStr = task.getExt_group_data(); + JSONObject extGroupData = JSONObject.parseObject(extGroupDataStr); + extGroupData.put("vehicle_type", task.getVehicle_type()); + SchBasePoint point = findStartPoint(startRegionStr, extGroupData); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置起点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setVehicle_code(point.getVehicle_code()); + task.setGroup_id(point.getGroup_id()); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + /** + * 找起点:到钢托盘缓存找一个物料与分拣工单的物料相同的物料 + * @param startRegionStr + * @param extGroupData + * @return + */ + private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { + // 获取当前工单 + String workorderCode = extGroupData.getString("workorder_code"); + PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + : null; + Assert.notNull(workOrder, "工单不能为空!"); + List points = fjMapper.findPointForFJQL(startRegionStr, workOrder.getMaterial_id()); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 载具编码:前面需要根据任务判断,没有载具不能生成任务 + String vehicle_code = taskObj.getVehicle_code(); + String startPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 除了解锁需要将组盘表中的物料绑定载具设置为已解绑 + // 起点设置空位 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); // 执行失败 + SchBaseVehiclematerialgroup vehiclematerialgroup = + vehiclematerialgroupService.getById(taskObj.getGroup_id()); + vehiclematerialgroup.setGroup_bind_material_status("3"); + vehiclematerialgroup.setUpdate_time(DateUtil.now()); + vehiclematerialgroupService.updateById(vehiclematerialgroup); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + pointService.update(startPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java new file mode 100644 index 0000000..90b515f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java @@ -0,0 +1,140 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 分拣入库任务 - 2点 + * @Date: 2023/6/21 + */ +@Component +@TaskType("FJRKTask") +public class FJRKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "FJRKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Override + protected void create() throws BadRequestException { + // 最后一坨不需要呼叫空盘 + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); + // 找终点 + SchBasePoint point = findNextPoint(nextRegionStr); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + /** + * 到对应的区域中获取放置点 + * @param nextRegionStr + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(SchBasePoint::getRegion_code, nextRegionStr) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // todo: 组盘 + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) ? taskObj.getVehicle_type() : ""; + // 获取外部参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 设置载具类型、点位状态、释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + } + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("任务取消"); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java new file mode 100644 index 0000000..d6df606 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java @@ -0,0 +1,141 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.fj.mapper.FJMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 分拣送空托 -> 叠托位 + * @Date: 2023/6/20 + */ +@Component +@TaskType("FJSKTask") +public class FJSKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "FJSKTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private FJMapper fjMapper; + + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); + // 找终点 + SchBasePoint point = findNextPoint(nextRegionStr); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + /** + * 找叠托位,无锁的位置即可 + * @param nextRegionStr + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr) { + List points = fjMapper.findPointForFJSK(nextRegionStr); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) ? taskObj.getVehicle_type() : ""; + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 设置载具类型、点位状态、释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_type(vehicleType); + endPointObj.setVehicle_qty(endPointObj.getVehicle_qty() + 1); // 设置载具数量 + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + pointService.update(endPointObj); + } + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("任务取消"); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java new file mode 100644 index 0000000..5bd2bdc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java @@ -0,0 +1,15 @@ +package org.nl.wms.sch.task_manage.task.tasks.fj.mapper; + +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 分拣 + * @Date: 2023/6/20 + */ +public interface FJMapper { + List findPointForFJQL(List regionCode, String materialId); + List findPointForFJSK(List regionCode); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml new file mode 100644 index 0000000..da2862d --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java index 42081b5..cb7d1f7 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java @@ -20,7 +20,9 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.enums.*; +import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.hn.mapper.HNMapper; import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -31,17 +33,17 @@ import java.util.List; import java.util.stream.Collectors; /** - * @author ldjun 混碾满料任务 + * @author ldjun * @version 1.0 * @date 2023年05月16日 16:44 - * @desc desc + * @desc 混碾满料任务: 混碾机 -> 困料输送线 */ @Component -@Data +@TaskType("HNMLTask") public class HNMLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "HNMLTask"; - + /**压制区域*/ + private static String REGION_CODE = "YZ"; @Autowired private ISchBasePointService pointService; @Autowired @@ -52,10 +54,12 @@ public class HNMLTask extends AbstractTask { private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired private IPdmBdWorkorderService workorderService; - @Autowired private ISysNoticeService noticeService; - + @Autowired + private HNMapper hnMapper; + @Autowired + private TaskUtils taskUtils; @Override protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 @@ -69,7 +73,7 @@ public class HNMLTask extends AbstractTask { if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - TaskUtils.setUpdateByAcs(taskObj); + taskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } else if (status.equals(TaskStatus.FINISHED)) { // 完成 this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); @@ -90,7 +94,7 @@ public class HNMLTask extends AbstractTask { .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - String extGroupData = task.getExt_group_data(); + String extGroupData = task.getExt_group_data();// 任务的其他数据 JSONObject jsonObject = JSONObject.parseObject(extGroupData); // 找终点 SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); @@ -115,23 +119,25 @@ public class HNMLTask extends AbstractTask { } + /** + * 根据压机的工单找到对应的压机,在找到对应压机的放货点 + * @param nextRegionStr + * @param extData + * @return + */ private SchBasePoint findNextPoint(List nextRegionStr, JSONObject extData) { + // 当前设备的工单 String workorderCode = extData.getString("workorder_code"); PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper().eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) : null; - LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); - lam.in(SchBasePoint::getRegion_code, nextRegionStr) - .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) - .like(ObjectUtil.isNotEmpty(one), SchBasePoint::getCan_vehicle_type, one.getVehicle_type()) - .eq(SchBasePoint::getIs_used, true) - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 - .or() - .eq(SchBasePoint::getIng_task_code, "")) - .orderByAsc(SchBasePoint::getIn_order_seq) - .orderByAsc(SchBasePoint::getPoint_code); - List schBasePoints = pointService.list(lam); - return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + if (one == null) { + throw new BadRequestException("混碾机的工单不能为空!"); + } + // 根据工单物料标识寻找点位 + List points = hnMapper.findPointForHNML(nextRegionStr, one.getMaterial_id()); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; } @Override @@ -174,12 +180,6 @@ public class HNMLTask extends AbstractTask { groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) ? workorderCode.getStanding_time() : 0); - groupEntity.setIs_full(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBoolean("is_full") - : true); - groupEntity.setMaterial_qty(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getInteger("material_qty") - : 0); groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) ? extGroupData.getBigDecimal("material_weight") : BigDecimal.valueOf(0)); @@ -210,7 +210,7 @@ public class HNMLTask extends AbstractTask { taskObj.setRemark("任务完成"); taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } @@ -227,7 +227,7 @@ public class HNMLTask extends AbstractTask { taskObj.setRemark("任务取消"); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); - TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java index 82511d2..0ca0855 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.task_manage.task.tasks.hn; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -14,10 +15,13 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; import org.nl.wms.util.PointUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; @@ -29,8 +33,10 @@ import java.util.stream.Collectors; * @Date: 2023/5/19 */ @Component +@TaskType("HNQKTask") public class HNQKTask extends AbstractTask { private static String TASK_CONFIG_CODE = "HNQKTask"; + private static String EMPTY_ZHONG = "1"; @Autowired private ISchBasePointService pointService; @@ -45,11 +51,13 @@ public class HNQKTask extends AbstractTask { * 具体业务 */ @Override + @Transactional(rollbackFor = Exception.class) protected void create() { // 获取任务 List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE); + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); // 找起点 @@ -64,6 +72,7 @@ public class HNQKTask extends AbstractTask { } // 设置终点并修改创建成功状态 task.setPoint_code1(point.getPoint_code()); + task.setRemark(""); task.setTask_status(TaskStatus.CREATED.getCode()); taskService.update(task); @@ -76,25 +85,17 @@ public class HNQKTask extends AbstractTask { } /** - * 找起点 + * 找起点, 通过料盅睏料线区域的空盅位置找到空盅 * * @param startRegionStr * @param extGroupData * @return */ private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - String vehicleType = ObjectUtil.isNotEmpty(workOrder) && ObjectUtil.isNotEmpty(workOrder.getVehicle_type()) - ? workOrder.getVehicle_type() - : null; LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); lam.in(SchBasePoint::getRegion_code, startRegionStr) .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) - .eq(ObjectUtil.isNotEmpty(vehicleType), SchBasePoint::getVehicle_type, vehicleType) + .eq(SchBasePoint::getPoint_type, EMPTY_ZHONG) .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 .or() .eq(SchBasePoint::getIng_task_code, "")) @@ -105,6 +106,7 @@ public class HNQKTask extends AbstractTask { } @Override + @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 SchBaseTask taskObj = taskService.getById(task_code); @@ -116,11 +118,9 @@ public class HNQKTask extends AbstractTask { } // 获取参数 String startPoint = taskObj.getPoint_code1(); // 获取起点 - // 获取外部参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; + String endPoint = taskObj.getPoint_code2(); // 获取起点 SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); // 根据传来的类型去对任务进行操作 if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); @@ -130,6 +130,13 @@ public class HNQKTask extends AbstractTask { // 起点清空 if (ObjectUtil.isNotEmpty(startPointObj)) { PointUtils.clearPoint(startPointObj); + taskObj.setVehicle_code(startPointObj.getVehicle_code()); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + endPointObj.setVehicle_type("1"); + endPointObj.setVehicle_code(startPointObj.getVehicle_code()); + endPointObj.setVehicle_qty(1); + endPointObj.setUpdate_time(DateUtil.now()); + pointService.updateById(endPointObj); } // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java new file mode 100644 index 0000000..28213e6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.sch.task_manage.task.tasks.hn.mapper; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 混碾的mapper + * @Date: 2023/6/19 + */ +public interface HNMapper extends BaseMapper { + List findPointForHNML(List regionCode, String materialId); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml new file mode 100644 index 0000000..76c467f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java new file mode 100644 index 0000000..d2dd9f6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java @@ -0,0 +1,148 @@ +package org.nl.wms.sch.task_manage.task.tasks.yao; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 出窑暂存 + * @Date: 2023/6/20 + */ +@Slf4j +@Component +@TaskType("CYZCTask") +public class CYZCTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "CYZCTask"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Override + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); + // 找终点 + String extGroupData = task.getExt_group_data(); + JSONObject jsonObject = JSONObject.parseObject(extGroupData); + SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置终点并修改创建成功状态 + task.setVehicle_type("2"); // 钢托盘 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + + } + + /** + * 找终点:到钢托盘缓存区中获取一个空位 + * @param nextRegionStr + * @param extData + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject extData) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(SchBasePoint::getRegion_code, nextRegionStr) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 载具编码:前面需要根据任务判断,没有载具不能生成任务 + String vehicle_code = taskObj.getVehicle_code(); + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_code(vehicle_code); + endPointObj.setVehicle_qty(1); + endPointObj.setVehicle_type("2"); + endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode()); + pointService.update(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java new file mode 100644 index 0000000..043743f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java @@ -0,0 +1,152 @@ +package org.nl.wms.sch.task_manage.task.tasks.yz; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 压制呼叫空盘 + * @Date: 2023/6/16 + */ +@Slf4j +@Component +@TaskType("YZQKTask") +public class YZQKTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "YZQKTask"; + private static String EMPTY_ZHONG = "1"; + /**碟盘机出口**/ + private static String DISCONNECTING_EXIT = "2"; + + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Override + @Transactional(rollbackFor = Exception.class) + protected void create() { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); + // 找起点 + String extGroupData = task.getExt_group_data(); + JSONObject jsonObject = JSONObject.parseObject(extGroupData); + SchBasePoint point = findStartPoint(startRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code1(point.getPoint_code()); + task.setRemark(""); + task.setTask_status(TaskStatus.CREATED.getCode()); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + /** + * 业务过程:到指定的区域获取空托盘 + * @param startRegionStr + * @param extGroupData + * @return + */ + private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.in(SchBasePoint::getRegion_code, startRegionStr) + .eq(SchBasePoint::getPoint_type, DISCONNECTING_EXIT) // 点位类型是拆盘机出口 + .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 + .or() + .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true); + List schBasePoints = pointService.list(lam); + return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取起点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + endPointObj.setVehicle_type("2"); + endPointObj.setVehicle_qty(1); + pointService.update(endPointObj); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 起点解锁 + if (ObjectUtil.isNotEmpty(startPointObj)) { + startPointObj.setIng_task_code(""); + pointService.update(startPointObj); + } + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java index f153640..1a30038 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java @@ -19,7 +19,9 @@ import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper; import org.nl.wms.util.PointUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -35,6 +37,7 @@ import java.util.stream.Collectors; */ @Slf4j @Component +@TaskType("YZQLTask") public class YZQLTask extends AbstractTask { private static String TASK_CONFIG_CODE = "YZQLTask"; @@ -48,13 +51,16 @@ public class YZQLTask extends AbstractTask { private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired private IPdmBdWorkorderService workorderService; + @Autowired + private YZMapper yzMapper; @Override protected void create() throws BadRequestException { // 获取任务 List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE); + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); // 找起点 @@ -83,7 +89,7 @@ public class YZQLTask extends AbstractTask { } /** - * 找起点业务:根据起点区域寻找所需点位, 必须要工单 + * 找起点业务:混碾机工单的物料标识相同的位置 * * @param startRegionStr : 区域列表 * @param extGroupData : 外部参数,包含条件所需的信息 @@ -91,33 +97,16 @@ public class YZQLTask extends AbstractTask { * @description : JSONObject获取不到就是null */ private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { + // 获取当前工单 todo: 半托优先 String workorderCode = extGroupData.getString("workorder_code"); PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper().eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) : null; Assert.notNull(workOrder, "工单不能为空!"); - String vehicleType = workOrder.getVehicle_type(); - String materialId = workOrder.getMaterial_id(); - int standingTime = workOrder.getStanding_time(); // 静置时间 - Assert.notNull(materialId, "物料不能为空!"); - Assert.notNull(vehicleType, "载具类型不能为空!"); - Assert.notNull(standingTime, "静置时间不能为空!"); - // 找到所需要物料的载具编号 - List list = vehiclematerialgroupService.list(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getMaterial_id, materialId) - .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()) - .apply("DATE_ADD(instorage_time, INTERVAL " + standingTime + " MINUTE) <= NOW()") - .orderByAsc(SchBaseVehiclematerialgroup::getPoint_code)); - // 获取第一个 - SchBaseVehiclematerialgroup vehiclematerialgroup = ObjectUtil.isNotEmpty(list) ? list.get(0) : null; - if (ObjectUtil.isEmpty(vehiclematerialgroup)) return null; - SchBasePoint one = pointService.getOne(new LambdaQueryWrapper() - .in(SchBasePoint::getRegion_code, startRegionStr) - .eq(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()) - .eq(SchBasePoint::getVehicle_code, vehiclematerialgroup.getVehicle_code()) - .eq(SchBasePoint::getVehicle_type, vehicleType)); - return one; + // 查找混碾机工单的物料相同的位置 + List points = yzMapper.findPointForYZQL(startRegionStr, workOrder.getMaterial_id()); + return ObjectUtil.isNotEmpty(points) ? points.get(0) : null; } @@ -154,6 +143,7 @@ public class YZQLTask extends AbstractTask { // 释放点位,将点位设置为空位,清空数据 if (ObjectUtil.isNotEmpty(startPointObj)) { PointUtils.clearPoint(startPointObj); + // todo: 终点暂时无设置 } // 任务修改成完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java index f34fcb4..cb16a64 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java @@ -15,6 +15,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -25,10 +26,11 @@ import java.util.stream.Collectors; /** * @Author: lyd - * @Description: 压制送空载具任务 + * @Description: 压制送空载具任务 x * @Date: 2023/5/25 */ @Component +@TaskType("YZSKTask") public class YZSKTask extends AbstractTask { private static String TASK_CONFIG_CODE = "YZSKTask"; @@ -48,7 +50,8 @@ public class YZSKTask extends AbstractTask { // 获取任务 List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE); + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); // 找终点 diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java new file mode 100644 index 0000000..e7fe2c6 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java @@ -0,0 +1,235 @@ +package org.nl.wms.sch.task_manage.task.tasks.yz; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.MapOf; +import org.nl.wms.pdm.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.service.dao.PdmBdWorkorder; +import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; +import org.nl.wms.sch.task_manage.enums.GroupStatusEnum; +import org.nl.wms.sch.task_manage.task.TaskType; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper; +import org.nl.wms.util.PointUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Author: lyd + * @Description: 压制送料 + * @Date: 2023/6/19 + */ +@Slf4j +@Component +@TaskType("YZSLTask") +public class YZSLTask extends AbstractTask { + private static String TASK_CONFIG_CODE = "YZSLTask"; + /** + * 入口 + */ + private static String ENTRANCE = "1"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBaseTaskconfigService taskConfigService; + @Autowired + private IPdmBdWorkorderService workorderService; + @Autowired + private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + private YZMapper yzMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + protected void create() throws BadRequestException { + // 获取任务 + List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); + // 配置信息 + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); + for (SchBaseTask task : tasks) { + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); + // 找终点 + String extGroupData = task.getExt_group_data(); + JSONObject jsonObject = JSONObject.parseObject(extGroupData); + SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + if (ObjectUtil.isEmpty(point)) { + task.setRemark("未找到所需点位!"); + taskService.update(task); + // 消息通知 + continue; + } + // 设置终点并修改创建成功状态 + task.setPoint_code2(point.getPoint_code()); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setRemark(""); + taskService.update(task); + + point.setIng_task_code(task.getTask_code()); + pointService.update(point); + + //下发 +// this.renotifyAcs(task); + } + } + + /** + * 判断是否加急:是->入窑口,否->双层缓存线 + * + * @param nextRegionStr + * @param extGroupData + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject extGroupData) { + // 需要获取nextRegionStr + if (nextRegionStr.size() < 2) { + throw new BadRequestException("压制送料任务的配置文件有错!"); + } + String regionCode = nextRegionStr.get(0); + // 当前设备的工单 + String workorderCode = extGroupData.getString("workorder_code"); + PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + : null; + if (one == null) { + throw new BadRequestException("压制机的工单不能为空!"); + } + // 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线 + if (one.getIs_urgent()) { + regionCode = nextRegionStr.get(1); // 去窑区 + } + List pointForYZSL = yzMapper.findPointForYZSL(new JSONObject( + MapOf.of("regionCode", regionCode, "pointType", ENTRANCE))); + return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null; + // ?? +// LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); +// lam.eq(SchBasePoint::getRegion_code, regionCode) +// .eq(SchBasePoint::getPoint_type, ENTRANCE) +// .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 +// .or() +// .eq(SchBasePoint::getIng_task_code, "")) +// .eq(SchBasePoint::getIs_used, true); +// List schBasePoints = pointService.list(lam); +// return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + } + + @Override + @Transactional(rollbackFor = Exception.class) + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getById(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 获取参数 + JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) + ? JSONObject.parseObject(taskObj.getExt_group_data()) + : null; + // 载具编码:没有就创建一个 + String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) + ? taskObj.getVehicle_code() + : IdUtil.getSnowflake(1, 1).nextIdStr(); + PdmBdWorkorder workorderCode = ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) + : null; + String startPoint = taskObj.getPoint_code1(); // 获取起点 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint startPointObj = pointService.getById(startPoint); + SchBasePoint endPointObj = pointService.getById(endPoint); + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { // 执行中 + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + } + if (status.equals(TaskStatus.FINISHED)) { // 完成 + // 起点清空 + if (ObjectUtil.isNotEmpty(startPointObj)) { + PointUtils.clearPoint(startPointObj); + } + // 终点解锁 + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + // 要把数据存到组盘表 -> 改造公共方法,返回id + SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); + groupEntity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr()); + groupEntity.setCreate_id("2"); + groupEntity.setCreate_name("ACS"); + groupEntity.setCreate_time(DateUtil.now()); + groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) + ? workorderCode.getMaterial_id() + : ""); + groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) + ? workorderCode.getStanding_time() + : 0); + groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) + ? extGroupData.getBigDecimal("material_qty") + : BigDecimal.valueOf(0)); + groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) + ? workorderCode.getWorkorder_code() + : ""); + groupEntity.setVehicle_code(vehicle_code); + groupEntity.setVehicle_type(taskObj.getVehicle_type()); + groupEntity.setPoint_code(startPoint); + groupEntity.setPoint_name(startPointObj.getPoint_name()); + groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); + groupEntity.setInstorage_time(DateUtil.now()); + groupEntity.setTask_code(taskObj.getTask_code()); + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 + groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 + groupEntity.setIs_delete(false); + vehiclematerialgroupService.save(groupEntity); + + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setGroup_id(groupEntity.getGroup_id()); + taskObj.setRemark("任务完成"); + } + if (status.equals(TaskStatus.CANCELED)) { // 取消 + // 终点解锁 + if (ObjectUtil.isNotEmpty(endPointObj)) { + endPointObj.setIng_task_code(""); + pointService.update(endPointObj); + } + taskObj.setRemark("任务取消"); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + } + taskService.update(taskObj); + } + + @Override + public void forceFinish(String task_code) { + this.updateStatus(task_code, TaskStatus.FINISHED); + } + + @Override + public void cancel(String task_code) { + this.updateStatus(task_code, TaskStatus.CANCELED); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/backup.txt b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/backup.txt new file mode 100644 index 0000000..a6de0aa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/backup.txt @@ -0,0 +1,32 @@ +private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { + // 获取当前工单 + String workorderCode = extGroupData.getString("workorder_code"); + PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode) + ? workorderService.getOne(new LambdaQueryWrapper() + .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) + : null; + Assert.notNull(workOrder, "工单不能为空!"); + String vehicleType = workOrder.getVehicle_type(); + String materialId = workOrder.getMaterial_id(); + int standingTime = workOrder.getStanding_time(); // 静置时间 + Assert.notNull(materialId, "物料不能为空!"); + Assert.notNull(vehicleType, "载具类型不能为空!"); + Assert.notNull(standingTime, "静置时间不能为空!"); + // 找到所需要物料的载具编号 + List list = vehiclematerialgroupService.list( + new LambdaQueryWrapper() + .eq(SchBaseVehiclematerialgroup::getMaterial_id, materialId) + .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType) + .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()) + .apply("DATE_ADD(instorage_time, INTERVAL " + standingTime + " MINUTE) <= NOW()") + .orderByAsc(SchBaseVehiclematerialgroup::getPoint_code)); + // 获取第一个 + SchBaseVehiclematerialgroup vehiclematerialgroup = ObjectUtil.isNotEmpty(list) ? list.get(0) : null; + if (ObjectUtil.isEmpty(vehiclematerialgroup)) return null; + SchBasePoint one = pointService.getOne(new LambdaQueryWrapper() + .in(SchBasePoint::getRegion_code, startRegionStr) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()) + .eq(SchBasePoint::getVehicle_code, vehiclematerialgroup.getVehicle_code()) + .eq(SchBasePoint::getVehicle_type, vehicleType)); + return one; + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.java new file mode 100644 index 0000000..bceaf90 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.sch.task_manage.task.tasks.yz.mapper; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.sch.point.service.dao.SchBasePoint; + +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/6/19 + */ +public interface YZMapper { + List findPointForYZQL(List regionCode, String materialId); + List findPointForYZSL(JSONObject param); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.xml new file mode 100644 index 0000000..ad0f369 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.xml @@ -0,0 +1,34 @@ + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java index b8f99a0..2fd4b78 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java @@ -1,34 +1,63 @@ package org.nl.wms.util; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.utils.SecurityUtils; +import org.nl.config.SpringContextHolder; +import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.impl.SchBaseTaskServiceImpl; import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.function.Consumer; /** * @Author: lyd * @Description: 任务修改抽取的公用方法 * @Date: 2023/6/13 */ +@Component public class TaskUtils { + @Autowired + private ISchBaseTaskService taskService; - public static void setUpdateByAcs(SchBaseTask taskObj) { + public void setUpdateByAcs(SchBaseTask taskObj) { taskObj.setUpdate_id("2"); taskObj.setUpdate_name("ACS系统"); taskObj.setUpdate_time(DateUtil.now()); } - public static void setUpdateByPC(SchBaseTask taskObj) { + public void setUpdateByPC(SchBaseTask taskObj) { taskObj.setUpdate_id(SecurityUtils.getCurrentUserId()); taskObj.setUpdate_name(SecurityUtils.getCurrentNickName()); taskObj.setUpdate_time(DateUtil.now()); } // 根据类型去判断谁修改的 - public static void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + public void setUpdateByType(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { if (taskFinishedType.equals(TaskFinishedTypeEnum.AUTO_ACS)) { setUpdateByAcs(taskObj); } else { setUpdateByPC(taskObj); } } + + /** 校验是否有起点终点的任务 */ + public Boolean hasTaskAll(String pointCode) { + final String code = pointCode; + List list = taskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, false) + .and(la -> la.eq(SchBaseTask::getPoint_code1, code) + .or() + .eq(SchBaseTask::getPoint_code2, code) + .or() + .eq(SchBaseTask::getPoint_code3, code) + .or() + .eq(SchBaseTask::getPoint_code4, code))); + return list.size() > 0; + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.java similarity index 89% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.java index 3897ab0..a49a721 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.java @@ -1,4 +1,4 @@ -package org.nl.wms.sch.task_manage.task.tasks.mapper; +package org.nl.wms.util.test.mapper; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -37,4 +37,6 @@ public interface TestMapper extends BaseMapper { JSONArray getAll11(JSONObject map); JSONArray getAll12(List list); + + void updateByObject(JSONObject object); } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.xml similarity index 92% rename from lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml rename to lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.xml index dc5b28d..caac9be 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.xml @@ -1,6 +1,6 @@ - + @@ -11,6 +11,11 @@ + + UPDATE sch_base_point + SET point_name = #{point_name} + WHERE point_code = #{point_code} +