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/pojo/DeviceMaintenancePlanDetails.java   |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java      |  181 +++++++++++++++++++++++++++++++++---
 cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java           |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserServiceImpl.java       |    2 
 cnas-device/src/main/resources/mapper/DeviceMapper.xml                              |   30 +++--
 ruoyi-system/src/main/resources/mapper/system/UserMapper.xml                        |   23 ++++
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java                  |    6 +
 cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java                         |   25 +++++
 9 files changed, 243 insertions(+), 33 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java
index 86904df..582005e 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/excel/upload/DeviceImport.java
@@ -20,9 +20,6 @@
     @ExcelProperty("鏍″噯鏈夋晥鏈�*(yyyy-MM-dd)")
     private String activationDate;
 
-    @ExcelProperty("鎵�灞為儴闂�*")
-    private String laboratoryName;
-
     @ExcelProperty("褰撳墠鐘舵��*")
     private String deviceStatus;
 
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
index ef47471..f10213c 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/Device.java
@@ -46,6 +46,7 @@
     private LocalDateTime acquisitionDate;
 
     @Schema(description = "鏍″噯鏈夋晥鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime activationDate;
 
     @Schema(description = "绠$悊浜篒d")
@@ -64,11 +65,35 @@
     private String calibrationServices;
 
     @Schema(description = "鏈�杩戞牎鍑嗘棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime lastCalibrationDate;
 
     @Schema(description = "涓嬫鏍″噯鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime nextCalibrationDate;
 
+    @Schema(description = "鏈�杩戜繚鍏绘棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime lastMaintenanceDate;
+
+    @Schema(description = "涓嬫淇濆吇鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime nextMaintenanceDate;
+
+    @Schema(description = "淇濆吇鍛ㄦ湡(鏈�)")
+    private String maintenanceCycle;
+
+    @Schema(description = "鏈�杩戞牳鏌ユ棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime lastExamineDate;
+
+    @Schema(description = "涓嬫鏍告煡鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime nextExamineDate;
+
+    @Schema(description = "鏍告煡鍛ㄦ湡(鏈�)")
+    private String examineCycle;
+
     @Schema(description = "璁惧绫诲瀷")
     private String largeCategory;
 
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java
index 13c541e..3ca9029 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMaintenancePlanDetails.java
@@ -6,6 +6,7 @@
 import lombok.Setter;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 /**
@@ -43,6 +44,9 @@
     @Schema(description = "淇濆吇鍛ㄦ湡")
     private String maintenanceIntervals;
 
+    @Schema(description = "璁″垝淇濆吇鏃堕棿")
+    private LocalDate maintenanceDate;
+
     @Schema(description = "鍒涘缓浜�")
     @TableField(fill = FieldFill.INSERT)
     private Integer createUser;
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()));
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
index 4a0b914..e45aaed 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
@@ -73,7 +73,7 @@
             Laboratory laboratory = laboratoryMapper.selectOne(Wrappers.<Laboratory>lambdaQuery()
                     .eq(Laboratory::getLaboratoryNumber, largeCategory)
                     .select(Laboratory::getLaboratoryName));
-            laboratoryName = laboratory.getLaboratoryName();
+            laboratoryName = laboratory != null ? laboratory.getLaboratoryName() : "";
         } else {
             laboratoryName = "";
         }
diff --git a/cnas-device/src/main/resources/mapper/DeviceMapper.xml b/cnas-device/src/main/resources/mapper/DeviceMapper.xml
index 5460a17..8009a5a 100644
--- a/cnas-device/src/main/resources/mapper/DeviceMapper.xml
+++ b/cnas-device/src/main/resources/mapper/DeviceMapper.xml
@@ -130,13 +130,7 @@
     <resultMap id="treeDeviceDto" type="map">
         <result property="label" column="laboratory_name"/>
         <result property="value" column="value" />
-        <collection property="children" resultMap="storagePointMap" javaType="List"/>
-    </resultMap>
-
-    <resultMap id="storagePointMap" type="map">
-        <result property="value" column="value"/>
-        <result property="label" column="storage_point"/>
-        <collection property="children" resultMap="deviceNameMap" javaType="List"/>
+        <collection property="children" resultMap="deviceNameMap" javaType="List" notNullColumn="id"/>
     </resultMap>
 
     <resultMap id="deviceNameMap" type="map">
@@ -144,24 +138,32 @@
         <result property="label" column="device_name"/>
         <result property="activationDate" column="activation_date"/>
         <result property="managementNumber" column="management_number"/>
+        <result property="storagePoint" column="storage_point"/>
     </resultMap>
 
     <select id="treeDevice" resultMap="treeDeviceDto">
         select
+        c.laboratory_name,
         d.id,
-        case when sd.dept_name is null || sd.dept_name ='' then '鍏朵粬' else sd.dept_name end as laboratory_name,
-        case when d.storage_point is null || d.storage_point ='' then '鍏朵粬' else d.storage_point end as storage_point,
         d.device_name,
         d.management_number,
-        null as value,
-        d.activation_date
-        from device d
-        LEFT JOIN sys_dept sd ON sd.dept_id = d.subordinate_departments_id AND sd.del_flag = '0'
+        d.storage_point,
+        d.activation_date,
+        null as value
+        from (
+            select 1 as sort_no, '鍏ㄩ儴' as laboratory_name
+            union all
+            select 2 as sort_no, '璁惧' as laboratory_name
+            union all
+            select 3 as sort_no, '璁¢噺鍣ㄥ叿' as laboratory_name
+        ) c
+        left join device d on c.sort_no = 1 or d.large_category = c.laboratory_name
         <where>
             <if test="deviceName!=null and deviceName!=''">
-                and device_name like concat('%',#{deviceName},'%')
+                and d.device_name like concat('%',#{deviceName},'%')
             </if>
         </where>
+        order by c.sort_no, d.id
     </select>
 
     <select id="selectDeviceByCode" resultType="com.ruoyi.device.dto.DeviceDto">
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
index 210f2f9..1aa062e 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/UserMapper.java
@@ -53,6 +53,12 @@
     List<User> selectQualityUserList();
 
     /**
+     * 鑾峰彇妫�娴嬪憳瑙掕壊浜哄憳淇℃伅
+     * @return
+     */
+    List<User> selectInspectorUserList();
+
+    /**
      * 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛閮ㄩ棬涓嬬殑鎵�鏈夌敤鎴�
      * @param userId
      * @return
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserServiceImpl.java
index 71fe3b3..c4fb604 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserServiceImpl.java
@@ -41,6 +41,8 @@
                     return baseMapper.selectQualityUserList();
                 case "2":
                     return baseMapper.selectDepartmentLimsUserList(SecurityUtils.getUserId().intValue());
+                case "3":
+                    return baseMapper.selectInspectorUserList();
             }
 
         }
diff --git a/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
index e3a4e6e..7db5013 100644
--- a/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/UserMapper.xml
@@ -83,6 +83,29 @@
         group by u1.id
     </select>
 
+    <!-- 鑾峰彇妫�娴嬪憳瑙掕壊浜哄憳淇℃伅 -->
+    <select id="selectInspectorUserList" resultType="com.ruoyi.common.core.domain.entity.User">
+        select u1.id,
+               u1.account,
+               u1.name,
+               u1.name_en,
+               u1.email,
+               u1.phone,
+               u1.company,
+               u1.is_custom,
+               u1.signature_url,
+               u1.picture_url,
+               u1.depart_lims_id
+        from user u1
+                 left join sys_user_role sur on sur.user_id = u1.id
+                 left join sys_role r on r.role_id = sur.role_id and r.role_name = '妫�娴嬪憳'
+        where r.role_id is not null
+          and u1.status = '0'
+          and u1.del_flag = '0'
+          and u1.id != 1
+        group by u1.id
+    </select>
+
     <!-- 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛閮ㄩ棬涓嬬殑鎵�鏈夌敤鎴� -->
     <select id="selectDepartmentLimsUserList" resultType="com.ruoyi.common.core.domain.entity.User">
         select id,

--
Gitblit v1.9.3