From 2f07589b54d56085af77b50d580890cd4130b444 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 19 十月 2026 15:19:53 +0800
Subject: [PATCH] 设备模块后端业务规则、计划接口与日期联动
---
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java | 127 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 125 insertions(+), 2 deletions(-)
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
index 9bf98af..e92fdec 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
@@ -22,6 +22,8 @@
import com.ruoyi.device.excel.upload.DeviceCalibrationPlanDetailUpload;
import com.ruoyi.device.mapper.DeviceCalibrationPlanDetailMapper;
import com.ruoyi.device.mapper.DeviceCalibrationPlanMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.pojo.DeviceCalibrationPlan;
import com.ruoyi.device.pojo.DeviceCalibrationPlanDetail;
import com.ruoyi.device.service.DeviceCalibrationPlanDetailService;
@@ -71,6 +73,8 @@
private InformationNotificationService informationNotificationService;
@Resource
private UserMapper userMapper;
+ @Resource
+ private DeviceMapper deviceMapper;
/**
@@ -238,14 +242,133 @@
* @return
*/
@Override
- public IPage<DeviceCalibrationPlanDetail> pageDeviceCalibrationPlanDetail(Page page, DeviceCalibrationPlanDetail deviceCalibrationPlanDetails) {
+ public IPage<DeviceCalibrationPlanDetailDto> pageDeviceCalibrationPlanDetail(Page page, DeviceCalibrationPlanDetail deviceCalibrationPlanDetails) {
if (deviceCalibrationPlanDetails.getPlanId() == null) {
- return new Page();
+ return new Page<>();
}
return deviceCalibrationPlanDetailMapper.pageDeviceCalibrationPlanDetail(page, QueryWrappers.queryWrappers(deviceCalibrationPlanDetails));
}
/**
+ * 鎸夊勾浠芥煡璇㈣澶囨牎鍑嗚鍒掞紙涓嶅瓨鍦ㄥ垯鑷姩鍒涘缓锛夛紝骞惰嚜鍔ㄨˉ鍏ㄥ凡鍒扮偣鐨勮澶囨槑缁�
+ * @param planYear 骞翠唤
+ * @return
+ */
+ @Override
+ public DeviceCalibrationPlanDto getOrCreatePlanByYear(String planYear) {
+ if (StringUtils.isBlank(planYear)) {
+ planYear = String.valueOf(LocalDate.now().getYear());
+ }
+ DeviceCalibrationPlan plan = getOrCreatePlanEntity(planYear);
+ ensureCalibrationDetails(plan);
+ DeviceCalibrationPlanDto planDto = new DeviceCalibrationPlanDto();
+ BeanUtils.copyProperties(plan, planDto);
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ planDto.setWriteTimeStr(plan.getWriteTime() == null ? null : plan.getWriteTime().format(dateFormatter));
+ planDto.setRatifyTimeStr(plan.getRatifyTime() == null ? null : plan.getRatifyTime().format(dateFormatter));
+ if (plan.getWriteUserId() != null) {
+ User writeUser = userMapper.selectById(plan.getWriteUserId());
+ if (writeUser != null) {
+ planDto.setWriteName(writeUser.getName());
+ }
+ }
+ if (plan.getRatifyUserId() != null) {
+ User ratifyUser = userMapper.selectById(plan.getRatifyUserId());
+ if (ratifyUser != null) {
+ planDto.setRatifyName(ratifyUser.getName());
+ }
+ }
+ return planDto;
+ }
+
+ /**
+ * 璁惧妗f鍙樻洿鍚庯紝鎶婅澶囧悓姝ュ埌瀵瑰簲骞翠唤鐨勮澶囨牎鍑嗚鍒掓槑缁嗭紙浠呭綋宸茶繘鍏ユ彁閱掓湡/宸茶繃鏈熸椂鐢熸垚锛�
+ * @param device 璁惧
+ */
+ @Override
+ public void syncDeviceCalibrationDetail(Device device) {
+ LocalDate remind = calcCalibrationRemindDate(device);
+ if (remind == null || remind.isAfter(LocalDate.now())) {
+ return;
+ }
+ DeviceCalibrationPlan plan = getOrCreatePlanEntity(String.valueOf(remind.getYear()));
+ fillCalibrationDetailIfAbsent(plan, device);
+ }
+
+ /**
+ * 鏌ヨ骞翠唤瀵瑰簲鐨勮鍒掞紝涓嶅瓨鍦ㄥ垯鍒涘缓
+ */
+ private DeviceCalibrationPlan getOrCreatePlanEntity(String planYear) {
+ DeviceCalibrationPlan plan = baseMapper.selectOne(Wrappers.<DeviceCalibrationPlan>lambdaQuery()
+ .eq(DeviceCalibrationPlan::getPlanYear, planYear)
+ .orderByDesc(DeviceCalibrationPlan::getPlanId)
+ .last("limit 1"));
+ if (plan == null) {
+ plan = new DeviceCalibrationPlan();
+ plan.setPlanName(planYear + "骞村害璁惧鏍″噯璁″垝");
+ plan.setPlanYear(planYear);
+ plan.setWriteUserId(SecurityUtils.getUserId().intValue());
+ plan.setWriteTime(LocalDateTime.now());
+ baseMapper.insert(plan);
+ }
+ return plan;
+ }
+
+ /**
+ * 鎵弿鎵�鏈夎澶囷紝鎶婂凡鍒扮偣锛堜笅娆℃牎鍑嗘棩鏈熷墠1涓湀璧凤紝鍚凡杩囨湡锛夌殑璁惧琛ヨ繘鏈勾搴﹁鍒�
+ */
+ private void ensureCalibrationDetails(DeviceCalibrationPlan plan) {
+ List<Device> devices = deviceMapper.selectList(null);
+ for (Device device : devices) {
+ fillCalibrationDetailIfAbsent(plan, device);
+ }
+ }
+
+ /**
+ * 璁惧鐨勬彁閱掕捣鐐规棩鏈燂細涓嬫鏍″噯鏃ユ湡鍓�1涓湀锛堝彇涓嶅埌涓嬫鏃ユ湡鏃剁敤鏍″噯鏈夋晥鏈熷墠1涓湀鍏滃簳锛�
+ */
+ private LocalDate calcCalibrationRemindDate(Device device) {
+ LocalDateTime base = device.getNextCalibrationDate() != null ? device.getNextCalibrationDate() : device.getActivationDate();
+ return base == null ? null : base.toLocalDate().minusMonths(1);
+ }
+
+ /**
+ * 宸插埌鐐逛笖璁″垝涓皻鏃犺璁惧鏈疆鏄庣粏鏃讹紝鑷姩琛ヤ竴鏉�
+ */
+ private void fillCalibrationDetailIfAbsent(DeviceCalibrationPlan plan, Device device) {
+ LocalDate remind = calcCalibrationRemindDate(device);
+ // 鏈埌鐐逛笉鐢熸垚锛涙湭鏉ュ勾浠界殑鎻愰啋涓嶈ˉ杩涘綋鍓嶈鍒�
+ if (remind == null || remind.isAfter(LocalDate.now())) {
+ return;
+ }
+ if (plan.getPlanYear() != null && String.valueOf(remind.getYear()).compareTo(plan.getPlanYear()) > 0) {
+ return;
+ }
+ Long exist = deviceCalibrationPlanDetailMapper.selectCount(Wrappers.<DeviceCalibrationPlanDetail>lambdaQuery()
+ .eq(DeviceCalibrationPlanDetail::getPlanId, plan.getPlanId())
+ .eq(DeviceCalibrationPlanDetail::getDeviceId, device.getId())
+ .eq(DeviceCalibrationPlanDetail::getPlanDate, remind));
+ if (exist != null && exist > 0) {
+ return;
+ }
+ DeviceCalibrationPlanDetail detail = new DeviceCalibrationPlanDetail();
+ detail.setPlanId(plan.getPlanId());
+ detail.setDeviceId(device.getId());
+ String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
+ if (StringUtils.isNotBlank(device.getSpecificationModel())) {
+ deviceName = deviceName + " " + device.getSpecificationModel();
+ }
+ detail.setDeviceName(deviceName);
+ detail.setDeviceAmount("1");
+ detail.setDeviceNumber(device.getManagementNumber());
+ detail.setVerificationUnit(device.getCalibrationServices());
+ detail.setVerificationCycles(device.getCalibrationDate());
+ detail.setLastDate(device.getLastCalibrationDate() == null ? null : device.getLastCalibrationDate().toLocalDate());
+ detail.setPlanDate(remind);
+ deviceCalibrationPlanDetailMapper.insert(detail);
+ }
+
+ /**
* 瀵煎嚭璁惧鏍″噯璁″垝
* @param deviceCalibrationPlanId
* @param response
--
Gitblit v1.9.3