add: 案例

This commit is contained in:
2023-05-25 18:50:38 +08:00
parent 7eb3968f25
commit f3b789aa66
35 changed files with 1230 additions and 264 deletions

Binary file not shown.

View File

@@ -49,7 +49,7 @@ public class SecurityUtils {
* @return 系统用户名称
*/
public static String getCurrentNickName() {
return getCurrentUser().getPresonName();
return getCurrentUser().getPreson_name();
}
/**

View File

@@ -22,7 +22,7 @@ public class CurrentUser implements Serializable {
//账号
private String username;
//姓名
private String presonName;
private String preson_name;
//用户详细信息
private SysUser user;

View File

@@ -168,7 +168,7 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
dept.setDept_id(IdUtil.getStringId());
CurrentUser user = SecurityUtils.getCurrentUser();
dept.setCreate_id(user.getId());
dept.setCreate_name(user.getPresonName());
dept.setCreate_name(user.getPreson_name());
dept.setCreate_time(new Date());
this.save(dept);
// 清理缓存

View File

@@ -244,7 +244,7 @@ public class OnlineUserService {
CurrentUser user = new CurrentUser();
user.setId(userInfo.getUser_id());
user.setUsername(userInfo.getUsername());
user.setPresonName((userInfo.getPerson_name()));
user.setPreson_name((userInfo.getPerson_name()));
user.setUser(userInfo);
user.setPermissions(permissionList);

View File

@@ -8,28 +8,33 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @description /
* @author lyd
* @date 2023-05-16
**/
* @author lyd
* @description /
* @date 2023-05-16
**/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sch_base_vehiclematerialgroup")
public class SchBaseVehiclematerialgroup implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "group_id", type = IdType.NONE)
@ApiModelProperty(value = "组盘标识")
private String group_id;
@TableId(value = "vehicle_code", type = IdType.NONE)
@ApiModelProperty(value = "载具编码")
private String vehicle_code;
@ApiModelProperty(value = "物料标识")
private String material_id;
@ApiModelProperty(value = "载具类型")
private String vehicle_type;
@ApiModelProperty(value = "子载具编码")
private String child_vehicle_code;
@@ -52,10 +57,10 @@ public class SchBaseVehiclematerialgroup implements Serializable {
private String instorage_time;
@ApiModelProperty(value = "静置时间(分钟)")
private BigDecimal standing_time;
private Integer standing_time;
@ApiModelProperty(value = "物料数量")
private BigDecimal material_qty;
private Integer material_qty;
@ApiModelProperty(value = "物料重量")
private BigDecimal material_weight;
@@ -64,7 +69,7 @@ public class SchBaseVehiclematerialgroup implements Serializable {
private String workorder_code;
@ApiModelProperty(value = "组盘次数")
private BigDecimal group_number;
private Integer group_number;
@ApiModelProperty(value = "任务编码")
private String task_code;
@@ -108,6 +113,9 @@ public class SchBaseVehiclematerialgroup implements Serializable {
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "1:待绑定2:已绑定3:已解绑")
private String group_bind_material_status;
@ApiModelProperty(value = "是否删除")
private Boolean is_delete;
@@ -129,6 +137,7 @@ public class SchBaseVehiclematerialgroup implements Serializable {
@ApiModelProperty(value = "修改时间")
private String update_time;
@TableField(exist = false)
private String material_name;
@TableField(exist = false)

View File

@@ -12,6 +12,9 @@ import java.io.Serializable;
@Data
public class SchBaseVehiclematerialgroupDto implements Serializable {
/** 组盘id */
private String group_id;
/** 载具编码 */
private String vehicle_code;

View File

@@ -2,6 +2,7 @@ package org.nl.wms.sch.group.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -41,15 +42,11 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
@Override
public void create(SchBaseVehiclematerialgroup entity) {
SchBaseVehiclematerialgroup schBaseVehiclematerialgroup = vehiclematerialgroupMapper.selectOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
.eq(SchBaseVehiclematerialgroup::getVehicle_code, entity.getVehicle_code())
.eq(SchBaseVehiclematerialgroup::getIs_delete, false));
Assert.isNull(schBaseVehiclematerialgroup, "载具编码[" + entity.getVehicle_code() + "]已存在");
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setGroup_id(IdUtil.getSnowflake(1,1).nextIdStr());
entity.setCreate_id(currentUserId);
entity.setCreate_name(nickName);
entity.setCreate_time(now);
@@ -61,16 +58,12 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl<SchBaseV
@Override
public void update(SchBaseVehiclematerialgroup entity) {
SchBaseVehiclematerialgroup dto = vehiclematerialgroupMapper.selectById(entity.getVehicle_code());
if (dto == null) throw new BadRequestException("被删除或无权限,操作失败!");
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
vehiclematerialgroupMapper.updateById(entity);
}

View File

@@ -13,15 +13,14 @@ import org.nl.common.enums.wms.PointStatusEnum;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch.region.service.dao.SchBaseRegion;
import org.nl.wms.sch.region.service.dao.mapper.SchBaseRegionMapper;
import org.nl.wms.utils.PointUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -51,6 +50,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
String point_type = ObjectUtil.isNotEmpty(whereJson.get("point_type")) ? whereJson.get("point_type").toString() : null;
String point_status = ObjectUtil.isNotEmpty(whereJson.get("point_status")) ? whereJson.get("point_status").toString() : null;
Boolean is_used = ObjectUtil.isNotEmpty(whereJson.get("is_used")) ? Boolean.valueOf(whereJson.get("is_used").toString()) : null;
Boolean lock_type = ObjectUtil.isNotEmpty(whereJson.get("lock_type")) ? Boolean.valueOf(whereJson.get("lock_type").toString()) : false;
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.like(ObjectUtil.isNotEmpty(blurry), SchBasePoint::getPoint_code, blurry)
.or(ObjectUtil.isNotEmpty(blurry), lam1 -> lam1.like(SchBasePoint::getPoint_name, blurry))
@@ -58,7 +58,12 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
.eq(ObjectUtil.isNotEmpty(region_code), SchBasePoint::getRegion_code, region_code)
.eq(ObjectUtil.isNotEmpty(point_type), SchBasePoint::getPoint_type, point_type)
.eq(ObjectUtil.isNotEmpty(point_status), SchBasePoint::getPoint_status, point_status)
.eq(ObjectUtil.isNotEmpty(is_used), SchBasePoint::getIs_used, is_used);
.eq(ObjectUtil.isNotEmpty(is_used), SchBasePoint::getIs_used, is_used)
.and(!lock_type, slam -> slam.isNull(SchBasePoint::getIng_task_code)
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.and(lock_type, slam -> slam.isNotNull(SchBasePoint::getIng_task_code)
.ne(SchBasePoint::getIng_task_code, ""));
IPage<SchBasePoint> pages = new Page<>(page.getPage() + 1, page.getSize());
pointMapper.selectPage(pages, lam);
// 可以存放的载具类型
@@ -122,8 +127,10 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
entity.setUpdate_id(currentUserId);
entity.setUpdate_name(nickName);
entity.setUpdate_time(now);
String can_vehicle_type = String.join(",", entity.getCan_vehicle_types());
entity.setCan_vehicle_type(can_vehicle_type);
if (ObjectUtil.isNotEmpty(entity.getCan_vehicle_types())) {
String can_vehicle_type = String.join(",", entity.getCan_vehicle_types());
entity.setCan_vehicle_type(can_vehicle_type);
}
String pointStatus = entity.getPoint_status();
// 根据点位状态来判断更新内容
if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals(PointStatusEnum.EMPTY_PLACE.getValue())) {

View File

@@ -68,6 +68,15 @@ public class SchBaseTaskController {
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/taskStatusList")
@Log("任务状态下拉框")
@ApiOperation("任务状态下拉框")
@SaIgnore
//@SaCheckPermission("@el.check('schBaseTask:list')")
public ResponseEntity<Object> getTaskStatusList(){
return new ResponseEntity<>(TableDataInfo.build(schBaseTaskService.getTaskStatusList()),HttpStatus.OK);
}
@PostMapping("/apply")
@Log("新增任务管理")
@ApiOperation("新增任务管理")
@@ -78,4 +87,13 @@ public class SchBaseTaskController {
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping("/operation")
@Log("任务操作")
@ApiOperation("任务操作")
//@SaCheckPermission("task:edit")
public ResponseEntity<Object> update(@RequestBody Map<String, Object> map) {
schBaseTaskService.operation(map);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.sch.task.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery;
@@ -67,6 +68,15 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
*/
List<SchBaseTask> findUnFinishTasksByTaskConfig(String config_code, String task_code);
/**
* 根据任务配置查询同台设备未完成的任务列表
*
* @param config_code 任务配置
* @param device_code 设备
* @return
*/
List<SchBaseTask> findUnFinishTasksByTaskConfig(String config_code, String device_code, String direction);
List<SchBaseTask> findTasksByTaskStatus(String config_code, TaskStatus status);
@@ -76,4 +86,17 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
* @param param /
*/
void apply(JSONObject param);
/**
* 获取任务状态下拉框
* @return
*/
JSONArray getTaskStatusList();
/**
* 任务操作
*
* @param param
*/
void operation(Map<String, Object> param);
}

View File

@@ -43,6 +43,9 @@ public class SchBaseTaskconfig implements Serializable {
@ApiModelProperty(value = "任务类型")
private String task_type;
@ApiModelProperty(value = "任务方向")
private String task_direction;
@ApiModelProperty(value = "优先级")
private String priority;

View File

@@ -33,6 +33,9 @@ public class SchBaseTaskconfigDto implements Serializable {
/** 优先级 */
private String priority;
/** 任务方向 **/
private String task_direction;
/** 允许最大任务生成数 */
private Integer task_create_max_num;

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -14,8 +15,8 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.TaskFactory;
@@ -23,9 +24,11 @@ import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author lyd
@@ -41,6 +44,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Autowired
private SchBaseTaskconfigMapper schBaseTaskconfigMapper;
@Autowired
private TaskFactory taskFactory;
@Override
public IPage<SchBaseTask> queryAll(Map whereJson, PageQuery page) {
String task_code = ObjectUtil.isNotEmpty(whereJson.get("task_code")) ? whereJson.get("task_code").toString() : null;
@@ -48,12 +54,16 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String point_code = ObjectUtil.isNotEmpty(whereJson.get("point_code")) ? whereJson.get("point_code").toString() : null;
String begin_time = ObjectUtil.isNotEmpty(whereJson.get("begin_time")) ? whereJson.get("begin_time").toString() : null;
String end_time = ObjectUtil.isNotEmpty(whereJson.get("end_time")) ? whereJson.get("end_time").toString() : null;
String more_task_status = ObjectUtil.isNotEmpty(whereJson.get("more_task_status")) ? whereJson.get("more_task_status").toString() : null;
List<String> collect = ObjectUtil.isNotEmpty(more_task_status)?Arrays.stream(more_task_status.split(",")).collect(Collectors.toList()):null;
LambdaQueryWrapper<SchBaseTask> lam = new LambdaQueryWrapper<>();
lam.eq(ObjectUtil.isNotEmpty(task_code), SchBaseTask::getTask_code, task_code)
.eq(ObjectUtil.isNotEmpty(vehicle_code), SchBaseTask::getVehicle_code, vehicle_code)
.eq(ObjectUtil.isNotEmpty(point_code), SchBaseTask::getPoint_code1, point_code)
.ge(ObjectUtil.isNotEmpty(begin_time), SchBaseTask::getCreate_time, begin_time)
.le(ObjectUtil.isNotEmpty(end_time), SchBaseTask::getCreate_time, end_time);
.le(ObjectUtil.isNotEmpty(end_time), SchBaseTask::getCreate_time, end_time)
.in(ObjectUtil.isNotEmpty(collect), SchBaseTask::getTask_status, collect)
.orderByDesc(SchBaseTask::getUpdate_time);
IPage<SchBaseTask> pages = new Page<>(page.getPage() + 1, page.getSize());
schBaseTaskMapper.selectPage(pages, lam);
return pages;
@@ -104,6 +114,19 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return schBaseTasks;
}
@Override
public List<SchBaseTask> findUnFinishTasksByTaskConfig(String config_code, String device_code, String direction) {
Assert.notNull(config_code, "任务配置编码不能为空!");
LambdaQueryWrapper<SchBaseTask> lam = new LambdaQueryWrapper<>();
lam.eq(SchBaseTask::getConfig_code, config_code)
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
.eq(direction.equals("1"), SchBaseTask::getPoint_code1, device_code)
.eq(direction.equals("2"), SchBaseTask::getPoint_code2, device_code)
.eq(SchBaseTask::getIs_delete, false);
List<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(lam);
return schBaseTasks;
}
@Override
public List<SchBaseTask> findTasksByTaskStatus(String config_code, TaskStatus status) {
Assert.notNull(config_code, "任务配置编码不能为空!");
@@ -121,7 +144,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
// if (ObjectUtil.isEmpty(entity.getTask_status())) throw new BadRequestException("任务状态不能为空!");
Assert.notNull(entity.getTask_status(), "任务状态不能为空!");
entity.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr());
@@ -137,18 +159,74 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Override
public void apply(JSONObject param) {
String device_code = "123";
String type = "123";
String vehicle_code = "123";
/**
* 参数:设备编号(确定的点), 任务类型, 载具编码
*/
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;
String vehicle_code = ObjectUtil.isNotEmpty(param.getString("vehicle_code")) ? param.getString("vehicle_code") : null;
String vehicle_qty = ObjectUtil.isNotEmpty(param.getString("vehicle_qty")) ? param.getString("vehicle_qty") : null;
// 校验设备编码
if (ObjectUtil.isEmpty(device_code)) {
throw new BadRequestException("设备编码不能为空!");
}
//1、如果是送料检测载具状态
if (type.equals("1") && ObjectUtil.isEmpty(vehicle_code)) {
throw new BadRequestException("载具编码不能为空!");
}
//2、送空载具
//...
//3、叫料
//...
//4、叫空载具
TaskFactory taskFactory = new TaskFactory();
AbstractTask task = taskFactory.getTask("HNMLTask");
//
//...
AbstractTask task = taskFactory.getTask("YZQLTask");
// 执行创建任务
task.apply(param);
}
@Override
public JSONArray getTaskStatusList() {
TaskStatus[] values = TaskStatus.values();
JSONArray arr = new JSONArray();
for (TaskStatus value : values) {
JSONObject json = new JSONObject();
json.put("code", value.getCode());
json.put("name", value.getName());
arr.add(json);
}
return arr;
}
@Override
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;
// 根据标识找到任务
SchBaseTask taskOne = schBaseTaskMapper.selectById(task_code);
if (Integer.parseInt(taskOne.getTask_status()) >= Integer.parseInt(TaskStatus.FINISHED.getCode())) {
throw new BadRequestException("任务已完成或已取消!");
}
// 根据配置去工厂类获得类对象
String processing_class = "YZQLTask";
String message = "";
// 根据任务类型获取对应的任务操作类
AbstractTask abstractTask = taskFactory.getTask(processing_class);
// 调用每个任务类的method_name()强制结束方法
JSONObject result;
switch (method_name) {
case "immediateNotifyAcs":
//
break;
case "forceFinish": // 强制完成
abstractTask.forceFinish(task_code);
break;
case "cancel":
abstractTask.cancel(task_code);
break;
default:
break;
}
}
}

View File

@@ -1,18 +1,24 @@
package org.nl.wms.sch.task_manage;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import org.nl.config.SpringContextHolder;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
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.service.impl.SchBaseTaskServiceImpl;
import org.nl.wms.sch.task.service.impl.SchBaseTaskconfigServiceImpl;
import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum;
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;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@@ -23,16 +29,22 @@ import java.util.List;
* @date 2023年05月16日 16:42
* @desc desc
*/
@Component
public abstract class AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private IPdmBdWorkorderService workorderService;
/**
* 任务创建
* 根据配置生成任务,如并发控制等
*/
protected abstract void create();
protected abstract void create() throws BadRequestException;
/**
* 下发
@@ -116,7 +128,7 @@ public abstract class AbstractTask {
}
private AcsTaskDto setTask(String config_code, AcsTaskDto taskDto) {
SchBaseTaskconfig taskConfig = SpringContextHolder.getBean(SchBaseTaskconfigServiceImpl.class).getById(config_code);
SchBaseTaskconfig taskConfig = taskConfigService.getById(config_code);
taskDto.setPriority(taskConfig.getPriority());
taskDto.setTask_type(taskConfig.getAcs_task_type());
taskDto.setRoute_plan_code("normal");
@@ -140,7 +152,7 @@ public abstract class AbstractTask {
}
protected abstract void updateStatus(String config_code, TaskStatus status);
protected abstract void updateStatus(String task_code, TaskStatus status);
/**
* 寻找合适的点位
@@ -150,34 +162,98 @@ public abstract class AbstractTask {
protected abstract List<Object> findPoints();
public void apply(JSONObject param) {
String point_code = "";
String config_code = "HNMLTask";
//1、校验数据
SchBaseTaskconfig taskConfig = SpringContextHolder.getBean(SchBaseTaskconfigServiceImpl.class).getById(config_code);
Integer tcmn = taskConfig.getTask_create_max_num();
SchBaseTaskServiceImpl taskService = SpringContextHolder.getBean(SchBaseTaskServiceImpl.class);
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(taskConfig.getConfig_code());
Assert.isFalse(unFinishTasksByTaskConfig.size() > tcmn, "该点位申请的任务未完成数已超过上限,无法申请任务");
SchBaseTask task = new SchBaseTask();
task.setAcs_trace_id("");
task.setConfig_code(config_code);
task.setCreate_id("");
task.setCreate_mode("");
task.setPoint_code1("");
task.setVehicle_code("");
task.setTask_status(TaskStatus.APPLY.getCode());
SpringContextHolder.getBean(SchBaseTaskServiceImpl.class).create(task);
//1、如果是送料检测载具状态
//2、送空载具
//3、叫料
//4、叫空载具
//校验
/**
* 设置起点或者终点
*
* @param taskConfig
* @param task
* @param apply_point_code
*/
protected void setTaskPoint(SchBaseTaskconfig taskConfig, SchBaseTask task, String apply_point_code) {
String taskDirection = taskConfig.getTask_direction();
if (TaskDirectionEnum.SEND.getValue().equals(taskDirection)) {
task.setPoint_code1(apply_point_code);
} else {
task.setPoint_code2(apply_point_code);
}
}
/**
* @param task_code 任务标识
* @return
* @discription 强制结束完成任务
* @author ldjun
* @created 2020年6月19日 上午10:34:58
*/
public abstract void forceFinish(String task_code);
/**
* 取消任务,货物搬回原点
*
* @param task_code
*/
public abstract void cancel(String task_code);
/**
* 申请任务
*
* @param param
* @throws BadRequestException
*/
public void apply(JSONObject param) throws BadRequestException {
// 申请任务
SchBaseTask task = new SchBaseTask(); // 任务实体
String apply_point_code = param.getString("device_code");
String config_code = "YZQLTask";
// 1、校验数据
SchBaseTaskconfig taskConfig = taskConfigService.getById(config_code);
// 最大任务数
Integer tcmn = taskConfig.getTask_create_max_num();
List<SchBaseTask> unFinishTasksByTaskConfig = taskService
.findUnFinishTasksByTaskConfig(taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction());
Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn, "该点位申请的任务未完成数已超过上限,无法申请任务");
// 获取设备
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"));
if (ObjectUtil.isEmpty(workorder)) {
throw new BadRequestException("当前设备工单未生产!");
}
// 将组盘所需的数据装成jsonObject跟着任务走
param.put("material_id", workorder.getMaterial_id()); // 物料标识
param.put("standing_time", workorder.getStanding_time()); // 静置时间
param.put("workorder_code", workorder.getWorkorder_code()); // 静置时间
param.put("vehicle_type", workorder.getVehicle_type()); // 载具类型
// 设置任务数据
task.setVehicle_type(workorder.getVehicle_type());
}
// 2、创建申请任务
task.setAcs_trace_id("");
task.setConfig_code(config_code);
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_mode("");
task.setVehicle_code(param.getString("vehicle_code"));
task.setTask_status(TaskStatus.APPLY.getCode());
// 设置起/终点
this.setTaskPoint(taskConfig, task, apply_point_code);
task.setExt_group_data(JSONObject.toJSONString(param));
taskService.create(task);
// 3、判断是否直接找点下发
if (taskConfig.getIs_immediate_create()) {
this.create();
}
}
}

View File

@@ -4,6 +4,7 @@ package org.nl.wms.sch.task_manage;
import cn.hutool.core.util.ObjectUtil;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder;
import org.reflections.Reflections;
import org.springframework.stereotype.Component;
@@ -38,7 +39,10 @@ public class AutoCreateTask {
subTypes.forEach(clz -> {
// 调用AbstractAcsTask类的每个子类的schedule()方法
try {
Object obj = clz.newInstance();
Object obj = SpringContextHolder.getBean(clz);
// if (ObjectUtil.isEmpty(obj)) { // 如果spring中获取不到就用newInstance创建
// obj = clz.newInstance();
// }
//Method m = obj.getClass().getDeclaredMethod("schedule");
Method m = obj.getClass().getMethod("schedule");
List<AcsTaskDto> tasks = (List<AcsTaskDto>) m.invoke(obj);

View File

@@ -0,0 +1,42 @@
package org.nl.wms.sch.task_manage.enums;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.Getter;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.dict.impl.SysDictServiceImpl;
import java.util.List;
/**
* @Author: lyd
* @Description: 组盘绑定物料状态枚举
* @Date: 2023/5/25
*/
@Getter
public enum GroupBindMaterialStatusEnum {
/**
* 待绑定
*/WAIT_BIND,
/**
* 已绑定
*/BOUND,
/**
* 已解绑
*/UNBOUND;
private String value;
private String label;
static {
SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class);
List<Dict> taskDirection = bean.list(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "group_bind_material_status")
.orderByAsc(Dict::getDict_sort));
GroupBindMaterialStatusEnum[] values = GroupBindMaterialStatusEnum.values();
for (int i = 0; i < values.length; i++) {
values[i].value = taskDirection.get(i).getValue();
values[i].label = taskDirection.get(i).getLabel();
}
}
}

View File

@@ -0,0 +1,23 @@
package org.nl.wms.sch.task_manage.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Author: lyd
* @Description: 组盘状态枚举
* @Date: 2023/5/24
*/
@Getter
@AllArgsConstructor
public enum GroupStatusEnum {
OUT_SYSTEM("1", "系统外"),
IN_STORAGE("2", "存储中"),
IN_PROCESS("3", "处理中"),
IN_CARRY("4", "搬运中"),
DISCHARGE_MATERIAL("5", "可放料"),
CABLE_RETRIEVABLE_MATERIAL("6", "可取料");
private final String type;
private final String name;
}

View File

@@ -0,0 +1,21 @@
package org.nl.wms.sch.task_manage.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Author: lyd
* @Description:
* @Date: 2023/5/25
*/
@Getter
@AllArgsConstructor
public enum PointStatusEnum {
EMPTY_POINT("1", "空位"),
FULL_POINT("2", "有料"),
EMPTY_VEHICLE("3", "空载具");
private final String value;
private final String label;
}

View File

@@ -0,0 +1,47 @@
package org.nl.wms.sch.task_manage.enums;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.dict.dao.Dict;
import org.nl.system.service.dict.impl.SysDictServiceImpl;
import java.util.List;
/**
* @Author: lyd
* @Description: 任务配置 - 任务去向枚举
* @Date: 2023/5/25
*/
@Getter
public enum TaskDirectionEnum {
/**
* 送货
*/
SEND,
/**
* 取货
*/
CALL,
/**
* 移货
*/
MOVE;
private String value;
private String label;
static {
SysDictServiceImpl bean = SpringContextHolder.getBean(SysDictServiceImpl.class);
List<Dict> taskDirection = bean.list(new LambdaQueryWrapper<Dict>()
.eq(Dict::getCode, "task_direction")
.orderByAsc(Dict::getDict_sort));
TaskDirectionEnum[] values = TaskDirectionEnum.values();
for (int i = 0; i < values.length; i++) {
values[i].value = taskDirection.get(i).getValue();
values[i].label = taskDirection.get(i).getLabel();
}
}
}

View File

@@ -1,7 +1,11 @@
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.HNMLTask;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author ldjun
@@ -9,14 +13,25 @@ import org.nl.wms.sch.task_manage.task.tasks.HNMLTask;
* @date 2023年05月16日 16:42
* @desc desc
*/
@Component
public class TaskFactory {
@Autowired
private HNMLTask hnmlTask;
@Autowired
private YZQLTask yzqlTask;
//使用 getShape 方法获取形状类型的对象
public AbstractTask getTask(String taskType) {
if (taskType == null) {
return null;
}
if (taskType.equalsIgnoreCase("HNMLTask")) {
return new HNMLTask();
return hnmlTask;
}
if (taskType.equalsIgnoreCase("YZQLTask")) {
return yzqlTask;
}
return null;
}

View File

@@ -5,7 +5,7 @@ public enum TaskStatus {
CREATED("2", "创建完成", "创建完成"),
ISSUED("3", "下发", "下发"),
EXECUTING("4", "执行中", "执行中"),
FINISHED("5", "完成", "执行中"),
FINISHED("5", "完成", "完成"),
CANCELED("6", "已取消", "已取消");

View File

@@ -1,84 +0,0 @@
package org.nl.wms.sch.task_manage.task.tasks;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.nl.config.SpringContextHolder;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.impl.SchBasePointServiceImpl;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task.service.impl.SchBaseTaskServiceImpl;
import org.nl.wms.sch.task.service.impl.SchBaseTaskconfigServiceImpl;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import java.util.List;
/**
* @author ldjun 混碾满料任务
* @version 1.0
* @date 2023年05月16日 16:44
* @desc desc
*/
public class HNMLTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "HNMLTask";
@Override
protected void updateStatus(String task_code, TaskStatus status) {
ISchBaseTaskService taskService = SpringContextHolder.getBean(SchBaseTaskServiceImpl.class);
taskService.updateById(null);
}
@Override
protected void create() {
ISchBaseTaskService taskService = SpringContextHolder.getBean(SchBaseTaskServiceImpl.class);
ISchBasePointService pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class);
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
SchBaseTaskconfig taskConfig = SpringContextHolder.getBean(SchBaseTaskconfigServiceImpl.class).getById(TASK_CONFIG_CODE);
for (SchBaseTask task : tasks) {
String[] nextRegionStr = taskConfig.getNext_region_str().split(",");
SchBasePoint point = getSchBasePoint(pointService, nextRegionStr);
if (ObjectUtil.isEmpty(point)) continue;
task.setPoint_code2(point.getPoint_code());
taskService.update(task);
point.setIng_task_code(task.getTask_code());
pointService.update(point);
//下发
this.renotifyAcs(task);
}
}
private SchBasePoint getSchBasePoint(ISchBasePointService pointService, String[] nextRegionStr) {
for (String nextRegion : nextRegionStr) {
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.eq(SchBasePoint::getRegion_code, nextRegion)
.eq(SchBasePoint::getPoint_status, "1");
SchBasePoint p = pointService.getBaseMapper().selectOne(lam);
if (p != null) return p;
}
return null;
}
@Override
protected void issue() {
}
@Override
protected List<Object> findPoints() {
return null;
}
}

View File

@@ -1,6 +0,0 @@
package org.nl.wms.sch.task_manage.task.tasks;/**
* @Author: lyd
* @Description:
* @Date: 2023/5/19
*/public class HNQKTask {
}

View File

@@ -0,0 +1,206 @@
package org.nl.wms.sch.task_manage.task.tasks.hn;
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.Data;
import org.nl.common.enums.wms.PointStatusEnum;
import org.nl.common.exception.BadRequestException;
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.GroupStatusEnum;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author ldjun 混碾满料任务
* @version 1.0
* @date 2023年05月16日 16:44
* @desc desc
*/
@Component
@Data
public class HNMLTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "HNMLTask";
// 空位
private final String EMPTY_POINT = "1";
// 有料
private final String FULL_POINT = "2";
// 空载具
private final String EMPTY_VEHICLE = "3";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@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(); // 终点
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();
SchBaseTaskconfig configObj = taskConfigService.getById(TASK_CONFIG_CODE);
SchBasePoint endPointObj = pointService.getById(endPoint);
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
}
if (status.equals(TaskStatus.FINISHED)) { // 完成
// 要把数据存到组盘表
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup();
groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(extGroupData) && ObjectUtil.isNotEmpty(extGroupData.getString("material_id"))
? extGroupData.getString("material_id")
: "");
groupEntity.setStanding_time(ObjectUtil.isNotEmpty(extGroupData) && ObjectUtil.isNotEmpty(extGroupData.getString("standing_time"))
? extGroupData.getInteger("standing_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));
groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(extGroupData) && ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code"))
? extGroupData.getString("workorder_code")
: "");
groupEntity.setVehicle_code(vehicle_code);
groupEntity.setVehicle_type(taskObj.getVehicle_type());
groupEntity.setPoint_code(endPoint);
groupEntity.setPoint_name(endPointObj.getPoint_name());
groupEntity.setPcsn(IdUtil.simpleUUID());
groupEntity.setInstorage_time(DateUtil.now());
groupEntity.setTask_code(taskObj.getTask_code());
groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。
groupEntity.setIs_delete(false);
vehiclematerialgroupService.create(groupEntity);
// 终点去除正在执行的任务, 设置载具编码、载具类型、载具数量
if (ObjectUtil.isNotEmpty(endPointObj)) {
endPointObj.setIng_task_code("");
endPointObj.setVehicle_code(vehicle_code);
endPointObj.setVehicle_type(taskObj.getVehicle_type());
endPointObj.setVehicle_qty(1);
endPointObj.setPoint_status(PointStatusEnum.FULL_MATERIAL.getValue()); // 有料
pointService.updateById(endPointObj);
}
taskObj.setRemark("任务完成");
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
}
if (status.equals(TaskStatus.CANCELED)) { // 取消
SchBasePoint one = ObjectUtil.isNotEmpty(endPoint)
? pointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, endPoint))
: null;
if (one != null) {
one.setIng_task_code("");
pointService.updateById(one);
}
taskObj.setRemark("任务取消");
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
}
taskObj.setUpdate_time(DateUtil.now());
taskService.updateById(taskObj);
}
/**
* 具体业务
*/
@Override
protected void create() { // 找点+下发、 定时任务
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getById(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) {
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.in(SchBasePoint::getRegion_code, nextRegionStr)
.eq(SchBasePoint::getPoint_status, EMPTY_POINT)
.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
protected void issue() {
}
@Override
protected List<Object> findPoints() {
return null;
}
@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);
}
}

View File

@@ -0,0 +1,139 @@
package org.nl.wms.sch.task_manage.task.tasks.hn;
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.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.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/5/19
*/
@Component
public class HNQKTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "HNQKTask";
// 空位
private final String EMPTY_POINT = "1";
// 有料
private final String FULL_POINT = "2";
// 空载具
private final String EMPTY_VEHICLE = "3";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
/**
* 具体业务
*/
@Override
protected void create() {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE);
for (SchBaseTask task : tasks) {
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList());
// 找终点
SchBasePoint point = findStartPoint(startRegionStr);
if (ObjectUtil.isEmpty(point)) {
task.setRemark("未找到所需点位!");
taskService.update(task);
// 消息通知
continue;
}
// 设置终点并修改创建成功状态
task.setPoint_code1(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 startRegionStr
* @return
*/
private SchBasePoint findStartPoint(List<String> startRegionStr) {
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.in(SchBasePoint::getRegion_code, startRegionStr)
.eq(SchBasePoint::getPoint_status, EMPTY_VEHICLE)
// 可添加对托盘类型的校验
.eq(SchBasePoint::getVehicle_type, "1")
.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
protected void issue() {
}
@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 pointCode1 = taskObj.getPoint_code1(); // 获取起点
// 获取外部参数
JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
? JSONObject.parseObject(taskObj.getExt_group_data())
: null;
}
@Override
protected List<Object> findPoints() {
return null;
}
@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);
}
}

