add: 技改

This commit is contained in:
ls
2025-11-30 09:05:40 +08:00
parent 5e3f30363f
commit 4c03ae35ad
19 changed files with 296 additions and 86 deletions

View File

@@ -1630,7 +1630,9 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
}
} else if (device.getDeviceDriver() instanceof ManipulatorAgvStationDeviceDriver) {
manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) device.getDeviceDriver();
List<String> linkDeviceCodes = manipulatorAgvStationDeviceDriver.getExtraDeviceCodes("link_device_code");
String linkDeviceCode = linkDeviceCodes.get(0);
Device linkDevice = deviceAppService.findDeviceByCode(linkDeviceCode);
//申请烘箱行架任务
if (ObjectUtil.isNotEmpty(manipulatorAgvStationDeviceDriver.getDevice().getExtraValue().get("request_robot_task"))
@@ -1658,6 +1660,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic
manipulatorAgvStationDeviceDriver.setOvenGantryTask(true);
manipulatorAgvStationDeviceDriver.writing(4);
}else {
// 失败的话将报错信息显示到大屏
if (linkDevice.getDeviceDriver() instanceof OvenGantryManipulatorDeviceDriver) {
OvenGantryManipulatorDeviceDriver ovenGantryManipulatorDeviceDriver;
ovenGantryManipulatorDeviceDriver = (OvenGantryManipulatorDeviceDriver) linkDevice.getDeviceDriver();
ovenGantryManipulatorDeviceDriver.setNotCreateInstMessage(jo.toString());
}
}
}

View File

