25 changed files with 301 additions and 88 deletions
@ -0,0 +1,173 @@ |
|||||
|
package org.nl.wms.sch.task_manage.task.tasks.gtx; |
||||
|
|
||||
|
import cn.hutool.core.util.ObjectUtil; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.nl.common.exception.BadRequestException; |
||||
|
import org.nl.system.service.notice.ISysNoticeService; |
||||
|
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.GeneralDefinition; |
||||
|
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; |
||||
|
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.sch.task_manage.task.tasks.gtx.mapper.HCSSXMapper; |
||||
|
import org.nl.wms.util.PointUtils; |
||||
|
import org.nl.wms.util.TaskUtils; |
||||
|
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: 2024/1/11 |
||||
|
*/ |
||||
|
@Component(value = "HCSSXMLTask") |
||||
|
@TaskType("HCSSXMLTask") |
||||
|
@Slf4j |
||||
|
public class HCSSXMLTask extends AbstractTask { |
||||
|
|
||||
|
private static final String TASK_CONFIG_CODE = "HCSSXMLTask"; |
||||
|
private static final String YZ_TASK_CONFIG_CODE = "YZMLTask"; |
||||
|
@Autowired |
||||
|
private ISchBasePointService pointService; |
||||
|
@Autowired |
||||
|
private ISchBaseTaskService taskService; |
||||
|
@Autowired |
||||
|
private ISchBaseTaskconfigService taskConfigService; |
||||
|
@Autowired |
||||
|
private HCSSXMapper hcssxMapper; |
||||
|
@Autowired |
||||
|
private ISysNoticeService noticeService; |
||||
|
|
||||
|
@Override |
||||
|
public void create() throws BadRequestException { |
||||
|
// 需要找压制、双层输送线的半条任务。
|
||||
|
// 获取任务
|
||||
|
List<SchBaseTask> tasks = taskService.findApplyTasksByTaskStatus(TASK_CONFIG_CODE, YZ_TASK_CONFIG_CODE); |
||||
|
// 配置信息
|
||||
|
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
||||
|
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); |
||||
|
for (SchBaseTask task : tasks) { |
||||
|
TaskUtils.setUpdateByAcs(task); |
||||
|
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) |
||||
|
.collect(Collectors.toList()); |
||||
|
// 找终点
|
||||
|
SchBasePoint point = findNextPoint(nextRegionStr); |
||||
|
if (ObjectUtil.isEmpty(point)) { |
||||
|
task.setRemark("入窑口未找到所需点位!"); |
||||
|
taskService.updateById(task); |
||||
|
// 消息通知
|
||||
|
noticeService.createNotice(task.getTask_code() + " - " + task.getRemark(), |
||||
|
task.getConfig_code() + task.getTask_code(), |
||||
|
NoticeTypeEnum.WARN.getCode()); |
||||
|
continue; |
||||
|
} |
||||
|
// 设置终点并修改创建成功状态
|
||||
|
task.setPoint_code2(point.getPoint_code()); |
||||
|
task.setTask_status(TaskStatus.CREATED.getCode()); |
||||
|
task.setRemark(""); |
||||
|
TaskUtils.setUpdateByAcs(task); |
||||
|
taskService.updateById(task); |
||||
|
|
||||
|
point.setIng_task_code(task.getTask_code()); |
||||
|
PointUtils.setUpdateByAcs(point); |
||||
|
pointService.updateById(point); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private SchBasePoint findNextPoint(List<String> nextRegionStr) { |
||||
|
List<SchBasePoint> list = hcssxMapper.findPointForGZY(nextRegionStr); |
||||
|
return list.size() > 0 ? list.get(0) : null; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
protected void updateStatus(String task_code, TaskStatus status) { |
||||
|
// 校验任务
|
||||
|
SchBaseTask taskObj = taskService.getByCode(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()); |
||||
|
taskObj.setRemark("执行中"); |
||||
|
TaskUtils.setUpdateByAcs(taskObj); |
||||
|
taskService.updateById(taskObj); |
||||
|
} |
||||
|
if (status.equals(TaskStatus.FINISHED)) { |
||||
|
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); |
||||
|
} |
||||
|
if (status.equals(TaskStatus.CANCELED)) { |
||||
|
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void forceFinish(String task_code) { |
||||
|
SchBaseTask taskObj = taskService.getByCode(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.getByCode(task_code); |
||||
|
if (ObjectUtil.isEmpty(taskObj)) { |
||||
|
throw new BadRequestException("该任务不存在"); |
||||
|
} |
||||
|
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); |
||||
|
} |
||||
|
|
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
||||
|
String endPoint = taskObj.getPoint_code2(); |
||||
|
SchBasePoint endPointObj = pointService.selectByIdLock(endPoint); |
||||
|
if (ObjectUtil.isNotEmpty(endPointObj)) { |
||||
|
// 终点解锁
|
||||
|
endPointObj.setIng_task_code(""); |
||||
|
PointUtils.setUpdateByType(endPointObj, taskFinishedType); |
||||
|
pointService.updateById(endPointObj); |
||||
|
} |
||||
|
// 任务完成
|
||||
|
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); |
||||
|
taskObj.setRemark(GeneralDefinition.TASK_FINISH); |
||||
|
taskObj.setFinished_type(taskFinishedType.getCode()); |
||||
|
TaskUtils.setUpdateByType(taskObj, taskFinishedType); |
||||
|
taskService.updateById(taskObj); |
||||
|
} |
||||
|
|
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { |
||||
|
// 获取参数
|
||||
|
String endPoint = taskObj.getPoint_code2(); |
||||
|
SchBasePoint endPointObj = pointService.getById(endPoint); |
||||
|
// 终点解锁
|
||||
|
if (ObjectUtil.isNotEmpty(endPointObj)) { |
||||
|
endPointObj.setIng_task_code(""); |
||||
|
PointUtils.setUpdateByType(endPointObj, taskFinishedType); |
||||
|
pointService.updateById(endPointObj); |
||||
|
} |
||||
|
taskObj.setRemark(GeneralDefinition.TASK_CANCEL); |
||||
|
taskObj.setTask_status(TaskStatus.CANCELED.getCode()); |
||||
|
taskObj.setFinished_type(taskFinishedType.getCode()); |
||||
|
TaskUtils.setUpdateByType(taskObj, taskFinishedType); |
||||
|
taskService.updateById(taskObj); |
||||
|
} |
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
package org.nl.wms.sch.task_manage.task.tasks.gtx.mapper; |
||||
|
|
||||
|
import org.nl.wms.sch.point.service.dao.SchBasePoint; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @Author: lyd |
||||
|
* @Description: |
||||
|
* @Date: 2024/1/11 |
||||
|
*/ |
||||
|
public interface HCSSXMapper { |
||||
|
/** |
||||
|
* 获取干燥窑终点 |
||||
|
* @param regionCode / |
||||
|
* @return / |
||||
|
*/ |
||||
|
List<SchBasePoint> findPointForGZY(List<String> regionCode); |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
<?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.gtx.mapper.HCSSXMapper"> |
||||
|
|
||||
|
<select id="findPointForGZY" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint"> |
||||
|
SELECT |
||||
|
p.* |
||||
|
FROM |
||||
|
`sch_base_point` p |
||||
|
LEFT JOIN sch_base_point p2 ON p2.point_code = p.parent_point_code |
||||
|
WHERE p.point_type = '1' |
||||
|
AND p2.point_status = '1' |
||||
|
AND p2.is_used = true |
||||
|
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> |
Loading…
Reference in new issue