From 62cd9d30a8995f11be78aeb49815e7f7d4a11506 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期二, 13 十月 2026 17:45:18 +0800
Subject: [PATCH] 设备模块后端调整:档案修订保存时自动同步生成本年度校准、核查、保养计划明细(校准计划时间取有效期前一个月,核查、保养取下次日期前一个月);设备新增保养、核查日期与周期字段;设备树查询改为全部/设备/计量器具分类;新增检测员角色人员查询接口;导入模板移除所属部门列
---
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java | 181 +++++++++++++++++++++++++++++++++++++++++---
1 files changed, 166 insertions(+), 15 deletions(-)
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
index 14a060c..e006b84 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -17,13 +17,19 @@
import com.ruoyi.basic.pojo.StructureItemParameter;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.SysDictData;
-import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.dto.*;
import com.ruoyi.device.excel.upload.DeviceImport;
import com.ruoyi.device.mapper.CollectBridgeMapper;
+import com.ruoyi.device.mapper.DeviceCalibrationPlanDetailMapper;
+import com.ruoyi.device.mapper.DeviceCalibrationPlanMapper;
+import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
+import com.ruoyi.device.mapper.DeviceExaminePlanMapper;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
+import com.ruoyi.device.mapper.DeviceMaintenancePlanDetailsMapper;
+import com.ruoyi.device.mapper.DeviceMaintenancePlanMapper;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.mapper.DeviceMetricRecordMapper;
import com.ruoyi.device.pojo.*;
@@ -36,7 +42,6 @@
import com.ruoyi.inspect.pojo.InsProduct;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.system.mapper.SysDictDataMapper;
-import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.apache.logging.log4j.util.Strings;
@@ -68,8 +73,6 @@
private UserMapper userMapper;
- private SysDeptMapper sysDeptMapper;
-
private SysDictDataMapper sysDictDataMapper;
private StructureItemParameterMapper structureItemParameterMapper;
@@ -85,6 +88,18 @@
private DeviceMaintenanceMapper deviceMaintenanceMapper;
private CollectBridgeMapper collectBridgeMapper;
+
+ private DeviceCalibrationPlanMapper deviceCalibrationPlanMapper;
+
+ private DeviceCalibrationPlanDetailMapper deviceCalibrationPlanDetailMapper;
+
+ private DeviceExaminePlanMapper deviceExaminePlanMapper;
+
+ private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
+
+ private DeviceMaintenancePlanMapper deviceMaintenancePlanMapper;
+
+ private DeviceMaintenancePlanDetailsMapper deviceMaintenancePlanDetailsMapper;
@Override
public IPage<DeviceDto> selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull) {
@@ -105,8 +120,154 @@
@Transactional(rollbackFor = Exception.class)
@Override
public int upDeviceParameter(Device itemParameter) {
+ int rows = deviceMapper.updateById(itemParameter);
+ // 妗f淇濉啓浜嗘牎鍑嗘湁鏁堟湡鍜屾牎鍑嗗懆鏈熷悗锛岃嚜鍔ㄥ悓姝ュ埌璁惧鏍″噯璁″垝
+ Device device = deviceMapper.selectById(itemParameter.getId());
+ if (device != null && device.getActivationDate() != null && StringUtils.isNotBlank(device.getCalibrationDate())) {
+ syncCalibrationPlanDetail(device);
+ }
+ // 妗f淇濉啓浜嗘牳鏌ヤ俊鎭悗锛岃嚜鍔ㄥ悓姝ュ埌璁惧鏍告煡璁″垝
+ if (device != null && device.getNextExamineDate() != null && StringUtils.isNotBlank(device.getExamineCycle())) {
+ syncExaminePlanDetail(device);
+ }
+ // 妗f淇濉啓浜嗕繚鍏讳俊鎭悗锛岃嚜鍔ㄥ悓姝ュ埌璁惧淇濆吇璁″垝
+ if (device != null && device.getNextMaintenanceDate() != null && StringUtils.isNotBlank(device.getMaintenanceCycle())) {
+ syncMaintenancePlanDetail(device);
+ }
+ return rows;
+ }
- return deviceMapper.updateById(itemParameter);
+ /**
+ * 鎶婅澶囧悓姝ュ埌浠婂勾鐨勮澶囨牎鍑嗚鍒掓槑缁嗭細鏈勾璁″垝鏍″噯鏃堕棿 = 鏍″噯鏈夋晥鏈熷墠涓�涓湀
+ */
+ private void syncCalibrationPlanDetail(Device device) {
+ String planYear = String.valueOf(LocalDate.now().getYear());
+ DeviceCalibrationPlan plan = deviceCalibrationPlanMapper.selectOne(Wrappers.<DeviceCalibrationPlan>lambdaQuery()
+ .eq(DeviceCalibrationPlan::getPlanYear, planYear)
+ .and(w -> w.isNull(DeviceCalibrationPlan::getRatifyStatus).or().ne(DeviceCalibrationPlan::getRatifyStatus, 1))
+ .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());
+ deviceCalibrationPlanMapper.insert(plan);
+ }
+
+ DeviceCalibrationPlanDetail detail = deviceCalibrationPlanDetailMapper.selectOne(Wrappers.<DeviceCalibrationPlanDetail>lambdaQuery()
+ .eq(DeviceCalibrationPlanDetail::getPlanId, plan.getPlanId())
+ .eq(DeviceCalibrationPlanDetail::getDeviceId, device.getId())
+ .last("limit 1"));
+ boolean isInsert = detail == null;
+ if (isInsert) {
+ 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(device.getActivationDate().toLocalDate().minusMonths(1));
+ if (isInsert) {
+ deviceCalibrationPlanDetailMapper.insert(detail);
+ } else {
+ deviceCalibrationPlanDetailMapper.updateById(detail);
+ }
+ }
+
+ /**
+ * 鎶婅澶囧悓姝ュ埌浠婂勾鐨勮澶囨牳鏌ヨ鍒掓槑缁嗭細鏍告煡鏃堕棿 = 涓嬫鏍告煡鏃ユ湡鍓嶄竴涓湀
+ */
+ private void syncExaminePlanDetail(Device device) {
+ String planYear = String.valueOf(LocalDate.now().getYear());
+ DeviceExaminePlan plan = deviceExaminePlanMapper.selectOne(Wrappers.<DeviceExaminePlan>lambdaQuery()
+ .eq(DeviceExaminePlan::getPlanYear, planYear)
+ .and(w -> w.isNull(DeviceExaminePlan::getRatifyStatus).or().ne(DeviceExaminePlan::getRatifyStatus, 1))
+ .orderByDesc(DeviceExaminePlan::getPlanId)
+ .last("limit 1"));
+ if (plan == null) {
+ plan = new DeviceExaminePlan();
+ plan.setPlanName(planYear + "骞村害璁惧鏍告煡璁″垝");
+ plan.setPlanYear(planYear);
+ plan.setWriteUserId(SecurityUtils.getUserId().intValue());
+ plan.setWriteTime(LocalDateTime.now());
+ deviceExaminePlanMapper.insert(plan);
+ }
+
+ DeviceExaminePlanDetails detail = deviceExaminePlanDetailsMapper.selectOne(Wrappers.<DeviceExaminePlanDetails>lambdaQuery()
+ .eq(DeviceExaminePlanDetails::getPlanId, plan.getPlanId())
+ .eq(DeviceExaminePlanDetails::getDeviceId, device.getId())
+ .last("limit 1"));
+ boolean isInsert = detail == null;
+ if (isInsert) {
+ detail = new DeviceExaminePlanDetails();
+ 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.setDeviceNumber(device.getManagementNumber());
+ detail.setCheckTime(device.getNextExamineDate().toLocalDate().minusMonths(1).toString());
+ if (isInsert) {
+ deviceExaminePlanDetailsMapper.insert(detail);
+ } else {
+ deviceExaminePlanDetailsMapper.updateById(detail);
+ }
+ }
+
+ /**
+ * 鎶婅澶囧悓姝ュ埌浠婂勾鐨勮澶囦繚鍏昏鍒掓槑缁嗭細璁″垝淇濆吇鏃堕棿 = 涓嬫淇濆吇鏃ユ湡鍓嶄竴涓湀
+ */
+ private void syncMaintenancePlanDetail(Device device) {
+ String planYear = String.valueOf(LocalDate.now().getYear());
+ DeviceMaintenancePlan plan = deviceMaintenancePlanMapper.selectOne(Wrappers.<DeviceMaintenancePlan>lambdaQuery()
+ .eq(DeviceMaintenancePlan::getPlanYear, planYear)
+ .and(w -> w.isNull(DeviceMaintenancePlan::getStatus).or().ne(DeviceMaintenancePlan::getStatus, 1))
+ .orderByDesc(DeviceMaintenancePlan::getMaintenancePlanId)
+ .last("limit 1"));
+ if (plan == null) {
+ plan = new DeviceMaintenancePlan();
+ plan.setPlanName(planYear + "骞村害璁惧淇濆吇璁″垝");
+ plan.setPlanYear(planYear);
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ plan.setCompilerId(userId);
+ if (user != null) {
+ plan.setCompiler(user.getName());
+ }
+ plan.setDatePreparation(LocalDateTime.now());
+ deviceMaintenancePlanMapper.insert(plan);
+ }
+
+ DeviceMaintenancePlanDetails detail = deviceMaintenancePlanDetailsMapper.selectOne(Wrappers.<DeviceMaintenancePlanDetails>lambdaQuery()
+ .eq(DeviceMaintenancePlanDetails::getMaintenancePlanId, plan.getMaintenancePlanId())
+ .eq(DeviceMaintenancePlanDetails::getDeviceId, device.getId())
+ .last("limit 1"));
+ boolean isInsert = detail == null;
+ if (isInsert) {
+ detail = new DeviceMaintenancePlanDetails();
+ detail.setMaintenancePlanId(plan.getMaintenancePlanId());
+ detail.setDeviceId(device.getId());
+ }
+ detail.setMaintenanceIntervals(device.getMaintenanceCycle());
+ detail.setMaintenanceDate(device.getNextMaintenanceDate().toLocalDate().minusMonths(1));
+ if (isInsert) {
+ deviceMaintenancePlanDetailsMapper.insert(detail);
+ } else {
+ deviceMaintenancePlanDetailsMapper.updateById(detail);
+ }
}
@Override
@@ -560,9 +721,6 @@
.select(Device::getDeviceName, Device::getSpecificationModel, Device::getManagementNumber))
.stream().map(d -> deviceKey(d.getDeviceName(), d.getSpecificationModel(), d.getManagementNumber())).collect(Collectors.toSet());
- Map<String, List<SysDept>> departmentMap = sysDeptMapper.selectDeptList(new SysDept()).stream()
- .filter(item -> StringUtils.isNotBlank(item.getDeptName()))
- .collect(Collectors.groupingBy(item -> item.getDeptName().trim()));
Map<String, List<User>> userMap = userMapper.selectList(Wrappers.<User>lambdaQuery()
.isNotNull(User::getName).select(User::getId, User::getName))
.stream().collect(Collectors.groupingBy(item -> item.getName().trim()));
@@ -580,18 +738,11 @@
throw new RuntimeException("绗�" + rowNumber + "琛岋細浠櫒鍚嶇О鈥�" + deviceName + "鈥�+瑙勬牸鍨嬪彿鈥�" + specificationModel + "鈥�+绠$悊缂栧彿鈥�" + managementNumber + "鈥濆凡瀛樺湪");
}
- String laboratoryName = required(row.getLaboratoryName(), rowNumber, "鎵�灞為儴闂�");
- List<SysDept> departments = departmentMap.get(laboratoryName);
- if (CollectionUtils.isEmpty(departments) || departments.size() > 1) {
- throw new RuntimeException("绗�" + rowNumber + "琛岋細鎵�灞為儴闂ㄢ��" + laboratoryName + "鈥濅笉瀛樺湪鎴栦笉鍞竴");
- }
-
Device device = new Device();
device.setDeviceName(deviceName);
device.setSpecificationModel(specificationModel);
device.setManagementNumber(managementNumber);
device.setActivationDate(parseDate(row.getActivationDate()));
- device.setSubordinateDepartmentsId(departments.get(0).getDeptId().intValue());
device.setDeviceStatus(Integer.valueOf(dictValue(statusMap, row.getDeviceStatus(), rowNumber, "褰撳墠鐘舵��", true)));
device.setCalibrationDate(required(row.getCalibrationDate(), rowNumber, "鏍″噯鍛ㄦ湡(鏈�)"));
device.setEnDeviceName(trim(row.getEnDeviceName()));
--
Gitblit v1.9.3