View File

@@ -0,0 +1,185 @@
package org.nl.wms.sch.task_manage.task.tasks.yz;
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 lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
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.task.core.TaskStatus;
import org.nl.wms.utils.PointUtil;
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/5/25
*/
@Slf4j
@Component
public class YZQLTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "YZQLTask";
// 空位
private final String EMPTY_POINT = "1";
// 有料
private final String FULL_POINT = "2";
// 空载具
private final String EMPTY_VEHICLE = "3";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
@Override
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getById(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.setTask_status(TaskStatus.CREATED.getCode());
task.setVehicle_code(point.getVehicle_code());
taskService.update(task);
point.setIng_task_code(task.getTask_code());
pointService.update(point);
//下发
// this.renotifyAcs(task);
}
}
/**
* 找起点业务:根据起点区域寻找所需点位
* @param startRegionStr : 区域列表
* @param extGroupData : 外部参数,包含条件所需的信息
* @description : JSONObject获取不到就是null
* @return
*/
private SchBasePoint findStartPoint(List<String> startRegionStr, JSONObject extGroupData) {
String materialId = extGroupData.getString("material_id");
String vehicleType = extGroupData.getString("vehicle_type");
int standingTime = extGroupData.getInteger("standing_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, FULL_POINT)
.eq(SchBasePoint::getVehicle_code, vehiclematerialgroup.getVehicle_code())
.eq(SchBasePoint::getVehicle_type, vehicleType));
return one;
}
@Override
protected void issue() {
}
@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(); // 起点
JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data())
? JSONObject.parseObject(taskObj.getExt_group_data())
: null;
SchBasePoint startPointObj = pointService.getById(startPoint);
// 根据传来的类型去对任务进行操作
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
taskObj.setRemark("执行中");
}
if (status.equals(TaskStatus.FINISHED)) { // 完成
// 任务上有载具编码 -> 获取当前载具编码的组盘信息
SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper<SchBaseVehiclematerialgroup>()
.eq(SchBaseVehiclematerialgroup::getVehicle_code, taskObj.getVehicle_code())
.eq(SchBaseVehiclematerialgroup::getVehicle_type, taskObj.getVehicle_type())
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()));
// 将载具设置为已解绑
one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
vehiclematerialgroupService.update(one);
// 释放点位,将点位设置为空位,清空数据
if (ObjectUtil.isNotEmpty(startPointObj)) {
PointUtil.clearPoint(startPointObj);
}
// 任务修改成完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
}
if (status.equals(TaskStatus.CANCELED)) { // 取消
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
// 释放点位,起点正在执行的任务清空
if (ObjectUtil.isNotEmpty(startPointObj)) {
startPointObj.setIng_task_code("");
pointService.updateById(startPointObj);
}
}
taskObj.setUpdate_time(DateUtil.now());
taskService.updateById(taskObj);
}
@Override
protected List<Object> findPoints() {
return null;
}
@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);
}
}

