From 8d8be94c2dc5d98d58458a34145d008e79fedc2f Mon Sep 17 00:00:00 2001 From: 86156 <823267011@qq.com> Date: Sun, 4 Jan 2026 15:05:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=85=A5=E5=8A=9F=E8=83=BD=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SendJobController.java | 23 +++++++++++ .../domain/vo/FurnaceSendCoilInfoVO.java | 22 ++++++++++ .../business/service/CrmPdiPlanService.java | 6 +++ .../service/impl/CrmPdiPlanServiceImpl.java | 41 +++++++++++++++++++ .../service/impl/SendJobServiceImpl.java | 39 ++++++++++++++++++ 5 files changed, 131 insertions(+) create mode 100644 business/src/main/java/com/fizz/business/domain/vo/FurnaceSendCoilInfoVO.java diff --git a/business/src/main/java/com/fizz/business/controller/SendJobController.java b/business/src/main/java/com/fizz/business/controller/SendJobController.java index 65b9260..ea16bf9 100644 --- a/business/src/main/java/com/fizz/business/controller/SendJobController.java +++ b/business/src/main/java/com/fizz/business/controller/SendJobController.java @@ -9,8 +9,11 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; +import com.fizz.business.domain.vo.FurnaceSendCoilInfoVO; import com.fizz.business.domain.vo.SendJobLastSuccessVO; import com.fizz.business.service.ISendJobQueryService; +import com.fizz.business.utils.RedisUtil; +import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.annotation.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -87,4 +90,24 @@ public class SendJobController extends BaseController { SendJobLastSuccessVO vo = sendJobQueryService.getLastSuccess(groupType); return AjaxResult.success(vo); } + + /** + * 获取上次炉火写入的钢卷信息 + * @return 上次写入的钢卷信息(coilId、planId、sendTime) + */ + @GetMapping("/furnace/lastCoilInfo") + public AjaxResult getLastFurnaceSendCoilInfo() { + try { + String jsonValue = RedisUtil.getValue("furnace:send:coil:info"); + if (jsonValue == null || jsonValue.isEmpty()) { + return AjaxResult.success(null); + } + + ObjectMapper objectMapper = new ObjectMapper(); + FurnaceSendCoilInfoVO coilInfo = objectMapper.readValue(jsonValue, FurnaceSendCoilInfoVO.class); + return AjaxResult.success(coilInfo); + } catch (Exception e) { + return AjaxResult.error("获取上次炉火写入钢卷信息失败: " + e.getMessage()); + } + } } diff --git a/business/src/main/java/com/fizz/business/domain/vo/FurnaceSendCoilInfoVO.java b/business/src/main/java/com/fizz/business/domain/vo/FurnaceSendCoilInfoVO.java new file mode 100644 index 0000000..ce6b92b --- /dev/null +++ b/business/src/main/java/com/fizz/business/domain/vo/FurnaceSendCoilInfoVO.java @@ -0,0 +1,22 @@ +package com.fizz.business.domain.vo; + +import lombok.Data; + +import java.util.Date; + +/** + * 炉火写入时的钢卷信息(存储到 Redis) + */ +@Data +public class FurnaceSendCoilInfoVO { + + /** 钢卷号 */ + private String coilId; + + /** 计划ID */ + private String planId; + + /** 写入时间 */ + private Date sendTime; +} + diff --git a/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java b/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java index a929d9f..d18db93 100644 --- a/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java +++ b/business/src/main/java/com/fizz/business/service/CrmPdiPlanService.java @@ -29,4 +29,10 @@ public interface CrmPdiPlanService extends IService { CrmPdiPlan getFirstUnProducedCoil(); void changeStatus(ChangePlanStatusForm build); + + /** + * 获取当前正在线上的钢卷(优先级:ONLINE > PRODUCING > READY/NEW) + * @return 当前正在线上的钢卷,如果没有则返回null + */ + CrmPdiPlan getCurrentOnlineCoil(); } diff --git a/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java index 31ecf10..6973456 100644 --- a/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/CrmPdiPlanServiceImpl.java @@ -169,4 +169,45 @@ public class CrmPdiPlanServiceImpl extends ServiceImpl PRODUCING > READY/NEW) + * @return 当前正在线上的钢卷,如果没有则返回null + */ + @Override + public CrmPdiPlan getCurrentOnlineCoil() { + + + // 1. 优先查找 PRODUCING 状态的钢卷 + CrmPdiPlan producingPlan = this.lambdaQuery() + .eq(CrmPdiPlan::getStatus, "PRODUCING") + .orderByAsc(CrmPdiPlan::getSeqid) + .last("limit 1") + .one(); + + if (producingPlan != null) { + return producingPlan; + } + + // 2. 其次查找 ONLINE 状态的钢卷 + CrmPdiPlan onlinePlan = this.lambdaQuery() + .eq(CrmPdiPlan::getStatus, "ONLINE") + .orderByAsc(CrmPdiPlan::getSeqid) + .last("limit 1") + .one(); + + if (onlinePlan != null) { + return onlinePlan; + } + + + // 3. 最后查找 READY 或 NEW 状态的钢卷(按顺序号排序,取第一个) + CrmPdiPlan readyOrNewPlan = this.lambdaQuery() + .in(CrmPdiPlan::getStatus, "READY", "NEW") + .orderByAsc(CrmPdiPlan::getSeqid) + .last("limit 1") + .one(); + + return readyOrNewPlan; + } + } diff --git a/business/src/main/java/com/fizz/business/service/impl/SendJobServiceImpl.java b/business/src/main/java/com/fizz/business/service/impl/SendJobServiceImpl.java index ca267e8..0167032 100644 --- a/business/src/main/java/com/fizz/business/service/impl/SendJobServiceImpl.java +++ b/business/src/main/java/com/fizz/business/service/impl/SendJobServiceImpl.java @@ -13,8 +13,13 @@ import com.fizz.business.domain.vo.SendJobItemVO; import com.fizz.business.mapper.BizSendJobGroupMapper; import com.fizz.business.mapper.BizSendJobItemMapper; import com.fizz.business.mapper.BizSendJobMapper; +import com.fizz.business.domain.CrmPdiPlan; +import com.fizz.business.domain.vo.FurnaceSendCoilInfoVO; +import com.fizz.business.service.CrmPdiPlanService; import com.fizz.business.service.ISendJobService; import com.fizz.business.service.manager.OpcMessageIdsManager; +import com.fizz.business.utils.RedisUtil; +import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; @@ -45,6 +50,11 @@ public class SendJobServiceImpl extends ServiceImpl "FURNACE".equalsIgnoreCase(g.getGroupType())); + + if (isFurnaceSend && allSuccess) { + CrmPdiPlan currentCoil = crmPdiPlanService.getCurrentOnlineCoil(); + if (currentCoil != null) { + FurnaceSendCoilInfoVO coilInfo = new FurnaceSendCoilInfoVO(); + coilInfo.setCoilId(currentCoil.getCoilid()); + coilInfo.setPlanId(currentCoil.getPlanid()); + coilInfo.setSendTime(new Date()); + + // 存储到 Redis(使用 JSON 格式) + ObjectMapper objectMapper = new ObjectMapper(); + String jsonValue = objectMapper.writeValueAsString(coilInfo); + RedisUtil.setValue(REDIS_KEY_FURNACE_SEND_COIL_INFO, jsonValue); + + log.info("炉火写入成功,已保存钢卷信息到 Redis: coilId={}, planId={}", + coilInfo.getCoilId(), coilInfo.getPlanId()); + } else { + log.warn("炉火写入成功,但未找到当前正在线上的钢卷"); + } + } + } catch (Exception e) { + log.error("保存炉火写入钢卷信息到 Redis 失败", e); + // 不影响主流程,只记录日志 + } + return true; } }