modified: 烘烤出入烘箱的桁架任务

This commit is contained in:
2024-09-06 11:18:31 +08:00
parent d19a8d014f
commit 6cc61e1028
17 changed files with 398 additions and 86 deletions

View File

@@ -48,7 +48,7 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.outHotTaskApply(whereJson), HttpStatus.OK);
}
@PostMapping("/applyOvenGantryTask")
@Log(value = "申请烘箱任务", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@Log(value = "申请烘箱对接任务", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> applyOvenGantryTask(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.applyOvenGantryTask(whereJson), HttpStatus.OK);

View File

@@ -190,7 +190,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override
public JSONObject applyOvenGantryTask(JSONObject param) {
return bakingOperationService.acsRequestInHotTask(param);
// return bakingOperationService.acsRequestInHotTask(param);
return bakingOperationService.acsRequestInHotTaskV2(param);
}
@Override

View File

@@ -13,9 +13,14 @@ import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
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.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask;
import org.nl.wms.util.PointUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -34,6 +39,10 @@ public class BakingPdaServiceImpl implements BakingPdaService {
private ISchBasePointService pointService;
@Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Autowired
private InHotTrussTask inHotTrussTask;
@Autowired
private ISchBaseTaskService taskService;
@Override
public JSONObject bakingQuality(JSONObject param) {
log.info("手持操作烘烤质检:{}", param);
@@ -103,17 +112,18 @@ public class BakingPdaServiceImpl implements BakingPdaService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject doModifyRawInfos(JSONObject param) {
log.info("手持修改温度/时间 - {}", param);
// point_code, temperature, time
// point_code, order_code, temperature, time
String pointCode = param.getString("point_code");
String orderCode = param.getString("order_code");
String temperature = param.getString("temperature");
String rollType = param.getString("roll_type");
String isBaking = param.getString("is_baking");
String time = param.getString("time");
SchBasePoint hotPoint = pointService.getById(pointCode);
if (ObjectUtil.isEmpty(hotPoint.getSource_id())) {
throw new BadRequestException("点位 [" + pointCode + "] 不存在生箔工单信息!");
}
PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(hotPoint.getSource_id());
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
if (ObjectUtil.isEmpty(order)) {
throw new BadRequestException("生箔工单不存在!");
}
@@ -123,8 +133,28 @@ public class BakingPdaServiceImpl implements BakingPdaService {
.set(PdmBiRawfoilworkorder::getUpdate_optid, SecurityUtils.getCurrentUserId())
.set(PdmBiRawfoilworkorder::getUpdate_optname, SecurityUtils.getCurrentNickName())
.set(PdmBiRawfoilworkorder::getUpdate_time, DateUtil.now())
.eq(PdmBiRawfoilworkorder::getWorkorder_id, hotPoint.getSource_id());
.set(PdmBiRawfoilworkorder::getRoll_type, rollType)
.set(PdmBiRawfoilworkorder::getIs_baking, isBaking)
.eq(PdmBiRawfoilworkorder::getContainer_name, orderCode);
rawfoilworkorderService.update(lam);
if (!hotPoint.getMaterial_code().equals(orderCode)) {
// 点位绑定的与扫码的不一样,以扫码的数据为准, 修改点位信息。
hotPoint.setMaterial_code(order.getContainer_name());
PointUtils.setUpdateByPC(hotPoint);
pointService.updateById(hotPoint);
}
// 创建入烘箱/入暂存
log.info("开始创建桁架任务入烘箱对接位....");
List<SchBaseTask> schBaseTasks = taskService.checkHaveTask(pointCode);
if (schBaseTasks.size() > 0) {
throw new BadRequestException("该点位已经创建过任务!");
}
JSONObject taskParam = new JSONObject();
taskParam.put("order_code", orderCode);
taskParam.put("device_code", pointCode);
taskParam.put("config_code", "InHotTrussTask");
taskParam.put("create_mode", GeneralDefinition.PDA_CREATION);
inHotTrussTask.apply(taskParam);
JSONObject result = new JSONObject();
result.put("message", "操作成功!");
return result;

View File

@@ -163,62 +163,60 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject needEmptyAxisV2(JSONObject param) {
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_DOWN.getTag());
log.info("手持生箔下料: {}", param);
// point_code, order_code, is_call_empty
String pointCode = param.getString("point_code");
String orderCode = param.getString("order_code");
String isCallEmpty = param.getString("is_call_empty");
// 判断是否存在任务
List<SchBaseTask> unFinishTasks = taskService.checkHaveTask(pointCode);
// 判断是否存在对应的桁架任务
List<SchBaseTask> unFinishRelatedTasks = taskService.checkHaveRelatedTaskInRequestParam(pointCode);
if (unFinishTasks.size() > 0 || unFinishRelatedTasks.size() > 0) {
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
}
StIvtSbpointivt sbPoint = stIvtSbpointivtService.getByPointCode(pointCode, true);
if (ObjectUtil.isEmpty(sbPoint)) {
throw new BadRequestException("生箔位:" + pointCode + " 不存在,请检查是否被锁住!");
}
// todo: 通过流转卡号到ERP系统查找对应的信息最后生成工单存到LMS
// 创建工单
PdmBiRawfoilworkorder rawOrder = new PdmBiRawfoilworkorder();
rawOrder.setWorkorder_id(IdUtil.getSnowflake(1,1).nextIdStr());
rawOrder.setContainer_name(orderCode);
rawOrder.setResource_name(sbPoint.getExt_code());
rawOrder.setMfg_order_name("$$$$");
rawOrder.setProduct_name("锂电");
rawOrder.setDescription("锂电");
rawOrder.setTheory_height(BigDecimal.valueOf(2000));
rawOrder.setUp_coiler_date(DateUtil.now());
rawOrder.setStatus("01");
TaskUtils.setRawOrderCreateByDefault(rawOrder);
rawOrder.setProduct_area(sbPoint.getProduct_area());
// rawOrder.setIs_baking("1");
rawOrder.setOrder_type("1");
// rawOrder.setBaking_time("80");
// rawOrder.setRoll_type("1");
// rawOrder.setBaking_temperature("80");
rawfoilworkorderService.save(rawOrder);
// 组织请求任务参数
// 当前生箔的点位
param.put("device_code", pointCode);
param.put("workorder_id", rawOrder.getWorkorder_id());
param.put("ext_code", sbPoint.getExt_code());
param.put("vehicle_code2", sbPoint.getExt_code());
param.put("create_mode", GeneralDefinition.PDA_CREATION);
// 判断是否呼叫空辊
if (GeneralDefinition.YES.equals(isCallEmpty)) {
// 创建桁架任务之后创建AGV任务需要备注是四点任务
param.put("config_code", "RawCallRollTrussTask");
param.put("is_flag", "1");
rawCallRollTrussTask.apply(param);
} else {
// 创建AGV任务直接到烘箱的任务
param.put("config_code", "RawDownAGVTask");
param.put("is_flag", "0");
rawDownAGVTask.apply(param);
}
TaskUtils.taskLock("call-raw-down", () -> {
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_DOWN.getTag());
log.info("手持生箔下料: {}", param);
// point_code, order_code, is_call_empty
String pointCode = param.getString("point_code");
// 母卷号
String orderCode = param.getString("order_code");
String isCallEmpty = param.getString("is_call_empty");
// 判断是否存在任务
List<SchBaseTask> unFinishTasks = taskService.checkHaveTask(pointCode);
// 判断是否存在对应的桁架任务
List<SchBaseTask> unFinishRelatedTasks = taskService.checkHaveRelatedTaskInRequestParam(pointCode);
if (unFinishTasks.size() > 0 || unFinishRelatedTasks.size() > 0) {
throw new BadRequestException("点位[" + pointCode + "]已经存在任务!");
}
StIvtSbpointivt sbPoint = stIvtSbpointivtService.getByPointCode(pointCode, true);
if (ObjectUtil.isEmpty(sbPoint)) {
throw new BadRequestException("生箔位:" + pointCode + " 不存在,请检查是否被锁住!");
}
// 创建工单
PdmBiRawfoilworkorder rawOrder = new PdmBiRawfoilworkorder();
rawOrder.setWorkorder_id(IdUtil.getSnowflake(1,1).nextIdStr());
rawOrder.setContainer_name(orderCode);
rawOrder.setResource_name(sbPoint.getExt_code());
rawOrder.setMfg_order_name("$$$$");
rawOrder.setProduct_name("锂电");
rawOrder.setDescription("锂电");
rawOrder.setTheory_height(BigDecimal.valueOf(2000));
rawOrder.setUp_coiler_date(DateUtil.now());
rawOrder.setStatus("01");
TaskUtils.setRawOrderCreateByDefault(rawOrder);
rawOrder.setProduct_area(sbPoint.getProduct_area());
rawOrder.setOrder_type("1");
rawfoilworkorderService.save(rawOrder);
// 组织请求任务参数
// 当前生箔的点位
param.put("device_code", pointCode);
param.put("workorder_id", rawOrder.getWorkorder_id());
param.put("ext_code", sbPoint.getExt_code());
// param.put("vehicle_code2", sbPoint.getExt_code());
param.put("create_mode", GeneralDefinition.PDA_CREATION);
// 判断是否呼叫空辊
if (GeneralDefinition.YES.equals(isCallEmpty)) {
// 创建桁架任务之后创建AGV任务需要备注是四点任务
param.put("config_code", "RawCallRollTrussTask");
param.put("is_flag", "1");
rawCallRollTrussTask.apply(param);
} else {
// 创建AGV任务直接到烘箱的任务
param.put("config_code", "RawDownAGVTask");
param.put("is_flag", "0");
rawDownAGVTask.apply(param);
}
});
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "任务创建成功!");

View File

@@ -157,6 +157,8 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
entity.setVehicle_type("");
entity.setVehicle_code("");
entity.setVehicle_qty(0);
entity.setMaterial_code("");
entity.setSource_id("");
}
pointMapper.updateById(entity);
}

View File

@@ -201,7 +201,7 @@ public abstract class AbstractTask {
*/
public abstract void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType);
/**
* 具体完成逻辑
* 具体取消逻辑
* @param taskObj 任务数据
* @param taskFinishedType 完成枚举
*/

View File

@@ -1,8 +1,8 @@
package org.nl.wms.sch.task_manage.core.constant;
/**
* 区域常量
* @Author: lyd
* @Description: 区域常量
* @Date: 2024/9/2
*/
public interface RegionConstant {
@@ -12,7 +12,7 @@ public interface RegionConstant {
public final static String REGION_A1_FB = "A1-FB";
/** A1废箔区域 */
public final static String REGION_A1_GXK = "A1-GXK";
/** A1废箔区域 */
/** A1烘箱暂存区域 */
public final static String REGION_A1_HXZC = "A1-HXZC";
/** A1电梯区域 */
public final static String REGION_A1_LIFT_AREA = "A1-LIFT-AREA";

View File

@@ -23,4 +23,10 @@ public interface BakingOperationService {
* @return /
*/
JSONObject acsRequestInHotTask(JSONObject param);
/**
* ACS请求入烘箱
* @param param /
* @return /
*/
JSONObject acsRequestInHotTaskV2(JSONObject param);
}

View File

@@ -13,7 +13,9 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.service.BakingOperationService;
import org.nl.wms.sch.task_manage.tasks.hot.InHotDockingTrussTask;
import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask;
import org.nl.wms.sch.task_manage.tasks.hot.OutHotToDockingTrussTask;
import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
@@ -35,9 +37,13 @@ public class BakingOperationServiceImpl implements BakingOperationService {
@Autowired
private OutHotTrussTask outHotTrussTask;
@Autowired
private OutHotToDockingTrussTask outHotToDockingTrussTask;
@Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Autowired
private InHotTrussTask inHotTrussTask;
@Autowired
private InHotDockingTrussTask inHotDockingTrussTask;
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject acsRequestOutHotTask(JSONObject param) {
@@ -49,16 +55,16 @@ public class BakingOperationServiceImpl implements BakingOperationService {
if (schBaseTasks.size() > 0) {
throw new BadRequestException("点位[" + deviceCode + "]已经存在任务!");
}
param.put("config_code", "OutHotTrussTask");
outHotTrussTask.apply(param);
param.put("config_code", "OutHotToDockingTrussTask");
outHotToDockingTrussTask.apply(param);
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "任务创建成功!");
result.put("data", new JSONObject());
return result;
}
@Override
@Deprecated
public JSONObject acsRequestInHotTask(JSONObject param) {
log.info("acs请求入烘箱{}", param);
// 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务
@@ -104,4 +110,52 @@ public class BakingOperationServiceImpl implements BakingOperationService {
result.put("data", new JSONObject());
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject acsRequestInHotTaskV2(JSONObject param) {
log.info("acs请求入烘箱{}", param);
// 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务(送到烘箱对接位)
// param: task_code
String taskCode = param.getString("task_code");
Assert.notBlank(taskCode, "任务编码不能为空!");
SchBaseTask taskObj = taskService.getByCode(taskCode);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("任务不存在");
}
JSONObject taskParam = new JSONObject();
String requestParam = taskObj.getRequest_param();
JSONObject requestObj = JSONObject.parseObject(requestParam);
String orderCode = requestObj.getString("order_code");
if (ObjectUtil.isNotEmpty(orderCode)) {
rawfoilworkorderService.update(new LambdaUpdateWrapper<PdmBiRawfoilworkorder>()
.set(PdmBiRawfoilworkorder::getStatus, "04")
.eq(PdmBiRawfoilworkorder::getContainer_name, orderCode));
log.info("工单修改完毕 - 母卷号 - {}", orderCode);
}
// 烘箱对接位(生箔点位)
String hxPointCode = "";
// 获取点位
if (ObjectUtil.isEmpty(taskObj.getPoint_code3())) {
// 取满任务
hxPointCode = taskObj.getPoint_code2();
} else {
// 取满放空任务
hxPointCode = taskObj.getPoint_code4();
}
log.info("开始创建桁架任务入烘箱对接位....");
taskParam.put("order_code", orderCode);
taskParam.put("up_task_code", taskObj.getTask_code());
taskParam.put("device_code", hxPointCode);
taskParam.put("config_code", "InHotDockingTrussTask");
taskParam.put("create_mode", GeneralDefinition.ACS_CREATION);
// 满卷的收卷辊编码放在AGV任务的载具2上
// taskParam.put("vehicle_code", taskObj.getVehicle_code2());
inHotDockingTrussTask.apply(taskParam);
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "任务创建成功!");
result.put("data", new JSONObject());
return result;
}
}

View File

@@ -0,0 +1,97 @@
package org.nl.wms.sch.task_manage.tasks.hot;
import com.alibaba.fastjson.JSONObject;
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.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.core.constant.RegionConstant;
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
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.List;
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
/**
* 入烘箱对接位桁架任务类
* @Author: lyd
* @Date: 2024/9/5
*/
@Slf4j
@Component(value = "InHotDockingTrussTask")
public class InHotDockingTrussTask extends AbstractTask {
private final String THIS_CLASS = InHotDockingTrussTask.class.getName();
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Override
public void create() throws BadRequestException {
}
/**
* 起点确认,找个终点(烘箱对接位)
* @param task /
*/
@Override
public void createCompletion(SchBaseTask task) {
TaskUtils.taskLock(RegionConstant.REGION_A1_HXZC + "5", () -> {
// 找个对接位(状态是空的,没有任务的)
List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint("A1", RegionConstant.REGION_A1_HXZC,
"5", "1");
if (endPoints.size() == 0) {
throw new BadRequestException("没有可用的烘箱对接位!");
}
SchBasePoint endPoint = endPoints.get(0);
task.setPoint_code2(endPoint.getPoint_code());
// 保存任务参数
task.setHandle_class(THIS_CLASS);
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
setUpdateByPC(task);
taskService.save(task);
});
}
@Override
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
JSONObject requestObj = JSONObject.parseObject(taskObj.getRequest_param());
String orderCode = requestObj.getString("order_code");
// 点位赋值。
String endPointCode = taskObj.getPoint_code2();
SchBasePoint endPoint = pointService.getById(endPointCode);
endPoint.setPoint_status("5");
endPoint.setMaterial_code(orderCode);
PointUtils.setUpdateByType(endPoint, taskFinishedType);
pointService.updateById(endPoint);
// 完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 取消
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

View File

@@ -9,8 +9,8 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.RedisUtils;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
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;
@@ -26,11 +26,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import static org.nl.wms.sch.task_manage.core.constant.RegionConstant.REGION_A1_HXZC;
import static org.nl.wms.util.PointUtils.*;
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
import static org.nl.wms.util.PointUtils.setUpdateByType;
import static org.nl.wms.util.PointUtils.setHxUpdateByType;
import static org.nl.wms.sch.task_manage.core.constant.RegionConstant.REGION_A1_HXZC;
/**
* @Author: lyd
@@ -69,6 +68,8 @@ public class InHotTrussTask extends AbstractTask {
String orderCode = requestObj.getString("order_code");
String flag = "0";
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
// TODO: 没有设置是否烘烤、时间、温度、不继续
if (GeneralDefinition.YES.equals(order.getIs_baking())) {
String bakingTemperature = order.getBaking_temperature();
requestObj.put("temperature", bakingTemperature);
@@ -145,6 +146,7 @@ public class InHotTrussTask extends AbstractTask {
String caching = requestObj.getString("caching");
String endPointCode = taskObj.getPoint_code2();
SchBasePoint hotDjwPoint = pointService.getById(endPointCode);
SchBasePoint startPoint = pointService.getById(taskObj.getPoint_code1());
StIvtHotpointivt hotpointivt = hotpointivtService.getPointByCode(endPointCode, false);
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
Assert.notNull(order, "工单不能为空!");
@@ -167,6 +169,8 @@ public class InHotTrussTask extends AbstractTask {
setHxUpdateByType(hotpointivt, taskFinishedType);
hotpointivtService.updateById(hotpointivt);
}
// 起点清空
clearPoint(startPoint, taskFinishedType);
// 完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
@@ -175,7 +179,6 @@ public class InHotTrussTask extends AbstractTask {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 取消

View File

@@ -0,0 +1,114 @@
package org.nl.wms.sch.task_manage.tasks.hot;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
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.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.TaskStatus;
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.core.constant.RegionConstant;
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
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.List;
import static org.nl.wms.sch.task_manage.core.constant.RegionConstant.REGION_A1_HXZC;
import static org.nl.wms.util.PointUtils.hotClearPoint;
import static org.nl.wms.util.TaskUtils.*;
/**
* 出烘箱到对接位质检桁架任务
* @Author: lyd
* @Date: 2024/9/6
*/
@Slf4j
@Component("OutHotToDockingTrussTask")
public class OutHotToDockingTrussTask extends AbstractTask {
private final String THIS_CLASS = OutHotToDockingTrussTask.class.getName();
@Autowired
private ISchBasePointService pointService;
@Autowired
private IstIvtHotpointivtService hotpointivtService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Override
public void create() throws BadRequestException {
}
@Override
public void createCompletion(SchBaseTask task) {
TaskUtils.taskLock(REGION_A1_HXZC + "5", () -> {
// 从烘箱对接位中找一个空位
List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint("A1", RegionConstant.REGION_A1_HXZC,
"5", "1");
if (endPoints.size() == 0) {
throw new BadRequestException("没有可用的烘箱对接位!");
}
// 烘箱起点位置
StIvtHotpointivt hotPoint = hotpointivtService.getPointByCode(task.getPoint_code1(), false);
SchBasePoint endPoint = endPoints.get(0);
String requestParam = task.getRequest_param();
JSONObject requestObj = JSONObject.parseObject(requestParam);
requestObj.put("workorder_id", hotPoint.getWorkorder_id());
task.setPoint_code2(endPoint.getPoint_code());
task.setRequest_param(JSONObject.toJSONString(requestObj));
// 保存任务参数
task.setHandle_class(THIS_CLASS);
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
setUpdateByPC(task);
taskService.save(task);
});
}
@Override
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
JSONObject request = JSONObject.parseObject(taskObj.getRequest_param());
String startPointCode = taskObj.getPoint_code1();
String endPointCode = taskObj.getPoint_code2();
StIvtHotpointivt startPoint = hotpointivtService.getPointByCode(startPointCode, false);
// 起点清空
hotClearPoint(startPoint, taskFinishedType);
// 终点赋值
PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(request.getString("workorder_id"));
SchBasePoint endPoint = pointService.getById(endPointCode);
// 终点设置值
endPoint.setMaterial_code(order.getContainer_name());
endPoint.setSource_id(request.getString("workorder_id"));
endPoint.setPoint_status("3");
PointUtils.setUpdateByType(endPoint, taskFinishedType);
pointService.updateById(endPoint);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
@Override
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 取消
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setFinished_type(taskFinishedType.getCode());
setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}

View File

@@ -9,6 +9,7 @@ import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
import org.nl.wms.quartz.AutoCreateOutHotTask;
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;
@@ -32,9 +33,12 @@ import static org.nl.wms.util.TaskUtils.setUpdateByType;
import static org.nl.wms.sch.task_manage.core.constant.RegionConstant.REGION_A1_HXZC;
/**
* @Author: lyd
* @Description: 创建出烘箱任务
* 创建出烘箱任务
* <p>自动创建与ACS申请公用的任务类
* <p>以下两个类进行调用</p>
* @see org.nl.wms.sch.task_manage.service.impl.BakingOperationServiceImpl#acsRequestOutHotTask(JSONObject)
* @see AutoCreateOutHotTask#run()
* @Author: lyd
* @Date: 2024/8/9
*/
@Slf4j
@@ -138,7 +142,6 @@ public class OutHotTrussTask extends AbstractTask {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 取消

View File

@@ -77,7 +77,7 @@ public class RawCallRollTrussTask extends AbstractTask {
task.setPoint_code1(startPoint.getPoint_code());
task.setPoint_code2(endPoint.getPoint_code());
// 收卷辊库里的载具编码
task.setVehicle_code(startPoint.getVehicle_code());
// task.setVehicle_code(startPoint.getVehicle_code());
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
setUpdateByPC(task);
taskService.save(task);
@@ -90,7 +90,6 @@ public class RawCallRollTrussTask extends AbstractTask {
checkTaskOptionStatus(taskObj);
// 完成任务1、清空起点数据2、创建AGV任务
JSONObject taskParam = new JSONObject();
// 获取参数
String requestParam = taskObj.getRequest_param();
// 其中device_code代表AGV的终点生箔点位
JSONObject requestObj = JSONObject.parseObject(requestParam);
@@ -116,7 +115,7 @@ public class RawCallRollTrussTask extends AbstractTask {
}
log.info("桁架任务完毕,开始创建 [{}] 的AGV任务", endAgvPoint);
// 收卷辊库里的载具编码
taskParam.put("vehicle_code", taskObj.getVehicle_code());
// taskParam.put("vehicle_code", taskObj.getVehicle_code());
taskParam.put("device_code", endAgvPoint);
taskParam.put("is_flag", flag);
taskParam.put("order_code", requestObj.getString("order_code"));

View File

@@ -74,9 +74,9 @@ public class RawDownAGVTask extends AbstractTask {
SchBasePoint hxPoint = hxPoints.get(0);
if ("1".equals(flag)) {
// 创建四点任务:先去收卷辊出口在到生箔位,在从生箔到烘箱对接位
StIvtSbpointivt pointCode = sbpointivtService.getByPointCode(deviceCode, false);
// StIvtSbpointivt pointCode = sbpointivtService.getByPointCode(deviceCode, false);
// 标记一下是哪个生箔机的收卷辊
task.setVehicle_code2(pointCode.getExt_code());
// task.setVehicle_code2(pointCode.getExt_code());
task.setPoint_code1(startPointCode);
task.setPoint_code2(deviceCode + "_K");
task.setPoint_code3(deviceCode + "_M");

View File

@@ -40,13 +40,13 @@ public class TaskUtils {
/**
* 创建任务
* @param region 区域编码
* @param code 锁编码
* @param function
*/
@SneakyThrows
public static void taskLock(String region, Runnable function){
public static void taskLock(String code, Runnable function){
RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
RLock lock = redissonClient.getLock(region);
RLock lock = redissonClient.getLock(code);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {