Browse Source

add: lms初版

master
李永德 2 years ago
parent
commit
88ebea44a4
  1. 44
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/AcsToWmsController.java
  2. 3
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/service/dao/PdmBdWorkorder.java
  3. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/SchBasePoint.java
  4. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java
  5. 10
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/controller/SchBaseTaskController.java
  6. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dao/SchBaseTask.java
  7. 5
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/dto/SchBaseTaskDto.java
  8. 13
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java
  9. 26
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java
  10. 6
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/PointStatusEnum.java
  11. 21
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/enums/WorkOrderStatusEnum.java
  12. 49
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskFactory.java
  13. 18
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/TaskType.java
  14. 155
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/auto/RYKQLTask.java
  15. 142
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/CTQKTask.java
  16. 134
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/DTSKTask.java
  17. 15
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.java
  18. 45
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml
  19. 188
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJMKTask.java
  20. 146
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQKTask.java
  21. 161
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJQLTask.java
  22. 140
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJRKTask.java
  23. 141
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/FJSKTask.java
  24. 15
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.java
  25. 32
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml
  26. 60
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java
  27. 37
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNQKTask.java
  28. 16
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java
  29. 19
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml
  30. 148
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yao/CYZCTask.java
  31. 152
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQKTask.java
  32. 40
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java
  33. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java
  34. 235
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSLTask.java
  35. 32
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/backup.txt
  36. 16
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.java
  37. 34
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.xml
  38. 35
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java
  39. 4
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.java
  40. 7
      lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.xml
  41. 6
      lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml
  42. 14
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java
  43. 156
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java
  44. 19
      lms/nladmin-system/nlsso-server/src/test/java/org/nl/task/MapperTest.java
  45. 14
      lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue
  46. 4
      lms/nladmin-ui/src/views/wms/sch/group/index.vue
  47. 5
      lms/nladmin-ui/src/views/wms/sch/point/PointDialog.vue
  48. 11
      lms/nladmin-ui/src/views/wms/sch/point/index.vue
  49. 2
      lms/nladmin-ui/src/views/wms/sch/region/index.vue
  50. 30
      lms/nladmin-ui/src/views/wms/sch/task/index.vue

44
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<Object> apply(@RequestBody Map param) {
schBaseTaskService.apply(JSONObject.parseObject(JSON.toJSONString(param)));
return new ResponseEntity<>(HttpStatus.CREATED);
}
}

3
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;

4
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;
}

7
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<SchBasePointMapper, Sch
.eq(SchBasePoint::getIng_task_code, ""))
.and(lock_type, slam -> 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<SchBasePoint> 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());

10
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<Object> apply(@RequestBody Map param){
schBaseTaskService.apply(JSONObject.parseObject(JSON.toJSONString(param)));
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping("/operation")
@Log("任务操作")
@ApiOperation("任务操作")

5
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;

5
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;

13
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<SchBaseTaskMapper, SchBa
LambdaQueryWrapper<SchBaseTask> 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<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(lam);
return schBaseTasks;
}
@ -169,6 +169,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
public void apply(JSONObject param) {
/**
* 参数设备编号(确定的点), 任务类型, 载具编码
* hint: 根据任务类型来判断校验
*/
String device_code = ObjectUtil.isNotEmpty(param.getString("device_code")) ? param.getString("device_code") : null;
String type = ObjectUtil.isNotEmpty(param.getString("type")) ? param.getString("type") : null;
@ -189,7 +190,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
//...
//4、叫空载具
//...
AbstractTask task = taskFactory.getTask(configCode); //"HNMLTask"
AbstractTask task = taskFactory.getTask(configCode);
// 执行创建任务
task.apply(param);
}
@ -211,13 +212,17 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
public void operation(Map<String, Object> 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);

26
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<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, config_code));
Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!");
// 最大任务数
Integer tcmn = taskConfig.getTask_create_max_num();
List<SchBaseTask> unFinishTasksByTaskConfig = taskService
.findUnFinishTasksByTaskConfig(taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction());
// 获取执行中的任务
List<SchBaseTask> 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<SchBasePoint>().eq(SchBasePoint::getPoint_code, apply_point_code));
SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, apply_point_code));
// 判断是否校验工单
if (taskConfig.getIs_check_workorder()) {
// 校验工单
// 根据对接位的父点位编码(设备)找到工单设备
SchBasePoint one = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, pointObj.getParent_point_code()));
// 查找当前设备、生产中
// 查找当前设备、生产中
PdmBdWorkorder workorder = workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.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));

6
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;

21
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;
}

49
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<String, AbstractTask> 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<String, Object> 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());
}
}

18
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();
}

155
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<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(TASK_CONFIG_CODE);
// if (unFinishTasksByTaskConfig.size() > 0) {
// // 有任务在执行就不创建
// return;
// }
// // 获取任务配置
// SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
// .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<String> 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<String> startRegionStr) {
// 无需工单
// 默认认为缓存线有东西
LambdaQueryWrapper<SchBasePoint> 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<SchBasePoint> 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);
}
}

142
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> startRegionStr) {
List<SchBasePoint> 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);
}
}

134
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> nextRegionStr) {
List<SchBasePoint> 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);
}
}

15
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<SchBasePoint> findPointForDTSK(List<String> regionCode);
List<SchBasePoint> findPointForCTQK(List<String> regionCode);
}

45
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/dtk/mapper/DTKMapper.xml

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.sch.task_manage.task.tasks.dtk.mapper.DTKMapper">
<select id="findPointForDTSK" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
FROM
`sch_base_point` p
WHERE (p.point_type = '1' OR p.point_type IS NULL OR p.point_type = '')
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.point_status = '1'
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
ORDER BY
<foreach collection="regionCode" item="region" index="index" separator=",">
CASE
<foreach collection="regionCode" item="innerRegion" index="innerIndex" separator=" ">
WHEN p.region_code = #{innerRegion} THEN #{innerIndex}
</foreach>
END
</foreach>
</select>
<select id="findPointForCTQK" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT p.*
FROM `sch_base_point` p
WHERE (p.point_type = '3' OR p.point_type IS NULL OR p.point_type = '')
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.point_status = '2'
AND p.is_used = 1
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
ORDER BY
<foreach collection="regionCode" item="region" index="index" separator=",">
CASE
<foreach collection="regionCode" item="innerRegion" index="innerIndex" separator=" ">
WHEN p.region_code = #{innerRegion} THEN #{innerIndex}
</foreach>
END
</foreach>
</select>
</mapper>

188
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
List<String> 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<String> startRegionStr, JSONObject extData) {
// 当前设备的工单
String workorderCode = extData.getString("workorder_code");
PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.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<String> nextRegionStr, JSONObject extData) {
LambdaQueryWrapper<SchBasePoint> 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<SchBasePoint> 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);
}
}

146
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> startRegionStr, JSONObject extGroupData) {
// 当前设备的工单
String workorderCode = extGroupData.getString("workorder_code");
PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.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);
}
}

161
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> startRegionStr, JSONObject extGroupData) {
// 获取当前工单
String workorderCode = extGroupData.getString("workorder_code");
PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
: null;
Assert.notNull(workOrder, "工单不能为空!");
List<SchBasePoint> 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);
}
}

140
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> nextRegionStr) {
LambdaQueryWrapper<SchBasePoint> 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<SchBasePoint> 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);
}
}

141
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> nextRegionStr) {
List<SchBasePoint> 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);
}
}

15
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<SchBasePoint> findPointForFJQL(List<String> regionCode, String materialId);
List<SchBasePoint> findPointForFJSK(List<String> regionCode);
}

32
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/fj/mapper/FJMapper.xml

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.sch.task_manage.task.tasks.fj.mapper.FJMapper">
<select id="findPointForFJQL" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*,
vg.group_id
FROM
`sch_base_point` p
LEFT JOIN sch_base_vehiclematerialgroup vg ON p.vehicle_code = vg.vehicle_code AND p.vehicle_type = vg.vehicle_type AND vg.group_bind_material_status = '2'
WHERE (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.is_used = 1
AND p.point_status = '3'
AND vg.material_id = #{materialId}
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</select>
<select id="findPointForFJSK" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
FROM
`sch_base_point` p
WHERE (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.point_type = '3'
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</select>
</mapper>

60
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<String> 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<String> nextRegionStr, JSONObject extData) {
// 当前设备的工单
String workorderCode = extData.getString("workorder_code");
PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>().eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
: null;
LambdaQueryWrapper<SchBasePoint> 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<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
if (one == null) {
throw new BadRequestException("混碾机的工单不能为空!");
}
// 根据工单物料标识寻找点位
List<SchBasePoint> 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);
}
}

37
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE);
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> startRegionStr, JSONObject extGroupData) {
String workorderCode = extGroupData.getString("workorder_code");
PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
: null;
String vehicleType = ObjectUtil.isNotEmpty(workOrder) && ObjectUtil.isNotEmpty(workOrder.getVehicle_type())
? workOrder.getVehicle_type()
: null;
LambdaQueryWrapper<SchBasePoint> 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());

16
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<JSONObject> {
List<SchBasePoint> findPointForHNML(List<String> regionCode, String materialId);
}

19
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.sch.task_manage.task.tasks.hn.mapper.HNMapper">
<select id="findPointForHNML" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT p.*
FROM `sch_base_point` p
LEFT JOIN pdm_bd_workorder w ON w.material_id = #{materialId} AND w.workorder_status = '3' AND w.region_code =
'YZ'
WHERE p.point_type = '5'
AND p.point_status = '1'
AND p.is_used = 1
AND p.parent_point_code LIKE CONCAT('%', w.point_code, '%')
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</select>
</mapper>

148
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> nextRegionStr, JSONObject extData) {
LambdaQueryWrapper<SchBasePoint> 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<SchBasePoint> 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);
}
}

152
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> startRegionStr, JSONObject extGroupData) {
LambdaQueryWrapper<SchBasePoint> 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<SchBasePoint> 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);
}
}

40
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE);
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> startRegionStr, JSONObject extGroupData) {
// 获取当前工单 todo: 半托优先
String workorderCode = extGroupData.getString("workorder_code");
PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>().eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.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<SchBaseVehiclematerialgroup> list = vehiclematerialgroupService.list(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
.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<SchBasePoint>()
.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<SchBasePoint> 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());

7
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE);
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList());
// 找终点

235
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<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
List<String> 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<String> 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<PdmBdWorkorder>()
.eq(PdmBdWorkorder::getWorkorder_code, workorderCode))
: null;
if (one == null) {
throw new BadRequestException("压制机的工单不能为空!");
}
// 判断是否加急,加急则去窑口,不加急就是去双层缓存输送线
if (one.getIs_urgent()) {
regionCode = nextRegionStr.get(1); // 去窑区
}
List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
MapOf.of("regionCode", regionCode, "pointType", ENTRANCE)));
return ObjectUtil.isNotEmpty(pointForYZSL) ? pointForYZSL.get(0) : null;
// ??
// LambdaQueryWrapper<SchBasePoint> 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<SchBasePoint> 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<PdmBdWorkorder>()
.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);
}
}

32
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<String> startRegionStr, JSONObject extGroupData) {
// 获取当前工单
String workorderCode = extGroupData.getString("workorder_code");
PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode)
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>()
.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<SchBaseVehiclematerialgroup> list = vehiclematerialgroupService.list(
new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
.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<SchBasePoint>()
.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;
}

16
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<SchBasePoint> findPointForYZQL(List<String> regionCode, String materialId);
List<SchBasePoint> findPointForYZSL(JSONObject param);
}

34
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/mapper/YZMapper.xml

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper">
<select id="findPointForYZQL" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
FROM
`sch_base_point` p
LEFT JOIN pdm_bd_workorder w ON w.material_id = #{materialId} AND w.workorder_status = '3'
AND w.region_code = 'HN'
WHERE p.point_code = w.point_code
AND (p.ing_task_code = '' OR p.ing_task_code IS NULL)
AND p.is_used = 1
AND p.region_code IN
<foreach collection="regionCode" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</select>
<select id="findPointForYZSL" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT
p.*
FROM
`sch_base_point` p
LEFT JOIN sch_base_task t ON ( t.point_code1 = p.point_code OR t.point_code2 = p.point_code )
AND t.task_status != '5'
AND t.task_status != '6'
WHERE
( p.ing_task_code IS NULL OR p.ing_task_code = '' )
AND p.region_code = #{regionCode}
AND p.point_type = #{pointType}
AND p.is_used = TRUE
AND ( t.task_code IS NULL OR t.task_code = '')
</select>
</mapper>

35
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<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.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;
}
}

4
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.java → 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<JSONObject> {
JSONArray getAll11(JSONObject map);
JSONArray getAll12(List<String> list);
void updateByObject(JSONObject object);
}

7
lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/mapper/TestMapper.xml → lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/test/mapper/TestMapper.xml

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.sch.task_manage.task.tasks.mapper.TestMapper">
<mapper namespace="org.nl.wms.util.test.mapper.TestMapper">
<resultMap id="selectPoint" type="java.util.HashMap">
<result property="point_code" column="point_code"/>
<result property="point_name" column="point_name"/>
@ -11,6 +11,11 @@
<result property="point_name" column="point_name"/>
<result property="region" column="region_name"/>
</resultMap>
<update id="updateByObject" parameterType="com.alibaba.fastjson.JSONObject">
UPDATE sch_base_point
SET point_name = #{point_name}
WHERE point_code = #{point_code}
</update>
<select id="getAll" resultMap="selectPoint">
SELECT point_code, point_name, region_name

6
lms/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml

@ -6,10 +6,10 @@ spring:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:nl-sso-server}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:rtmg_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
username: ${DB_USER:root}
password: ${DB_PWD:P@ssw0rd}
password: ${DB_PWD:12356}
# password: ${DB_PWD:P@ssw0rd}
# 初始连接数
initial-size: 5

14
lms/nladmin-system/nlsso-server/src/test/java/org/nl/ApplicationTest.java

@ -1,10 +1,16 @@
package org.nl;
import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;
import org.nl.config.MapOf;
import org.nl.system.service.user.ISysUserService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task_manage.task.tasks.yz.mapper.YZMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
* @Author: lyd
* @Description: 单元测试
@ -14,8 +20,16 @@ import org.springframework.boot.test.context.SpringBootTest;
public class ApplicationTest {
@Autowired
private ISysUserService userService;
@Autowired
private YZMapper yzMapper;
@Test
void contextLoads() {
System.out.println(userService.list());
}
@Test
void yzMapperTest() {
List<SchBasePoint> pointForYZSL = yzMapper.findPointForYZSL(new JSONObject(
MapOf.of("regionCode", "HCSSX", "pointType", "1")));
System.out.println(pointForYZSL);
}
}

156
lms/nladmin-system/nlsso-server/src/test/java/org/nl/point/PointCreate.java

@ -0,0 +1,156 @@
package org.nl.point;
import cn.hutool.core.date.DateUtil;
import org.junit.jupiter.api.Test;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.region.service.ISchBaseRegionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: lyd
* @Description: 创建点位
* @Date: 2023/6/15
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class PointCreate {
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseRegionService regionService;
@Test
void test01() {
// 创建YJ01-08
List<SchBasePoint> pointList = new ArrayList<>();
for (int i = 3; i <= 8; i++) {
String pointName = "压机0";
String pointCode = "YJ0";
pointName = pointName + i;
pointCode = pointCode + i;
SchBasePoint point = new SchBasePoint();
point.setPoint_code(pointCode);
point.setPoint_name(pointName);
point.setRegion_code("YZ");
point.setRegion_name("压制区域");
point.setPoint_type("1");
point.setParent_point_code(pointCode);
point.setIs_has_workder(true);
point.setIs_auto(true);
pointList.add(point);
}
pointService.saveBatch(pointList);
}
@Test
void test02() { // 压机接料位
// 创建YJ01JLW01
List<SchBasePoint> pointList = new ArrayList<>();
for (int i = 3; i <= 8; i++) {
String pointName = "压机0";
String pointCode = "YJ0";
pointName = pointName + i;
pointCode = pointCode + i;
for (int j = 1; j <= 2; j++) {
String jlw = "JLW0";
String jlw2 = "接料位0";
jlw = jlw + j;
jlw2 = jlw2 + j;
SchBasePoint point = new SchBasePoint();
point.setPoint_code(pointCode + jlw);
point.setPoint_name(pointName + jlw2);
point.setRegion_code("YZ");
point.setRegion_name("压制区域");
point.setPoint_type("2");
point.setParent_point_code(pointCode);
point.setIs_has_workder(false);
point.setIs_auto(true);
pointList.add(point);
}
}
pointService.saveBatch(pointList);
}
@Test
void test03() { // 料盅睏料线区域
// 创建LZKL01 - 32
List<SchBasePoint> pointList = new ArrayList<>();
for (int i = 1; i <= 12; i++) {// 3台
String pointName = "睏料位";
String pointCode = "KLW";
if (i < 10) {
pointName = pointName + "0" + i;
pointCode = pointCode + "0" + i;
} else {
pointName = pointName + i;
pointCode = pointCode + i;
}
SchBasePoint point = new SchBasePoint();
point.setPoint_code(pointCode);
point.setPoint_name(pointName);
point.setRegion_code("LZKLX");
point.setRegion_name("料盅睏料线区域");
point.setParent_point_code(pointCode);
point.setIs_has_workder(false);
point.setIs_auto(true);
pointList.add(point);
}
pointService.saveBatch(pointList);
}
@Test
void test04() { // 缓存库位区域
List<SchBasePoint> pointList = new ArrayList<>();
int count = 1;
for (int i = 1; i <= 2; i++) {
for (int j = 1; j <= 29; j++) {
for (int k = 1; k <= 3; k++) {
String code = "HCHJ";
String name = "缓存货架";
if (count < 10) {
code = code + "00" + count;
name = name + "00" + count;
} else if (count >= 10 && count < 100) {
code = code + "0" + count;
name = name + "0" + count;
} else {
code = code + count;
name = name + count;
}
SchBasePoint point = new SchBasePoint();
point.setPoint_code(code);
point.setPoint_name(name);
point.setRegion_code("GTPHC");
point.setRegion_name("钢托盘缓存区域");
point.setPoint_status("1");
point.setCan_vehicle_type("2");
point.setVehicle_max_qty(1);
point.setBlock_num(1);
point.setRow_num(i);
point.setCol_num(j);
point.setLayer_num(k);
point.setIn_order_seq(count);
point.setOut_order_seq(count);
point.setIn_empty_seq(count);
point.setOut_empty_seq(count);
point.setParent_point_code(code);
point.setCreate_id("1");
point.setCreate_name("管理员");
point.setCreate_time(DateUtil.now());
point.setIs_has_workder(false);
point.setIs_auto(true);
point.setIs_used(true);
pointList.add(point);
count++;
}
}
}
pointService.saveBatch(pointList);
}
}

19
lms/nladmin-system/nlsso-server/src/test/java/org/nl/task/MapperTest.java