@@ -143,7 +143,7 @@ public class HongXiangConveyorDeviceDriver extends AbstractOpcDeviceDriver imple
@Override
public void execute() {
device_code
= this.getDeviceCode();
= this.getDeviceCode();
heartbeat = this.itemProtocol.getItem_heartbeat();
mode = this.itemProtocol.getItem_mode();
move = this.itemProtocol.getItem_move();
@@ -185,6 +185,9 @@ public class HongXiangConveyorDeviceDriver extends AbstractOpcDeviceDriver imple
dto.setError_info(ErrorUtil.getDictDetail("hx_error_type", String.valueOf(error)));
deviceErrorLogService.create(dto);
}
} else if (error != 0 || error1 != 0) {
this.setIserror(true);
message = "有报警";
}
if (finish != last_finish) {
if (finish == 1) {
@@ -283,7 +286,7 @@ public class HongXiangConveyorDeviceDriver extends AbstractOpcDeviceDriver imple
public void writing(int command) {
String to_command = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code()
+ "." ;
+ ".";
//String opcservcerid = this.getDevice().getOpc_server_id();
//Server server = ReadUtil.getServer(opcservcerid);
Map<String, Object> itemMap = new HashMap<String, Object>();
@@ -433,6 +436,13 @@ public class HongXiangConveyorDeviceDriver extends AbstractOpcDeviceDriver imple
if (error == 0 && iserror) {
message = LangProcess.msg("universal_message11");
}
if(this.getError() != 0){
map.put("error", "error有报警,请检查烘箱!");
}
if (this.getError1() != 0){
map.put("error", "error1有报警,请检查烘箱!");
}
String door = "关门状态";
if (this.door == 1) {
door = "开门状态";

View File

@@ -478,7 +478,7 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
return false;
}
// 判断相邻烘箱是否有货有异常
// if (filterNeighbors(startdevice)) return false;
if (filterNeighbors(startdevice)) return false;
}
if (nextdevice.getDeviceDriver() instanceof HongXiangConveyorDeviceDriver) {
@@ -488,7 +488,7 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
return false;
}
// 判断相邻烘箱是否有货有异常
// if (filterNeighbors(nextdevice)) return false;
if (filterNeighbors(nextdevice)) return false;
}
@@ -647,7 +647,7 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
Device deviceByAddress = deviceAppService.findDeviceByAddress(neighbor);
hongXiangConveyorDeviceDriverNeighbor = (HongXiangConveyorDeviceDriver) deviceByAddress.getDeviceDriver();
if (hongXiangConveyorDeviceDriverNeighbor.getMode() == 0 || hongXiangConveyorDeviceDriverNeighbor.getMove() == 0 || hongXiangConveyorDeviceDriverNeighbor.getError() != 0 || hongXiangConveyorDeviceDriverNeighbor.getError1() != 0) {
notCreateInstMessage = "就绪任务未创建指令原因->-烘箱:" + hongXiangConveyorDeviceDriverNeighbor.getDevice_code() + "光电无货,无法生成指令!" + hongXiangConveyorDeviceDriverNeighbor.getError() + "异常" + +hongXiangConveyorDeviceDriverNeighbor.getError1() + "异常,无法生成指令!";
notCreateInstMessage = "就绪任务未创建指令原因->-相邻光电异常烘箱:" + hongXiangConveyorDeviceDriverNeighbor.getDevice_code() + "光电无货,无法生成指令!" + hongXiangConveyorDeviceDriverNeighbor.getError() + "异常" + +hongXiangConveyorDeviceDriverNeighbor.getError1() + "异常,无法生成指令!";
return true;
}

View File

@@ -1038,13 +1038,20 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
//5、输送任务
//6、行架
//7、立库
if (StrUtil.equals(task_type, CommonFinalParam.ONE)) {
instdto.setAgv_inst_type(CommonFinalParam.ONE);
if (StrUtil.equals(task_type, CommonFinalParam.ONE) ) {
//生箔四个点任务是生箔agv两个点是普通任务
if (StrUtil.isNotEmpty(instdto.getStart_device_code2())) {
instdto.setAgv_inst_type(CommonFinalParam.ONE);
instdto.setCarno("1");
}else {
instdto.setAgv_inst_type("2");
}
} else if (StrUtil.equals(task_type, "3")) {
instdto.setAgv_inst_type("2");
} else if (StrUtil.equals(task_type, "2")) {
}else if (StrUtil.equals(task_type, "2")) {
instdto.setAgv_inst_type("3");
} else if (StrUtil.equals(task_type, "8")) {
}else if (StrUtil.equals(task_type, "8")) {
instdto.setAgv_inst_type("2");
} else {
log.info("未找到对应的AGV指令类型任务号:" + acsTask.getTask_code() + ",task_type:" + acsTask.getTask_type());

View File

@@ -17,6 +17,7 @@ public enum PointStatusEnum {
* 待烘烤
*/
HOT_POINT("5", "待烘烤"),
/**
* 待质检
*/

View File

@@ -156,6 +156,7 @@ public class BakingPdaServiceImpl implements BakingPdaService {
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject doModifyRawInfos(JSONObject param) {
//温度、大小卷、时间
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_INFO_UPDATE.getTag());
log.info("手持修改温度/时间 - {}", param);
// point_code, order_code, temperature, time

View File

@@ -3,6 +3,7 @@ package org.nl.wms.pda.mps.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -22,6 +23,7 @@ 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.core.constant.RegionConstant;
import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask;
import org.nl.wms.sch.task_manage.tasks.raw.RawCallRollTrussTask;
import org.nl.wms.sch.task_manage.tasks.raw.RawDownAGVTask;
import org.nl.wms.sch.task_manage.tasks.slitter.SlitterSendRollAGVTask;
@@ -35,6 +37,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import static org.nl.wms.sch.task_manage.core.constant.hot.HotConstant.*;
import static org.nl.wms.util.TaskUtils.createVirtualContainer;
@@ -64,6 +68,9 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
@Autowired
private ISchBasePointService pointService;
@Autowired
private InHotTrussTask inHotTrussTask;
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject needEmptyVehicle(JSONObject param) {
@@ -176,15 +183,20 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
TaskUtils.taskLock("call-raw-down", () -> {
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_DOWN.getTag());
log.info("手持生箔下料: {}", param);
String temperature = param.getString("temperature");
if (!isValidInteger(temperature)) {
throw new BadRequestException("温度请输入整数!");
}
// point_code, order_code, is_call_empty
String pointCode = param.getString("point_code");
// 母卷号
String orderCode = param.getString("order_code");
// 收卷辊编码
String rollCode = param.getString("roll_code");
// 大小卷
String rollType = param.getString("roll_type");
String isCallEmpty = param.getString("is_call_empty");
String theory_height = param.getString("theory_height");
String productin_qty = param.getString("productin_qty");
String time = param.getString("time");
// 判断是否存在任务
List<SchBaseTask> unFinishTasks = taskService.checkHaveTask(pointCode);
// 判断是否存在对应的桁架任务
@@ -197,21 +209,34 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
throw new BadRequestException("生箔位:" + pointCode + " 不存在,请检查是否被锁住!");
}
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
// 找对接位(状态是空的,没有任务的) 如果只有一个位置不能下生箔agv任务
List<SchBasePoint> points = pointService.getHotNotTaskPoint2(RegionConstant.A1, RegionConstant.REGION_A1_HXZC,
POINT_TYPE_HOT_DOCKING, POINT_STATUS_EMPTY,"1");
if (points.size()<2){
throw new BadRequestException("对接位已有两个被占用,请尽快处理");
if (StrUtil.isEmpty(temperature) || StrUtil.isEmpty(time)){
//找对接位位置
setDjw(param);
} else {
// 找烘箱位置
String stIvtHotpointivt = inHotTrussTask.getStIvtHotpointivt(rollType, temperature);
if (StrUtil.isNotEmpty(stIvtHotpointivt)) {
param.put("put_code", stIvtHotpointivt);
} else {
//找对接位位置
setDjw(param);
}
}
// 锁定位置设置为待绑定
SchBasePoint schBasePoint = points.get(0);
schBasePoint.setPoint_status(POINT_STATUS_BINDING);
pointService.updateById(schBasePoint);
// SchBasePoint schBasePoint = points.get(0);
// schBasePoint.setPoint_status(POINT_STATUS_BINDING);
// pointService.updateById(schBasePoint);
if (ObjectUtil.isNotEmpty(order)) {
order.setTheory_height(new BigDecimal(theory_height));
order.setProductin_qty(new BigDecimal(productin_qty));
if (StrUtil.isNotEmpty(theory_height)) {
order.setTheory_height(new BigDecimal(theory_height));
}
if (StrUtil.isNotEmpty(productin_qty)) {
order.setProductin_qty(new BigDecimal(productin_qty));
}
order.setUp_coiler_date(DateUtil.now());
order.setBaking_temperature(temperature);
order.setBaking_time(time);
order.setRoll_type(rollType);
rawfoilworkorderService.updateById(order);
param.put("order_code", order.getContainer_name());
param.put("workorder_id", order.getWorkorder_id());
@@ -219,16 +244,23 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
// todo: 暂时写死,创建工单
PdmBiRawfoilworkorder rawOrder = new PdmBiRawfoilworkorder();
rawOrder.setWorkorder_id(IdUtil.getSnowflake(1, 1).nextIdStr());
rawOrder.setContainer_name(ObjectUtil.isNotEmpty(orderCode) ? orderCode : createVirtualContainer(rollCode, "yyMMddHHmmss", sbPoint.getExt_code()));
rawOrder.setContainer_name(ObjectUtil.isNotEmpty(orderCode) ? orderCode : createVirtualContainer("1", "yyMMddHHmmss", sbPoint.getExt_code()));
rawOrder.setResource_name(sbPoint.getExt_code());
rawOrder.setMfg_order_name("$$$$");
rawOrder.setProduct_name("锂电");
rawOrder.setDescription("锂电");
rawOrder.setTheory_height(new BigDecimal(theory_height));
rawOrder.setProductin_qty(new BigDecimal(productin_qty));
if (StrUtil.isNotEmpty(theory_height)) {
order.setTheory_height(new BigDecimal(theory_height));
}
if (StrUtil.isNotEmpty(productin_qty)) {
order.setProductin_qty(new BigDecimal(productin_qty));
}
rawOrder.setUp_coiler_date(DateUtil.now());
rawOrder.setStatus("01");
rawOrder.setWind_roll(rollCode);
rawOrder.setWind_roll("roll");
rawOrder.setBaking_temperature(temperature);
rawOrder.setBaking_time(time);
rawOrder.setRoll_type(rollType);
TaskUtils.setRawOrderCreateByDefault(rawOrder);
rawOrder.setProduct_area(sbPoint.getProduct_area());
rawOrder.setOrder_type("1");
@@ -240,7 +272,6 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
// 当前生箔的点位
param.put("device_code", pointCode);
param.put("ext_code", sbPoint.getExt_code());
param.put("vehicle_code2", rollCode);
param.put("create_mode", GeneralDefinition.PDA_CREATION);
// 判断是否呼叫空辊
if (GeneralDefinition.YES.equals(isCallEmpty)) {
@@ -262,6 +293,21 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
return result;
}
private void setDjw(JSONObject param) {
// 找对接位(状态是空的,没有任务的) 如果只有一个位置不能下生箔agv任务
List<SchBasePoint> points = pointService.getHotNotTaskPoint2(RegionConstant.A1, RegionConstant.REGION_A1_HXZC,
POINT_TYPE_RAW_DOCKING, POINT_STATUS_EMPTY, "1");
if (points.isEmpty()) {
throw new BadRequestException("烘箱无位置生箔对接位有货请给生箔agv让出一个位置");
}
param.put("put_code", points.get(0).getPoint_code());
}
public boolean isValidInteger(String input) {
String regex = "^[+-]?\\d+$";
return input.matches(regex);
}
@Override
public JSONObject confirmBlanking(JSONObject param) {
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_READY.getTag());

View File

@@ -18,5 +18,6 @@
FROM st_ivt_hotpointivt p
LEFT JOIN pdm_bi_rawfoilworkorder w ON w.workorder_id = p.workorder_id
WHERE p.point_status = '04';
ORDER BY zc_point;
</select>
</mapper>

View File

@@ -101,6 +101,9 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
List<SchBasePoint> getHotNotTaskPoint2(String area, String region, String pointType, String pointStatus,String lockType);
/**
* 从点位查找以下条件可用的没任务点位
* @param area 生产区域

View File

@@ -38,6 +38,8 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
List<SchBasePoint> getHotNotTaskPoint2(String area, String region, String pointType, String pointStatus,String lockType);
List<SchBasePoint> getAllBusinessNotTaskPoint(String area, String region, String pointType, String pointStatus,
String vehicleType, String vehicleCode);

View File

@@ -56,6 +56,9 @@
AND (t.point_code1 = p.point_code OR t.point_code2 = p.point_code OR t.point_code4 = p.point_code))
</select>
<select id="getAllBusinessNotTaskPoint" resultType="org.nl.wms.sch.point.service.dao.SchBasePoint">
SELECT p.*
FROM sch_base_point p

View File

@@ -277,6 +277,8 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
return pointMapper.getHotNotTaskPoint2(area, region, pointType, pointStatus,lockType);
}
@Override
public List<SchBasePoint> getAllBusinessNotTaskPoint(String area, String region, String pointType,
String pointStatus, String vehicleType, String vehicleCode) {

View File

@@ -10,11 +10,19 @@ public class HotConstant {
public final static String POINT_TYPE_EMPTY = "1";
/** 点位类型:烘箱对接位 */
public final static String POINT_TYPE_HOT_DOCKING = "5";
/** 点位类型:烘烤完毕位 */
public final static String POINT_TYPE_HOT_FINISH = "4";
/** 点位状态:空位 */
public final static String POINT_STATUS_EMPTY = "1";
/** 点位状态:待质检 */
public final static String POINT_STATUS_WAIT_QUALITY = "3";
/** 点位类型:烘箱生箔对接位 */
public final static String POINT_TYPE_RAW_DOCKING = "6";
/** 点位状态:待分切 */
public final static String POINT_STATUS_WAIT_CUT = "4";
/** 点位类型:烘箱对接位 */
public final static String POINT_STATUS_BINDING = "5";
/** 烘箱点位(非对接位)状态 -空位 */

View File

@@ -4,8 +4,10 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import dm.jdbc.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.StringUtils;
import org.nl.config.lucene.TagNameEnum;
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
@@ -138,6 +140,10 @@ public class BakingOperationServiceImpl implements BakingOperationService {
String requestParam = taskObj.getRequest_param();
JSONObject requestObj = JSONObject.parseObject(requestParam);
String orderCode = requestObj.getString("order_code");
String putCode = requestObj.getString("put_code");
if (StringUtil.isEmpty(putCode)){
throw new BadRequestException("终点不能为空");
}
if (ObjectUtil.isNotEmpty(orderCode)) {
rawfoilworkorderService.update(new LambdaUpdateWrapper<PdmBiRawfoilworkorder>()
.set(PdmBiRawfoilworkorder::getStatus, "04")
@@ -158,6 +164,7 @@ public class BakingOperationServiceImpl implements BakingOperationService {
taskParam.put("order_code", orderCode);
taskParam.put("up_task_code", taskObj.getTask_code());
taskParam.put("device_code", hxPointCode);
taskParam.put("put_code", putCode);
taskParam.put("config_code", "InHotDockingTrussTask");
taskParam.put("create_mode", GeneralDefinition.ACS_CREATION);
// 满卷的收卷辊编码放在AGV任务的载具2上

View File

@@ -1,8 +1,15 @@
package org.nl.wms.sch.task_manage.tasks.hot;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
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;
@@ -11,6 +18,7 @@ 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.PointStatusEnum;
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
import org.nl.wms.util.PointUtils;
import org.nl.wms.util.TaskUtils;
@@ -20,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import static org.nl.wms.util.PointUtils.setHxUpdateByType;
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
import static org.nl.wms.sch.task_manage.core.constant.hot.HotConstant.*;
@@ -37,6 +46,11 @@ public class InHotDockingTrussTask extends AbstractTask {
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Autowired
private IstIvtHotpointivtService hotpointivtService;
@Override
public void create() throws BadRequestException {
@@ -50,13 +64,15 @@ public class InHotDockingTrussTask extends AbstractTask {
public void createCompletion(SchBaseTask task) {
TaskUtils.taskLock(RegionConstant.REGION_A1_HXZC + "5", () -> {
// 找个对接位(状态是空的,没有任务的)
List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint2(RegionConstant.A1, RegionConstant.REGION_A1_HXZC,
POINT_TYPE_HOT_DOCKING, POINT_STATUS_BINDING,"1");
if (endPoints.size() == 0) {
throw new BadRequestException("没有可用的烘箱对接位!");
}
SchBasePoint endPoint = endPoints.get(0);
task.setPoint_code2(endPoint.getPoint_code());
// List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint2(RegionConstant.A1, RegionConstant.REGION_A1_HXZC,
// POINT_TYPE_HOT_DOCKING, POINT_STATUS_BINDING,"1");
// if (endPoints.size() == 0) {
// throw new BadRequestException("没有可用的烘箱对接位!");
// }
String requestParam = task.getRequest_param();
JSONObject requestObj = JSONObject.parseObject(requestParam);
String putCode = requestObj.getString("put_code");
task.setPoint_code2(putCode);
// 保存任务参数
task.setHandle_class(THIS_CLASS);
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
@@ -74,12 +90,34 @@ public class InHotDockingTrussTask extends AbstractTask {
// 点位赋值。
String endPointCode = taskObj.getPoint_code2();
SchBasePoint endPoint = pointService.getById(endPointCode);
endPoint.setMaterial_code(orderCode);
endPoint.setVehicle_code(taskObj.getVehicle_code());
//添加入库锁
endPoint.setLock_type("2");
PointUtils.setUpdateByType(endPoint, taskFinishedType);
pointService.updateById(endPoint);
//终点为对接位或者烘箱
if (ObjectUtil.isNotEmpty(endPoint)){
endPoint.setMaterial_code(orderCode);
endPoint.setVehicle_code(taskObj.getVehicle_code());
//添加入库锁
endPoint.setLock_type("2");
endPoint.setPoint_status(PointStatusEnum.WAIT_BIND.getCode());
PointUtils.setUpdateByType(endPoint, taskFinishedType);
pointService.updateById(endPoint);
} else {
StIvtHotpointivt hotpointivt = hotpointivtService.getPointByCode(endPointCode, false);
PdmBiRawfoilworkorder order = rawfoilworkorderService.getByContainerName(orderCode);
Assert.notNull(order, "工单不能为空!");
if (ObjectUtil.isNotEmpty(hotpointivt)) {
// 如果是烘箱位, 需要判断是做为暂存还是说进行暂存则状态为03暂存中
hotpointivt.setContainer_name(order.getContainer_name());
hotpointivt.setWorkorder_id(order.getWorkorder_id());
hotpointivt.setInstorage_time(DateUtil.now());
hotpointivt.setFull_vehicle_code(taskObj.getVehicle_code());
// 02烘烤中
hotpointivt.setPoint_status("02");
// todo: 更新温度和倒计时
setHxUpdateByType(hotpointivt, taskFinishedType);
hotpointivtService.updateById(hotpointivt);
}
}
// 完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());

View File

@@ -93,24 +93,7 @@ public class InHotTrussTask extends AbstractTask {
requestObj.put("baking_temperature", bakingTemperature);
requestObj.put("baking_time", order.getBaking_time());
// 如果需要烘烤, 先找对应点
List<StIvtHotpointivt> hotList = hotpointivtService.getNotTaskHotOven(order.getRoll_type(), "1","01");
if (hotList.size() > 0) {
List<StIvtHotpointivt> hotListFilter = multiFilter(hotList);
// 查找合适温度的点位
for (StIvtHotpointivt hotPoint : hotListFilter) {
String pointCode = hotPoint.getPoint_code();
String pointTemperature = (String) redisUtils.hget(pointCode, "temperature");
if (ObjectUtil.isNotEmpty(pointTemperature)) {
if (pointTemperature.equals(bakingTemperature)) {
task.setPoint_code2(pointCode);
break;
}
}
// 临时测试
// task.setPoint_code2(hotPoint.getPoint_code());
}
}
List<StIvtHotpointivt> hotList = getStIvtHotpointivts(task, order, bakingTemperature);
// 没有烘烤位置或者没有找到对应的点就区待烘烤区, 就去待烘烤
if (hotList.size() == 0 || ObjectUtil.isEmpty(task.getPoint_code2())) {
// 找不到就去找暂存区(待烘烤区)
@@ -175,6 +158,51 @@ public class InHotTrussTask extends AbstractTask {
taskService.save(task);
}
private List<StIvtHotpointivt> getStIvtHotpointivts(SchBaseTask task, PdmBiRawfoilworkorder order, String bakingTemperature) {
List<StIvtHotpointivt> hotList = hotpointivtService.getNotTaskHotOven(order.getRoll_type(), "1","01");
if (hotList.size() > 0) {
List<StIvtHotpointivt> hotListFilter = multiFilter(hotList);
// 查找合适温度的点位
for (StIvtHotpointivt hotPoint : hotListFilter) {
String pointCode = hotPoint.getPoint_code();
String pointTemperature = (String) redisUtils.hget(pointCode, "temperature");
if (ObjectUtil.isNotEmpty(pointTemperature)) {
if (pointTemperature.equals(bakingTemperature)) {
task.setPoint_code2(pointCode);
break;
}
}
}
}
return hotList;
}
/**
* 获取烘箱点位
*
* @return
*/
public String getStIvtHotpointivt(String rollType, String bakingTemperature) {
String poitnt = "";
List<StIvtHotpointivt> hotList = hotpointivtService.getNotTaskHotOven(rollType, "1","01");
if (hotList.size() > 0) {
List<StIvtHotpointivt> hotListFilter = multiFilter(hotList);
// 查找合适温度的点位
for (StIvtHotpointivt hotPoint : hotListFilter) {
String pointCode = hotPoint.getPoint_code();
String pointTemperature = (String) redisUtils.hget(pointCode, "temperature");
if (ObjectUtil.isNotEmpty(pointTemperature)) {
if (pointTemperature.equals(bakingTemperature)) {
poitnt = pointCode;
break;
}
}
}
}
return poitnt;
}
private List<StIvtHotpointivt> multiFilter(List<StIvtHotpointivt> hotList) {
// 根据烘箱分组
Map<String, List<StIvtHotpointivt>> stIvtHotListMap = hotList.stream().collect(Collectors.groupingBy(StIvtHotpointivt::getGroup_name));

View File

@@ -31,6 +31,7 @@ import static org.nl.wms.sch.task_manage.core.constant.hot.HotConstant.*;
/**
* 出烘箱到对接位质检桁架任务
*
* @Author: lyd
* @Date: 2024/9/6
*/
@@ -46,6 +47,7 @@ public class OutHotToDockingTrussTask extends AbstractTask {
private ISchBaseTaskService taskService;
@Autowired
private IpdmBiRawfoilworkorderService rawfoilworkorderService;
@Override
public void create() throws BadRequestException {
@@ -54,15 +56,28 @@ public class OutHotToDockingTrussTask extends AbstractTask {
@Override
public void createCompletion(SchBaseTask task) {
TaskUtils.taskLock(REGION_A1_HXZC + "5", () -> {
// 从烘箱对接位中找一个空位
List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint2(RegionConstant.A1, RegionConstant.REGION_A1_HXZC,
POINT_TYPE_HOT_DOCKING, POINT_STATUS_EMPTY,"1");
if (endPoints.size() == 0) {
String region = RegionConstant.A1;
String station = RegionConstant.REGION_A1_HXZC;
String status = POINT_STATUS_EMPTY;
String version = "1";
// 需要尝试的点位类型(按优先级排序:先找缓存架,再找对接位)
String[] pointTypes = {POINT_TYPE_HOT_FINISH, POINT_TYPE_HOT_DOCKING};
SchBasePoint endPoint = null;
for (String pointType : pointTypes) {
// 调用服务获取对应类型的空位
List<SchBasePoint> points = pointService.getHotNotTaskPoint2(region, station, pointType, status, version);
if (!points.isEmpty()) { // 找到非空集合,取第一个元素并退出循环
endPoint = points.get(0);
break;
}
}
// 两个类型都未找到可用点位,抛出异常
if (endPoint == null) {
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());
@@ -93,7 +108,12 @@ public class OutHotToDockingTrussTask extends AbstractTask {
endPoint.setMaterial_code(order.getContainer_name());
endPoint.setVehicle_code(order.getWind_roll());
endPoint.setSource_id(request.getString("workorder_id"));
endPoint.setPoint_status(POINT_STATUS_WAIT_QUALITY);
if (POINT_TYPE_HOT_DOCKING.equals(endPoint.getPoint_type())) {
endPoint.setPoint_status(POINT_STATUS_WAIT_QUALITY);
}
if (POINT_TYPE_HOT_FINISH.equals(endPoint.getPoint_type())) {
endPoint.setPoint_status(POINT_STATUS_WAIT_CUT);
}
PointUtils.setUpdateByType(endPoint, taskFinishedType);
pointService.updateById(endPoint);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());

View File

@@ -1,9 +1,15 @@
package org.nl.wms.sch.task_manage.tasks.raw;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
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.pdm.ivt.raw.service.IstIvtSbpointivtService;
import org.nl.wms.pdm.ivt.raw.service.dao.StIvtSbpointivt;
import org.nl.wms.sch.point.service.ISchBasePointService;
@@ -22,7 +28,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import static org.nl.wms.util.PointUtils.clearPoint;
import static org.nl.wms.sch.task_manage.core.constant.hot.HotConstant.*;
import static org.nl.wms.sch.task_manage.core.constant.hot.HotConstant.POINT_STATUS_WAIT_CUT;
import static org.nl.wms.util.PointUtils.*;
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
@@ -50,6 +58,7 @@ public class RawCallRollTrussTask extends AbstractTask {
private RawDownAGVTask rawDownAGVTask;
@Resource
private IstIvtSbpointivtService stIvtSbpointivtService;
@Override
public void create() throws BadRequestException {
}
@@ -87,28 +96,14 @@ public class RawCallRollTrussTask extends AbstractTask {
setUpdateByPC(task);
taskService.save(task);
log.info("任务创建成功:{}", task);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 完成任务1、清空起点数据2、创建AGV任务
JSONObject taskParam = new JSONObject();
String requestParam = taskObj.getRequest_param();
String requestParam = task.getRequest_param();
// 其中device_code代表AGV的终点生箔点位
JSONObject requestObj = JSONObject.parseObject(requestParam);
String endAgvPoint = requestObj.getString("device_code");
String flag = requestObj.getString("is_flag");
// 1、清空起点数据
String startPoint = taskObj.getPoint_code1();
SchBasePoint startPointObj = pointService.getById(startPoint);
// 设置载具类型、点位状态、释放点位
if (ObjectUtil.isNotEmpty(startPointObj)) {
// 起点清空
clearPoint(startPointObj, taskFinishedType);
}
log.info("点位清除完毕,清除后的数据:{}", startPointObj);
String putCode = requestObj.getString("put_code");
if (NOT_AGV_TASK_FLAG.equals(flag)) {
// 此功能留给手持人工需要单独叫收卷辊出来
log.info("手持单独呼叫收卷辊不创建AGV任务!");
@@ -124,8 +119,9 @@ public class RawCallRollTrussTask extends AbstractTask {
taskParam.put("device_code", endAgvPoint);
taskParam.put("is_flag", flag);
taskParam.put("order_code", requestObj.getString("order_code"));
taskParam.put("start_point_code", taskObj.getPoint_code2());
taskParam.put("up_task_code", taskObj.getTask_code());
taskParam.put("start_point_code", endPoint.getPoint_code());
taskParam.put("up_task_code", "-");
taskParam.put("put_code", putCode);
taskParam.put("create_mode", GeneralDefinition.TASK_CREATION);
// 这里需要判断是否是送轴的任务
if (FOUR_POINT_TASK_FLAG.equals(flag)) {
@@ -139,6 +135,34 @@ public class RawCallRollTrussTask extends AbstractTask {
}
}
log.info("创建AGV任务的参数{}", taskParam);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
checkTaskOptionStatus(taskObj);
// 完成任务1、清空起点数据2、创建AGV任务
String requestParam = taskObj.getRequest_param();
// 其中device_code代表AGV的终点生箔点位
JSONObject requestObj = JSONObject.parseObject(requestParam);
String endAgvPoint = requestObj.getString("device_code");
String flag = requestObj.getString("is_flag");
// 1、清空起点数据
String startPoint = taskObj.getPoint_code1();
String endPoint = taskObj.getPoint_code2();
SchBasePoint startPointObj = pointService.getById(startPoint);
SchBasePoint endPointObj = pointService.getById(endPoint);
// 设置载具类型、点位状态、释放点位
if (ObjectUtil.isNotEmpty(startPointObj)) {
// 起点清空
clearPoint(startPointObj, taskFinishedType);
}
log.info("点位清除完毕,清除后的数据:{}", startPointObj);
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);

View File

@@ -69,7 +69,7 @@ public class RawDownAGVTask extends AbstractTask {
// 查找烘箱对接位可用的位置(没货、没任务、没禁用)
List<SchBasePoint> hxPoints = pointService.getAllBusinessTaskPoint(A1, HX_REGION, POINT_TYPE_EMPTY, POINT_STATUS_EMPTY,null,null);
if (hxPoints.size() == 0) {
throw new BadRequestException("烘箱没有可以用的对接位!");
throw new BadRequestException("烘箱对接位4状态不对");
}
SchBasePoint hxPoint = hxPoints.get(0);
// flag由上游标记用来判断创建四点还是两任务