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

View File

@@ -190,7 +190,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Override @Override
public JSONObject applyOvenGantryTask(JSONObject param) { public JSONObject applyOvenGantryTask(JSONObject param) {
return bakingOperationService.acsRequestInHotTask(param); // return bakingOperationService.acsRequestInHotTask(param);
return bakingOperationService.acsRequestInHotTaskV2(param);
} }
@Override @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.pdm.bi.service.IpdmBiRawfoilworkorderService;
import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint; 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.nl.wms.util.PointUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -34,6 +39,10 @@ public class BakingPdaServiceImpl implements BakingPdaService {
private ISchBasePointService pointService; private ISchBasePointService pointService;
@Autowired @Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService; private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Autowired
private InHotTrussTask inHotTrussTask;
@Autowired
private ISchBaseTaskService taskService;
@Override @Override
public JSONObject bakingQuality(JSONObject param) { public JSONObject bakingQuality(JSONObject param) {
log.info("手持操作烘烤质检:{}", param); log.info("手持操作烘烤质检:{}", param);
@@ -103,17 +112,18 @@ public class BakingPdaServiceImpl implements BakingPdaService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public JSONObject doModifyRawInfos(JSONObject param) { public JSONObject doModifyRawInfos(JSONObject param) {
log.info("手持修改温度/时间 - {}", param); log.info("手持修改温度/时间 - {}", param);
// point_code, temperature, time // point_code, order_code, temperature, time
String pointCode = param.getString("point_code"); String pointCode = param.getString("point_code");
String orderCode = param.getString("order_code");
String temperature = param.getString("temperature"); String temperature = param.getString("temperature");
String rollType = param.getString("roll_type");
String isBaking = param.getString("is_baking");
String time = param.getString("time"); String time = param.getString("time");
SchBasePoint hotPoint = pointService.getById(pointCode); SchBasePoint hotPoint = pointService.getById(pointCode);
if (ObjectUtil.isEmpty(hotPoint.getSource_id())) { PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
throw new BadRequestException("点位 [" + pointCode + "] 不存在生箔工单信息!");
}
PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(hotPoint.getSource_id());
if (ObjectUtil.isEmpty(order)) { if (ObjectUtil.isEmpty(order)) {
throw new BadRequestException("生箔工单不存在!"); throw new BadRequestException("生箔工单不存在!");
} }
@@ -123,8 +133,28 @@ public class BakingPdaServiceImpl implements BakingPdaService {
.set(PdmBiRawfoilworkorder::getUpdate_optid, SecurityUtils.getCurrentUserId()) .set(PdmBiRawfoilworkorder::getUpdate_optid, SecurityUtils.getCurrentUserId())
.set(PdmBiRawfoilworkorder::getUpdate_optname, SecurityUtils.getCurrentNickName()) .set(PdmBiRawfoilworkorder::getUpdate_optname, SecurityUtils.getCurrentNickName())
.set(PdmBiRawfoilworkorder::getUpdate_time, DateUtil.now()) .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); 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(); JSONObject result = new JSONObject();
result.put("message", "操作成功!"); result.put("message", "操作成功!");
return result; return result;

View File

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

View File

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

View File

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

View File

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

View File

@@ -23,4 +23,10 @@ public interface BakingOperationService {
* @return / * @return /
*/ */
JSONObject acsRequestInHotTask(JSONObject param); 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.TaskStatus;
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; 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.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.InHotTrussTask;
import org.nl.wms.sch.task_manage.tasks.hot.OutHotToDockingTrussTask;
import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask; import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
@@ -35,9 +37,13 @@ public class BakingOperationServiceImpl implements BakingOperationService {
@Autowired @Autowired
private OutHotTrussTask outHotTrussTask; private OutHotTrussTask outHotTrussTask;
@Autowired @Autowired
private OutHotToDockingTrussTask outHotToDockingTrussTask;
@Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService; private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Autowired @Autowired
private InHotTrussTask inHotTrussTask; private InHotTrussTask inHotTrussTask;
@Autowired
private InHotDockingTrussTask inHotDockingTrussTask;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public JSONObject acsRequestOutHotTask(JSONObject param) { public JSONObject acsRequestOutHotTask(JSONObject param) {
@@ -49,16 +55,16 @@ public class BakingOperationServiceImpl implements BakingOperationService {
if (schBaseTasks.size() > 0) { if (schBaseTasks.size() > 0) {
throw new BadRequestException("点位[" + deviceCode + "]已经存在任务!"); throw new BadRequestException("点位[" + deviceCode + "]已经存在任务!");
} }
param.put("config_code", "OutHotTrussTask"); param.put("config_code", "OutHotToDockingTrussTask");
outHotTrussTask.apply(param); outHotToDockingTrussTask.apply(param);
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value()); result.put("status", HttpStatus.OK.value());
result.put("message", "任务创建成功!"); result.put("message", "任务创建成功!");
result.put("data", new JSONObject());
return result; return result;
} }
@Override @Override
@Deprecated
public JSONObject acsRequestInHotTask(JSONObject param) { public JSONObject acsRequestInHotTask(JSONObject param) {
log.info("acs请求入烘箱{}", param); log.info("acs请求入烘箱{}", param);
// 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务 // 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务
@@ -104,4 +110,52 @@ public class BakingOperationServiceImpl implements BakingOperationService {
result.put("data", new JSONObject()); result.put("data", new JSONObject());
return result; 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.common.utils.RedisUtils;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; 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.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.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.ISchBaseTaskService;
@@ -26,11 +26,10 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List; 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.checkTaskOptionStatus;
import static org.nl.wms.util.TaskUtils.setUpdateByPC; 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 * @Author: lyd
@@ -69,6 +68,8 @@ public class InHotTrussTask extends AbstractTask {
String orderCode = requestObj.getString("order_code"); String orderCode = requestObj.getString("order_code");
String flag = "0"; String flag = "0";
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode); PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
// TODO: 没有设置是否烘烤、时间、温度、不继续
if (GeneralDefinition.YES.equals(order.getIs_baking())) { if (GeneralDefinition.YES.equals(order.getIs_baking())) {
String bakingTemperature = order.getBaking_temperature(); String bakingTemperature = order.getBaking_temperature();
requestObj.put("temperature", bakingTemperature); requestObj.put("temperature", bakingTemperature);
@@ -145,6 +146,7 @@ public class InHotTrussTask extends AbstractTask {
String caching = requestObj.getString("caching"); String caching = requestObj.getString("caching");
String endPointCode = taskObj.getPoint_code2(); String endPointCode = taskObj.getPoint_code2();
SchBasePoint hotDjwPoint = pointService.getById(endPointCode); SchBasePoint hotDjwPoint = pointService.getById(endPointCode);
SchBasePoint startPoint = pointService.getById(taskObj.getPoint_code1());
StIvtHotpointivt hotpointivt = hotpointivtService.getPointByCode(endPointCode, false); StIvtHotpointivt hotpointivt = hotpointivtService.getPointByCode(endPointCode, false);
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode); PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
Assert.notNull(order, "工单不能为空!"); Assert.notNull(order, "工单不能为空!");
@@ -167,6 +169,8 @@ public class InHotTrussTask extends AbstractTask {
setHxUpdateByType(hotpointivt, taskFinishedType); setHxUpdateByType(hotpointivt, taskFinishedType);
hotpointivtService.updateById(hotpointivt); hotpointivtService.updateById(hotpointivt);
} }
// 起点清空
clearPoint(startPoint, taskFinishedType);
// 完成 // 完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode()); taskObj.setFinished_type(taskFinishedType.getCode());
@@ -175,7 +179,6 @@ public class InHotTrussTask extends AbstractTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj); 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.bi.service.IpdmBiRawfoilworkorderService;
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService; import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt; 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.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService; 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; import static org.nl.wms.sch.task_manage.core.constant.RegionConstant.REGION_A1_HXZC;
/** /**
* @Author: lyd * 创建出烘箱任务
* @Description: 创建出烘箱任务
* <p>自动创建与ACS申请公用的任务类 * <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 * @Date: 2024/8/9
*/ */
@Slf4j @Slf4j
@@ -138,7 +142,6 @@ public class OutHotTrussTask extends AbstractTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj); checkTaskOptionStatus(taskObj);
// 取消 // 取消

View File

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

View File

@@ -74,9 +74,9 @@ public class RawDownAGVTask extends AbstractTask {
SchBasePoint hxPoint = hxPoints.get(0); SchBasePoint hxPoint = hxPoints.get(0);
if ("1".equals(flag)) { 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_code1(startPointCode);
task.setPoint_code2(deviceCode + "_K"); task.setPoint_code2(deviceCode + "_K");
task.setPoint_code3(deviceCode + "_M"); task.setPoint_code3(deviceCode + "_M");

View File

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

View File

@@ -375,6 +375,11 @@
:label="$t('Point.table.vehicle_qty')" :label="$t('Point.table.vehicle_qty')"
:min-width="flexWidth('vehicle_qty',crud.data,$t('Point.table.vehicle_qty'))" :min-width="flexWidth('vehicle_qty',crud.data,$t('Point.table.vehicle_qty'))"
/> />
<el-table-column
prop="material_code"
label="物料编码"
:min-width="flexWidth('material_code', crud.data, '物料编码')"
/>
<el-table-column <el-table-column
:label="$t('Point.table.lock_type')" :label="$t('Point.table.lock_type')"
:min-width="flexWidth('lock_type',crud.data,$t('Point.table.lock_type'))" :min-width="flexWidth('lock_type',crud.data,$t('Point.table.lock_type'))"