@ -1,14 +1,17 @@
package org.nl.task;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.junit.jupiter.api.Test;
import org.nl.config.MapOf;
import org.nl.wms.sch.task_manage.task.tasks.mapper.TestMapper;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.util.test.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@ -23,6 +26,9 @@ public class MapperTest {
@Autowired
private TestMapper testMapper;
@Autowired
private ISchBasePointService pointService;
/**
* 无参查询
* 返回类型: List<HashMap<String, Object>> 等同于JSONArray
@ -157,4 +163,13 @@ public class MapperTest {
JSONArray all12 = testMapper.getAll12(list);
System.out.println("结果集:" + all12);
}
@Test
void testMapper13() {
SchBasePoint bcphj01 = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, "BCPHJ01"));
String s = JSON.toJSONString(bcphj01);
JSONObject jsonObject = JSONObject.parseObject(s);
jsonObject.put("point_name", "测试");
testMapper.updateByObject(jsonObject);
}
}

14
lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue

@ -228,6 +228,12 @@
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否加急" prop="is_needmove">
<el-radio-group v-model="form.is_urgent" style="width: 240px">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
@ -298,6 +304,11 @@
{{ scope.row.is_needmove ? '是' : '否' }}
</template>
</el-table-column>
<el-table-column prop="is_urgent" label="是否加急" :min-width="flexWidth('is_urgent',crud.data,'是否加急')">
<template slot-scope="scope">
{{ scope.row.is_urgent ? '是' : '否' }}
</template>
</el-table-column>
<!-- <el-table-column prop="workorder_type" label="工单类型" :min-width="flexWidth('workorder_type',crud.data,'工单类型')" />-->
<!--<el-table-column
prop="passback_status"
@ -363,7 +374,8 @@ const defaultForm = {
passback_status: null,
workshop_code: null,
ext_id: null,
is_delete: false
is_delete: false,
is_urgent: false
}
export default {
name: 'PdmBdWorkorder',

4
lms/nladmin-ui/src/views/wms/sch/group/index.vue

@ -237,8 +237,8 @@
</template>
</el-table-column>
<el-table-column prop="standing_time" label="静置时间(分钟)" :min-width="flexWidth('standing_time',crud.data,'静置时间(分钟)')" />
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_qty',crud.data,'物料数量')" />
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_qty',crud.data,'物料数量')" />
<el-table-column prop="material_name" label="物料名称" show-overflow-tooltip :min-width="flexWidth('material_qty',crud.data,'物料数量')" />
<el-table-column prop="material_code" label="物料编码" show-overflow-tooltip :min-width="flexWidth('material_qty',crud.data,'物料数量')" />
<el-table-column prop="material_spec" label="物料规格" :min-width="flexWidth('material_qty',crud.data,'物料数量')" />
<el-table-column prop="material_qty" label="物料数量" :min-width="flexWidth('material_qty',crud.data,'物料数量')" />
<el-table-column prop="material_weight" label="物料重量" :min-width="flexWidth('material_weight',crud.data,'物料重量')" />

5
lms/nladmin-ui/src/views/wms/sch/point/PointDialog.vue

@ -46,7 +46,6 @@
:cell-style="{'text-align':'center'}"
:header-cell-style="{background:'#f5f7fa',color:'#606266','text-align':'center'}"
@select="handleSelectionChange"
@select-all="onSelectAll"
@current-change="clickChange"
>
<el-table-column v-if="!isSingle" type="selection" width="55" />
@ -107,7 +106,7 @@ export default {
},
isSingle: {
type: Boolean,
default: true
default: false
}
},
data() {
@ -132,7 +131,7 @@ export default {
},
handleSelectionChange(val, row) {
if (val.length > 1) {
if (val.length > 1 && this.isSingle) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(val.pop())
} else {

11
lms/nladmin-ui/src/views/wms/sch/point/index.vue

@ -37,6 +37,7 @@
<el-form-item label="区域类型">
<el-select
v-model="query.region_code"
@clear="handleClear"
clearable
filterable
size="mini"
@ -307,7 +308,7 @@
<pagination />
</div>
<ViewDialog ref="viewDialog"/>
<PointDialog :dialog-show.sync="pointDialog" @tableChanged="tableChanged"/>
<PointDialog :dialog-show.sync="pointDialog" :is-single="false" @tableChanged="tableChanged"/>
</div>
</template>
@ -484,10 +485,16 @@ export default {
}
},
tableChanged(row) {
this.form.parent_point_code = row.point_code
this.form.parent_point_code = row.map(point => point.point_code).join(',')
},
getParentPoint() {
this.pointDialog = true
},
handleClear() {
this.crud.query.region_code = null
this.crud.query.point_type = null
this.crud.query.point_status = null
this.hand()
}
}
}

2
lms/nladmin-ui/src/views/wms/sch/region/index.vue

@ -62,7 +62,7 @@
</el-select>
</el-form-item>
<el-form-item label="区域编码">
<el-input v-model="form.region_code" style="width: 370px;" />
<el-input v-model="form.region_code" style="width: 370px;" :disabled="crud.status.edit===1"/>
</el-form-item>
<el-form-item label="区域名称">
<el-input v-model="form.region_name" style="width: 370px;" />

30
lms/nladmin-ui/src/views/wms/sch/task/index.vue

@ -109,9 +109,9 @@
<el-form-item label="载具编码">
<el-input v-model="form.vehicle_code" style="width: 240px;" />
</el-form-item>
<el-form-item label="优先级">
<el-input v-model="form.priority" style="width: 240px;" />
</el-form-item>
<!-- <el-form-item label="优先级">-->
<!-- <el-input v-model="form.priority" style="width: 240px;" />-->
<!-- </el-form-item>-->
<el-form-item v-if="false" label="处理类">
<el-input v-model="form.handle_class" style="width: 240px;" />
</el-form-item>
@ -170,11 +170,15 @@
</el-table-column>
<el-table-column prop="remark" label="提示信息" :min-width="flexWidth('remark',crud.data,'提示信息')" />
<el-table-column prop="config_code" label="配置编码" :min-width="flexWidth('config_code',crud.data,'配置编码')" />
<el-table-column prop="point_code1" label="起点" :min-width="flexWidth('point_code1',crud.data,'点位1')" />
<el-table-column prop="point_code2" label="终点" :min-width="flexWidth('point_code2',crud.data,'点位2')" />
<el-table-column prop="point_code3" label="点位3" :min-width="flexWidth('point_code3',crud.data,'点位3')" />
<el-table-column prop="point_code4" label="点位4" :min-width="flexWidth('point_code4',crud.data,'点位4')" />
<el-table-column prop="vehicle_type" label="载具类型" :min-width="flexWidth('vehicle_type',crud.data,'载具类型')" />
<el-table-column prop="point_code1" label="起点1" :min-width="flexWidth('point_code1',crud.data,'点位1')" />
<el-table-column prop="point_code2" label="终点1" :min-width="flexWidth('point_code2',crud.data,'点位2')" />
<el-table-column prop="point_code3" label="起点2" :min-width="flexWidth('point_code3',crud.data,'点位3')" />
<el-table-column prop="point_code4" label="终点2" :min-width="flexWidth('point_code4',crud.data,'点位4')" />
<el-table-column prop="vehicle_type" label="载具类型" :min-width="flexWidth('vehicle_type',crud.data,'载具类型', 20)">
<template slot-scope="scope">
{{ dict.label.vehicle_type[scope.row.vehicle_type] }}
</template>
</el-table-column>
<el-table-column prop="vehicle_qty" label="载具数量" :min-width="flexWidth('vehicle_qty',crud.data,'载具数量')" />
<el-table-column prop="priority" label="优先级" :min-width="flexWidth('priority',crud.data,'优先级')" />
<el-table-column v-if="false" prop="handle_class" label="处理类" :min-width="flexWidth('handle_class',crud.data,'处理类')" />
@ -183,7 +187,11 @@
<el-table-column prop="task_group_id" label="任务组标识" :min-width="flexWidth('task_group_id',crud.data,'任务组标识')" />
<el-table-column prop="task_group_seq" label="任务组顺序号" :min-width="flexWidth('task_group_seq',crud.data,'任务组顺序号')" />
<el-table-column prop="finished_type" label="任务完成类型" :min-width="flexWidth('finished_type',crud.data,'任务完成类型')" />
<el-table-column prop="create_mode" label="生成方式" :min-width="flexWidth('create_mode',crud.data,'生成方式')" />
<el-table-column prop="create_mode" label="生成方式" :min-width="flexWidth('create_mode',crud.data,'生成方式')" >
<template slot-scope="scope">
{{ dict.label.create_mode[scope.row.create_mode] }}
</template>
</el-table-column>
<el-table-column prop="acs_trace_id" label="链路标识" :min-width="flexWidth('acs_trace_id',crud.data,'链路标识')" />
<el-table-column prop="request_param" label="生成任务的请求参数" :min-width="flexWidth('request_param',crud.data,'生成任务的请求参数')" />
<el-table-column prop="response_param" label="下发任务的请求参数" :min-width="flexWidth('response_param',crud.data,'下发任务的请求参数')" />
@ -257,6 +265,7 @@ const defaultForm = {
}
export default {
name: 'Task',
dicts: ['vehicle_type', 'create_mode'],
components: { pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
@ -333,7 +342,8 @@ export default {
}
const data = {
task_code: row.task_code,
method_name: method_name
method_name: method_name,
config_code: row.config_code
}
crudSchBaseTask.operation(data).then(res => {
this.crud.toQuery()

Loading…
Cancel
Save