fix:任务添加注解

This commit is contained in:
zhouz
2025-11-10 15:25:24 +08:00
parent 831f253412
commit 0f4ed2f174
16 changed files with 99 additions and 15 deletions

View File

@@ -1,6 +1,7 @@
package org.nl.b_lms.pdm.screen.contorller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONArray;
import org.nl.b_lms.pdm.screen.store.InMemoryStore;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.springframework.http.MediaType;
@@ -22,7 +23,7 @@ public class FaultController {
@GetMapping
@SaIgnore
public List<SchBaseTask> getFaults(@RequestParam(required = false) Integer limit) {
public JSONArray getFaults(@RequestParam(required = false) Integer limit) {
return store.findFaults();
}
}

View File

@@ -1,5 +1,6 @@
package org.nl.b_lms.pdm.screen.see;
import com.alibaba.fastjson.JSONArray;
import org.nl.b_lms.pdm.screen.store.InMemoryStore;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.springframework.stereotype.Component;
@@ -41,7 +42,7 @@ public class SseBroadcaster {
}
public void pushFaultsSnapshot() {
List<SchBaseTask> snapshot = store.findFaults();
JSONArray snapshot = store.findFaults();
pushFaults(snapshot);
}
@@ -56,7 +57,7 @@ public class SseBroadcaster {
}
}
public void pushFaults(List<SchBaseTask> faults) {
public void pushFaults(JSONArray faults) {
if (faultEmitters.isEmpty()) return;
for (SseEmitter emitter : faultEmitters) {
try {

View File

@@ -9,6 +9,8 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import java.util.concurrent.locks.ReentrantLock;
/**
* 注解驱动的 SSE 推送切面:
* - 方法或类标注 {@link PushSseSnapshot},在成功返回后推送最新快照;
@@ -20,6 +22,9 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
public class TaskUpdateBroadcastAspect {
private final SseBroadcaster broadcaster;
// 非阻塞并发保护:同一时刻仅允许一次推送执行,其他并发调用直接跳过
private final ReentrantLock pushLock = new ReentrantLock();
public TaskUpdateBroadcastAspect(SseBroadcaster broadcaster) {
this.broadcaster = broadcaster;
}
@@ -47,21 +52,29 @@ public class TaskUpdateBroadcastAspect {
// 任一写操作成功后,推送最新快照(替代定时器)
private void broadcastAfterCommitOrNow(PushSseSnapshot ann) {
Runnable doPush = () -> {
if (ann.tasks()) {
broadcaster.pushTasksSnapshot();
Runnable doPushGuarded = () -> {
// 非阻塞尝试获取锁:失败则直接跳过本次推送
if (!pushLock.tryLock()) {
return;
}
if (ann.faults()) {
try { broadcaster.pushFaultsSnapshot(); } catch (Throwable ignored) {}
try {
if (ann.tasks()) {
broadcaster.pushTasksSnapshot();
}
if (ann.faults()) {
try { broadcaster.pushFaultsSnapshot(); } catch (Throwable ignored) {}
}
} finally {
pushLock.unlock();
}
};
if (TransactionSynchronizationManager.isSynchronizationActive()) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() { doPush.run(); }
public void afterCommit() { doPushGuarded.run(); }
});
} else {
doPush.run();
doPushGuarded.run();
}
}
}

View File

@@ -1,27 +1,73 @@
package org.nl.b_lms.pdm.screen.store;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Component
@Slf4j
public class InMemoryStore {
@Autowired
private IschBaseTaskService ischBaseTaskService;
public List<SchBaseTask> findTasks() {
List<String> targetType = Arrays.asList(
"010702", "010703", "010704", "010706", "010710", "010712", "010714", "010715",
"010901", "010902", "010903", "010904", "010905", "010906", "010907", "010908",
"010909", "010910", "010911", "010912", "010913", "010914", "010915"
);
return ischBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, "07"));
.eq(SchBaseTask::getIs_delete, false)
.in(SchBaseTask::getTask_type, targetType)
.lt(SchBaseTask::getTask_status, "07")
.select(SchBaseTask::getTask_code,
SchBaseTask::getTask_type,
SchBaseTask::getCreate_name,
SchBaseTask::getPoint_code1,
SchBaseTask::getPoint_code2,
SchBaseTask::getPoint_code3,
SchBaseTask::getPoint_code4,
SchBaseTask::getVehicle_code,
SchBaseTask::getTask_status,
SchBaseTask::getCreate_time
));
}
public List<SchBaseTask> findFaults() {
return ischBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, "07"));
public JSONArray findFaults() {
JSONArray blk_rows = WQLObject.getWQLObject("em_bi_monitordevice").query("product_area = 'BLK' AND is_crux = '1' AND region_code IN ('RK','NBJ','DDJ')").getResultJSONArray(0);
List<String> blkList = new ArrayList<>();
for (int i = 0; i < blk_rows.size(); i++) {
JSONObject row = blk_rows.getJSONObject(i);
blkList.add(row.getString("device_code"));
}
WmsToAcsServiceImpl bean = SpringContextHolder.getBean(WmsToAcsServiceImpl.class);
JSONObject result2;
try {
result2 = bean.getDeviceErrorInfo(blkList, "BLK");
} catch (Exception e) {
result2 = new JSONObject();
log.info(e.getMessage());
}
// 调用acs接口获取设备
JSONArray blk_data = result2.getJSONArray("data");
return ObjectUtil.isEmpty(blk_data) ? blk_data : new JSONArray();
}
}

View File

@@ -1,6 +1,7 @@
package org.nl.b_lms.sch.tasks;
import cn.hutool.core.date.DateUtil;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.common.utils.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -47,6 +48,7 @@ import static org.nl.wms.util.TaskUtil.getRoutePlanCode;
*/
@Service
@Slf4j
@PushSseSnapshot
public class TwoOutBoxTask extends AbstractAcsTask {
/**

View File

@@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -46,6 +47,7 @@ import java.util.stream.Collectors;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class DjqTask extends AbstractAcsTask {
@Resource
private IschBaseTaskService taskService;

View File

@@ -45,6 +45,7 @@ import java.util.stream.Collectors;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class DjqToKzjhcwTask extends AbstractAcsTask {
@@ -106,7 +107,6 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
@PushSseSnapshot(faults = false)
public void updateTaskStatus(JSONObject taskObj, String status) {
String now = DateUtil.now();
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false);

View File

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -40,6 +41,8 @@ import java.util.List;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class GzqTask extends AbstractAcsTask {
private final String THIS_CLASS = GzqTask.class.getName();

View File

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -40,6 +41,7 @@ import java.util.List;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class GzqToKzjhcwTask extends AbstractAcsTask {

View File

@@ -14,6 +14,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -50,6 +51,7 @@ import java.util.stream.Stream;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class MzhcwTask extends AbstractAcsTask {
private final String THIS_CLASS = MzhcwTask.class.getName();

View File

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -40,6 +41,7 @@ import java.util.List;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class SendDjqKzjTask extends AbstractAcsTask {
@Resource
private IschBaseTaskService taskService;

View File

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -39,6 +40,7 @@ import java.util.List;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class SendGzqKzjTask extends AbstractAcsTask {
@Resource
private IschBaseTaskService taskService;

View File

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -39,6 +40,7 @@ import java.util.List;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class ShiftingTask extends AbstractAcsTask {
private final String THIS_CLASS = ShiftingTask.class.getName();

View File

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
@@ -40,6 +41,7 @@ import java.util.List;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class SsxDjwTask extends AbstractAcsTask {
private final String THIS_CLASS = SsxDjwTask.class.getName();

View File

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
@@ -51,6 +52,7 @@ import java.util.concurrent.TimeUnit;
*/
@Service()
@Slf4j
@PushSseSnapshot(faults = false)
public class ZxDjwTask extends AbstractAcsTask {

View File

@@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper;
import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot;
import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation;
import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
@@ -49,6 +50,7 @@ import java.util.List;
@Service()
@RequiredArgsConstructor
@Slf4j
@PushSseSnapshot(faults = false)
public class ZxqTask extends AbstractAcsTask {
@Resource