30 changed files with 1188 additions and 2428 deletions
@ -0,0 +1,235 @@ |
|||
package org.nl.wms.sch.task_manage.task.tasks; |
|||
|
|||
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.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: psh |
|||
* @Description: 空固化架入库 |
|||
* @Date: 2023/9/28 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
@TaskType("KGHJRKTask") |
|||
public class KGHJRKTask extends AbstractTask { |
|||
private static String TASK_CONFIG_CODE = "KGHJRKTask"; |
|||
/** |
|||
* 入口 |
|||
*/ |
|||
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) |
|||
public 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) |
|||
public 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); |
|||
} |
|||
} |
@ -0,0 +1,235 @@ |
|||
package org.nl.wms.sch.task_manage.task.tasks; |
|||
|
|||
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.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: psh |
|||
* @Description: 满架下料 |
|||
* @Date: 2023/9/28 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
@TaskType("MJXLTask") |
|||
public class MJXLTask extends AbstractTask { |
|||
private static String TASK_CONFIG_CODE = "MJXLTask"; |
|||
/** |
|||
* 入口 |
|||
*/ |
|||
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) |
|||
public 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) |
|||
public 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); |
|||
} |
|||
} |
@ -0,0 +1,235 @@ |
|||
package org.nl.wms.sch.task_manage.task.tasks; |
|||
|
|||
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.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: psh |
|||
* @Description: 涂板线补空架 |
|||
* @Date: 2023/9/28 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
@TaskType("TBXBKJTask") |
|||
public class TBXBKJTask extends AbstractTask { |
|||
private static String TASK_CONFIG_CODE = "TBXBKJTask"; |
|||
/** |
|||
* 入口 |
|||
*/ |
|||
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) |
|||
public 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) |
|||
public 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); |
|||
} |
|||
} |
@ -0,0 +1,235 @@ |
|||
package org.nl.wms.sch.task_manage.task.tasks; |
|||
|
|||
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.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: psh |
|||
* @Description: 销售出库 |
|||
* @Date: 2023/9/28 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
@TaskType("XSCKTask") |
|||
public class XSCKTask extends AbstractTask { |
|||
private static String TASK_CONFIG_CODE = "XSCKTask"; |
|||
/** |
|||
* 入口 |
|||
*/ |
|||
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) |
|||
public 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) |
|||
public 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); |
|||
} |
|||
} |
@ -0,0 +1,235 @@ |
|||
package org.nl.wms.sch.task_manage.task.tasks; |
|||
|
|||
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.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: psh |
|||
* @Description: 正极板转库堆叠 |
|||
* @Date: 2023/9/28 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
@TaskType("ZJBZKDDTask") |
|||
public class ZJBZKDDTask extends AbstractTask { |
|||
private static String TASK_CONFIG_CODE = "ZJBZKDDTask"; |
|||
/** |
|||
* 入口 |
|||
*/ |
|||
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) |
|||
public 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) |
|||
public 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); |
|||
} |
|||
} |
@ -1,155 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,142 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,134 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,15 +0,0 @@ |
|||
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); |
|||
} |
@ -1,45 +0,0 @@ |
|||
<?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> |
@ -1,188 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,146 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,161 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,140 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,141 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,15 +0,0 @@ |
|||
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); |
|||
} |
@ -1,32 +0,0 @@ |
|||
<?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> |
@ -1,233 +0,0 @@ |
|||
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.exception.BadRequestException; |
|||
import org.nl.system.service.notice.ISysNoticeService; |
|||
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.*; |
|||
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; |
|||
|
|||
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 混碾满料任务: 混碾机 -> 困料输送线 |
|||
*/ |
|||
@Component |
|||
@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 |
|||
private ISchBaseTaskService taskService; |
|||
@Autowired |
|||
private ISchBaseTaskconfigService taskConfigService; |
|||
@Autowired |
|||
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) { |
|||
// 校验任务
|
|||
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("该任务已取消!"); |
|||
} |
|||
|
|||
if (status.equals(TaskStatus.EXECUTING)) { // 执行中
|
|||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); |
|||
taskUtils.setUpdateByAcs(taskObj); |
|||
taskService.updateById(taskObj); |
|||
} else if (status.equals(TaskStatus.FINISHED)) { // 完成
|
|||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); |
|||
} else if (status.equals(TaskStatus.CANCELED)) { // 取消
|
|||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 具体业务 |
|||
*/ |
|||
@Override |
|||
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> 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); |
|||
// 消息通知
|
|||
noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode()); |
|||
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 |
|||
* @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)) |
|||
: 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 |
|||
public void forceFinish(String task_code) { |
|||
SchBaseTask taskObj = taskService.getById(task_code); |
|||
if (ObjectUtil.isEmpty(taskObj)) { |
|||
throw new BadRequestException("该任务不存在"); |
|||
} |
|||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); |
|||
} |
|||
|
|||
@Override |
|||
public void cancel(String task_code) { |
|||
SchBaseTask taskObj = taskService.getById(task_code); |
|||
if (ObjectUtil.isEmpty(taskObj)) { |
|||
throw new BadRequestException("该任务不存在"); |
|||
} |
|||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); |
|||
} |
|||
|
|||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
|||
// 获取参数
|
|||
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(); |
|||
SchBasePoint endPointObj = pointService.getById(endPoint); |
|||
PdmBdWorkorder workorderCode = |
|||
ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) |
|||
? workorderService.getOne(new LambdaQueryWrapper<PdmBdWorkorder>() |
|||
.eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) |
|||
: null; |
|||
// 要把数据存到组盘表
|
|||
SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); |
|||
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_weight") |
|||
: 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(endPoint); |
|||
groupEntity.setPoint_name(endPointObj.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.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_POINT.getCode()); // 有料
|
|||
pointService.update(endPointObj); |
|||
} |
|||
taskObj.setRemark("任务完成"); |
|||
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
|||
taskObj.setFinished_type(taskFinishedType.getCode()); |
|||
taskUtils.setUpdateByType(taskObj, taskFinishedType); |
|||
taskService.updateById(taskObj); |
|||
} |
|||
|
|||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
|||
// 获取参数
|
|||
String endPoint = taskObj.getPoint_code2(); // 终点
|
|||
SchBasePoint one = ObjectUtil.isNotEmpty(endPoint) |
|||
? pointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, endPoint)) |
|||
: null; |
|||
if (one != null) { |
|||
one.setIng_task_code(""); |
|||
pointService.update(one); |
|||
} |
|||
taskObj.setRemark("任务取消"); |
|||
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
|||
taskObj.setFinished_type(taskFinishedType.getCode()); |
|||
taskUtils.setUpdateByType(taskObj, taskFinishedType); |
|||
taskService.updateById(taskObj); |
|||
} |
|||
} |
@ -1,166 +0,0 @@ |
|||
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; |
|||
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.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; |
|||
import java.util.stream.Collectors; |
|||
|
|||
/** |
|||
* @Author: lyd |
|||
* @Description: 混捻缺空:呼叫空载具 |
|||
* @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; |
|||
@Autowired |
|||
private ISchBaseTaskService taskService; |
|||
@Autowired |
|||
private ISchBaseTaskconfigService taskConfigService; |
|||
@Autowired |
|||
private IPdmBdWorkorderService workorderService; |
|||
|
|||
/** |
|||
* 具体业务 |
|||
*/ |
|||
@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_status, PointStatusEnum.EMPTY_VEHICLE.getCode()) |
|||
.eq(SchBasePoint::getPoint_type, EMPTY_ZHONG) |
|||
.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(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("该任务已取消!"); |
|||
} |
|||
// 获取参数
|
|||
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); |
|||
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()); |
|||
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); |
|||
} |
|||
} |
|||
|
@ -1,16 +0,0 @@ |
|||
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); |
|||
} |
@ -1,19 +0,0 @@ |
|||
<?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> |
@ -1,4 +1,4 @@ |
|||
package org.nl.wms.sch.task_manage.task.tasks.yz.mapper; |
|||
package org.nl.wms.sch.task_manage.task.tasks.mapper; |
|||
|
|||
import com.alibaba.fastjson.JSONObject; |
|||
import org.nl.wms.sch.point.service.dao.SchBasePoint; |
@ -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.yz.mapper.YZMapper"> |
|||
<mapper namespace="org.nl.wms.sch.task_manage.task.tasks.mapper.YZMapper"> |
|||
<select id="findPointForYZQL" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint"> |
|||
SELECT |
|||
p.* |
@ -1,148 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,152 +0,0 @@ |
|||
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); |
|||
} |
|||
} |
@ -1,171 +0,0 @@ |
|||
package org.nl.wms.sch.task_manage.task.tasks.yz; |
|||
|
|||
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.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.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; |
|||
|
|||
import java.util.Arrays; |
|||
import java.util.List; |
|||
import java.util.stream.Collectors; |
|||
|
|||
/** |
|||
* @Author: lyd |
|||
* @Description: 压制缺料任务 |
|||
* @Date: 2023/5/25 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
@TaskType("YZQLTask") |
|||
public class YZQLTask extends AbstractTask { |
|||
private static String TASK_CONFIG_CODE = "YZQLTask"; |
|||
|
|||
@Autowired |
|||
private ISchBasePointService pointService; |
|||
@Autowired |
|||
private ISchBaseTaskService taskService; |
|||
@Autowired |
|||
private ISchBaseTaskconfigService taskConfigService; |
|||
@Autowired |
|||
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.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); |
|||
jsonObject.put("vehicle_type", task.getVehicle_type()); |
|||
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 : 外部参数,包含条件所需的信息 |
|||
* @return |
|||
* @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)) |
|||
: null; |
|||
Assert.notNull(workOrder, "工单不能为空!"); |
|||
// 查找混碾机工单的物料相同的位置
|
|||
List<SchBasePoint> points = yzMapper.findPointForYZQL(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 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)) { |
|||
PointUtils.clearPoint(startPointObj); |
|||
// todo: 终点暂时无设置
|
|||
} |
|||
// 任务修改成完成
|
|||
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.update(startPointObj); |
|||
} |
|||
} |
|||
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); |
|||
} |
|||
} |
@ -1,164 +0,0 @@ |
|||
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 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.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: 压制送空载具任务 x |
|||
* @Date: 2023/5/25 |
|||
*/ |
|||
@Component |
|||
@TaskType("YZSKTask") |
|||
public class YZSKTask extends AbstractTask { |
|||
private static String TASK_CONFIG_CODE = "YZSKTask"; |
|||
|
|||
@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> 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()); |
|||
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) { |
|||
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.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) |
|||
.like(vehicleType != null, SchBasePoint::getCan_vehicle_type, vehicleType) |
|||
.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 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() : ""; |
|||
// 获取外部参数
|
|||
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(""); |
|||
endPointObj.setVehicle_type(vehicleType); |
|||
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); |
|||
} |
|||
} |
@ -1,32 +0,0 @@ |
|||
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; |
|||
} |
Loading…
Reference in new issue