add: 技改
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = "开门状态";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -17,6 +17,7 @@ public enum PointStatusEnum {
|
||||
* 待烘烤
|
||||
*/
|
||||
HOT_POINT("5", "待烘烤"),
|
||||
|
||||
/**
|
||||
* 待质检
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 生产区域
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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";
|
||||
/** 烘箱点位(非对接位)状态 -空位 */
|
||||
|
||||
@@ -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上
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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由上游标记,用来判断创建四点还是两任务
|
||||
|
||||
Reference in New Issue
Block a user