View File

@@ -0,0 +1,20 @@
package org.nl.wms.utils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
* @Author: lyd
* @Description: 监听事件用来debug查看bean工厂等信息
* @Date: 2023/5/23
*/
@Component
public class MyEventListener {
@EventListener
public void handleContextRefresh(ContextRefreshedEvent event) {
ApplicationContext applicationContext = event.getApplicationContext();
}
}

View File

@@ -1,6 +1,11 @@
package org.nl.wms.utils;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import org.nl.config.SpringContextHolder;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.impl.SchBasePointServiceImpl;
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
/**
* @Author: lyd
@@ -25,4 +30,19 @@ public class PointUtil {
// 设置
return statusArr.getString(label);
}
/**
* 清空点位
* @param point
*/
public static void clearPoint(SchBasePoint point) {
SchBasePointServiceImpl pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class);
point.setPoint_status(PointStatusEnum.EMPTY_POINT.getValue());
point.setVehicle_type("");
point.setVehicle_code("");
point.setIng_task_code("");
point.setVehicle_qty(0);
point.setUpdate_time(DateUtil.now());
pointService.updateById(point);
}
}

View File

@@ -0,0 +1,30 @@
package org.nl.enums;
import org.junit.jupiter.api.Test;
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum;
import org.springframework.boot.test.context.SpringBootTest;
/**
* @Author: lyd
* @Description:
* @Date: 2023/5/25
*/
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class GetEnumOnSqlTest {
@Test
public void TaskDirectionEnum() {
TaskDirectionEnum[] values = TaskDirectionEnum.values();
for (TaskDirectionEnum value : values) {
System.out.println(value.getValue() + ", " + value.getLabel());
}
}
@Test
public void GroupBindMaterialStatusEnum() {
GroupBindMaterialStatusEnum[] values = GroupBindMaterialStatusEnum.values();
for (GroupBindMaterialStatusEnum value : values) {
System.out.println(value.getValue() + ", " + value.getLabel());
}
}
}

View File

@@ -249,7 +249,11 @@
prop="workorder_status"
label="工单状态"
:min-width="flexWidth('workorder_status',crud.data,'工单状态')"
/>
>
<template slot-scope="scope">
{{ dict.label.pdm_workorder_status[scope.row.workorder_status] }}
</template>
</el-table-column>
<el-table-column prop="is_needmove" label="是否自动搬运" :min-width="flexWidth('is_needmove',crud.data,'是否自动搬运')">
<template slot-scope="scope">
{{ scope.row.is_needmove ? '是' : '否' }}
@@ -324,7 +328,7 @@ const defaultForm = {
}
export default {
name: 'PdmBdWorkorder',
dicts: ['vehicle_type'],
dicts: ['vehicle_type', 'pdm_workorder_status'],
components: { MaterialDialog, pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {

View File

@@ -256,6 +256,7 @@ import WorkOrderDialog from '@/views/wms/sch/group/WorkOrderDialog.vue'
import crudSchBasePoint from '@/views/wms/sch/point/schBasePoint'
const defaultForm = {
group_id: null,
vehicle_code: null,
material_id: null,
child_vehicle_code: null,
@@ -342,9 +343,9 @@ export default {
}
},
getPointList() { // 获取点位列表
crudSchBasePoint.getPointList().then(res => {
this.pointList = res
})
crudSchBasePoint.getPointList().then(res => {
this.pointList = res
})
},
tableChanged(row) {
this.form.material_name = row.material_name

View File

@@ -84,6 +84,16 @@
/>
</el-select>
</el-form-item>
<el-form-item label="锁定类型">
<el-switch
v-model="query.lock_type"
:active-value="true"
:inactive-value="false"
active-color="#409EFF"
inactive-color="#C0CCDA"
@change="hand"
/>
</el-form-item>
<el-form-item label="是否启用">
<el-switch
v-model="query.is_used"
@@ -367,7 +377,8 @@ export default {
reset: true
},
query: {
is_used: 'true'
is_used: 'true',
lock_type: false
}
})
},

View File

@@ -39,33 +39,33 @@
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<!-- <el-form-item label="任务类型">-->
<!-- <treeselect-->
<!-- v-model="query.task_type"-->
<!-- :load-options="loadChildNodes"-->
<!-- :options="classes1"-->
<!-- style="width: 180px"-->
<!-- placeholder="请选择"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="完成方式">-->
<!-- <el-select-->
<!-- v-model="query.finished_type"-->
<!-- style="width: 180px"-->
<!-- placeholder="完成方式"-->
<!-- class="filter-item"-->
<!-- clearable-->
<!-- @change="hand"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in finishTypeList"-->
<!-- :key="item.code"-->
<!-- clearable-->
<!-- :label="item.name"-->
<!-- :value="item.code"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="任务类型">-->
<!-- <treeselect-->
<!-- v-model="query.task_type"-->
<!-- :load-options="loadChildNodes"-->
<!-- :options="classes1"-->
<!-- style="width: 180px"-->
<!-- placeholder="请选择"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="完成方式">-->
<!-- <el-select-->
<!-- v-model="query.finished_type"-->
<!-- style="width: 180px"-->
<!-- placeholder="完成方式"-->
<!-- class="filter-item"-->
<!-- clearable-->
<!-- @change="hand"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in finishTypeList"-->
<!-- :key="item.code"-->
<!-- clearable-->
<!-- :label="item.name"-->
<!-- :value="item.code"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="创建时间">
<el-date-picker
v-model="query.createTime"
@@ -77,24 +77,24 @@
@change="crud.toQuery"
/>
</el-form-item>
<!-- <el-form-item label="任务状态">-->
<!-- <el-select-->
<!-- v-model="query.task_status"-->
<!-- multiple-->
<!-- style="width: 400px"-->
<!-- placeholder="任务状态"-->
<!-- class="filter-item"-->
<!-- clearable-->
<!-- @change="handTaskStatus"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in taskStatusList"-->
<!-- :key="item.code"-->
<!-- :label="item.name"-->
<!-- :value="item.code"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="任务状态">
<el-select
v-model="query.task_status"
multiple
style="width: 360px"
placeholder="任务状态"
class="filter-item"
clearable
@change="handTaskStatus"
>
<el-option
v-for="item in taskStatusList"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
</el-form-item>
<rrOperation />
</el-form>
</div>
@@ -187,41 +187,56 @@
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="task_code" label="任务编码" :min-width="flexWidth('task_code',crud.data,'任务编码')"/>
<el-table-column prop="task_class_id" label="任务分类" :min-width="flexWidth('task_class_id',crud.data,'任务分类')"/>
<el-table-column prop="task_status" label="任务状态" :min-width="flexWidth('task_status',crud.data,'任务状态')"/>
<el-table-column prop="config_code" label="配置编码" :min-width="flexWidth('config_code',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="点位2" :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="vehicle_qty" label="载具数量" :min-width="flexWidth('vehicle_qty',crud.data,'载具数量')"/>
<el-table-column prop="vehicle_code" label="载具编码" :min-width="flexWidth('vehicle_code',crud.data,'载具编码')"/>
<el-table-column prop="priority" label="优先级" :min-width="flexWidth('priority',crud.data,'优先级')"/>
<el-table-column prop="handle_class" v-if="false" label="处理类" :min-width="flexWidth('handle_class',crud.data,'处理类')"/>
<el-table-column prop="handle_status" label="处理状态" :min-width="flexWidth('handle_status',crud.data,'处理状态')"/>
<el-table-column prop="car_no" label="车号" :min-width="flexWidth('car_no',crud.data,'车号')"/>
<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="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,'下发任务的请求参数')"/>
<el-table-column prop="workshop_code" label="车间编码" :min-width="flexWidth('workshop_code',crud.data,'车间编码')"/>
<el-table-column prop="ext_group_data" label="额外组盘信息" :min-width="flexWidth('ext_group_data',crud.data,'额外组盘信息')"/>
<el-table-column prop="remark" label="备注" :min-width="flexWidth('remark',crud.data,'备注')"/>
<el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')"/>
<el-table-column prop="create_time" label="创建时间" :min-width="flexWidth('create_time',crud.data,'创建时间')"/>
<el-table-column prop="update_name" label="修改人" :min-width="flexWidth('update_name',crud.data,'修改人')"/>
<el-table-column prop="update_time" label="修改时间" :min-width="flexWidth('update_time',crud.data,'修改时间')"/>
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
<el-table-column prop="task_code" label="任务编码" :min-width="flexWidth('task_code',crud.data,'任务编码')" />
<el-table-column prop="vehicle_code" label="载具编码" :min-width="flexWidth('vehicle_code',crud.data,'载具编码')" />
<el-table-column prop="task_class_id" label="任务分类" :min-width="flexWidth('task_class_id',crud.data,'任务分类')" />
<el-table-column prop="task_status" label="任务状态" :min-width="flexWidth('task_status',crud.data,'任务状态')">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
/>
{{ getStatusName(scope.row.task_status) }}
</template>
</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="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,'处理类')" />
<el-table-column prop="handle_status" label="处理状态" :min-width="flexWidth('handle_status',crud.data,'处理状态')" />
<el-table-column prop="car_no" label="车号" :min-width="flexWidth('car_no',crud.data,'车号')" />
<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="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,'下发任务的请求参数')" />
<el-table-column prop="workshop_code" label="车间编码" :min-width="flexWidth('workshop_code',crud.data,'车间编码')" />
<el-table-column prop="ext_group_data" label="额外组盘信息" :min-width="flexWidth('ext_group_data',crud.data,'额外组盘信息')" />
<!-- <el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')" />-->
<el-table-column prop="create_time" label="创建时间" :min-width="flexWidth('create_time',crud.data,'创建时间')" />
<!-- <el-table-column prop="update_name" label="修改人" :min-width="flexWidth('update_name',crud.data,'修改人')" />-->
<el-table-column prop="update_time" label="修改时间" :min-width="flexWidth('update_time',crud.data,'修改时间')" />
<el-table-column v-permission="[]" label="操作" width="160px" align="center" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-upload"
@click="doOperate(scope.row, 'c')"
>下发</el-button>
<el-button
type="text"
icon="el-icon-success"
@click="doOperate(scope.row, 'a')"
>完成</el-button>
<el-button
type="text"
icon="el-icon-error"
@click="doOperate(scope.row, 'b')"
>取消</el-button>
</template>
</el-table-column>
</el-table>
@@ -233,7 +248,7 @@
<script>
import crudSchBaseTask from './schBaseTask'
import CRUD, {crud, form, header, presenter} from '@crud/crud'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
@@ -265,13 +280,7 @@ const defaultForm = {
workshop_code: null,
ext_group_data: null,
remark: null,
is_delete: false,
create_id: null,
create_name: null,
create_time: null,
update_id: null,
update_name: null,
update_time: null
is_delete: false
}
export default {
name: 'Task',
@@ -298,9 +307,13 @@ export default {
permission: {
},
rules: {
}
},
taskStatusList: []
}
},
created() {
this.getTaskStatusList()
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
@@ -308,6 +321,53 @@ export default {
},
hand(value) {
this.crud.toQuery()
},
handTaskStatus(value) {
this.crud.query.more_task_status = null
if (value) {
this.crud.query.more_task_status = value.toString()
}
this.crud.toQuery()
},
getTaskStatusList() {
crudSchBaseTask.getTaskStatusList().then(res => {
this.taskStatusList = res.content
})
},
getStatusName(code) {
const status = this.taskStatusList.find(item => item.code === code)
return status ? status.name : '-'
},
doOperate(row, command) {
let method_name = ''
switch (command) {
case 'a':// 完成
method_name = 'forceFinish'
break
case 'b':// 取消
method_name = 'cancel'
break
case 'c':// 下发
method_name = 'immediateNotifyAcs'
break
case 'd':// 详情
method_name = 'view'
break
}
if (method_name === 'view') {
// this.view(row)
return
}
const data = {
task_code: row.task_code,
method_name: method_name
}
crudSchBaseTask.operation(data).then(res => {
this.crud.toQuery()
this.crud.notify('操作成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(err => {
console.log(err.response.data.message)
})
}
}
}

View File

@@ -24,4 +24,19 @@ export function edit(data) {
})
}
export default { add, edit, del }
export function getTaskStatusList() {
return request({
url: 'api/schBaseTask/taskStatusList',
method: 'get'
})
}
export function operation(data) {
return request({
url: 'api/schBaseTask/operation',
method: 'put',
data
})
}
export default { add, edit, del, getTaskStatusList, operation}