Bladeren bron

从设备维护表和用户表中获取到真实手机号发送短信

zlm 7 maanden geleden
bovenliggende
commit
55fc55b0ef

+ 5 - 0
environment-service/pom.xml

@@ -28,6 +28,11 @@
             <artifactId>zk-api-service</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.zksy</groupId>
+            <artifactId>zksy-system</artifactId>
+            <version>3.9.0</version>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>

+ 12 - 2
environment-service/src/main/java/com/zksy/environment/EnvironmentApplication.java

@@ -6,8 +6,18 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableAsync;
 
-@MapperScan(basePackages = "com.zksy.environment.mapper")
-@SpringBootApplication(scanBasePackages = {"com.zksy.environment","com.zksy.api"})
+@MapperScan({
+        "com.zksy.environment.mapper",
+        "com.zksy.base.mapper",
+        "com.zksy.system.mapper"
+})
+@SpringBootApplication(scanBasePackages = {
+        "com.zksy.environment", // 默认就会扫描,不写也行
+        "com.zksy.api",         // 需要跨模块时再加
+        "com.zksy.base.service",
+        "com.zksy.system.service",
+        "com.zksy.common"
+})
 public class EnvironmentApplication {
     public static void main(String[] args) {
         SpringApplication.run(EnvironmentApplication.class, args);

+ 9 - 9
environment-service/src/main/java/com/zksy/environment/config/RSServerService.java

@@ -3,6 +3,7 @@ package com.zksy.environment.config;
 import com.zksy.api.utils.SmsUtil;
 import com.zksy.environment.domain.ERealTimeData;
 import com.zksy.environment.mapper.ERealTimeDataMapper;
+import com.zksy.environment.utils.DevicePhoneFetchUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -12,7 +13,6 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
-import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -38,6 +38,8 @@ public class RSServerService {
 
     @Autowired
     private SmsUtil smsUtil;
+    @Autowired
+    private DevicePhoneFetchUtil devicePhoneFetchUtil;
 
     @PostConstruct
     public void init() {
@@ -107,12 +109,7 @@ public class RSServerService {
 
                 @Override
                 public void receiveRealtimeData(RealTimeData data) {
-                    // 1. 定义必须传入的报警手机号列表(可根据实际场景从配置/数据库获取)
-                    List<String> mandatoryAlarmPhones = Arrays.asList(
-                            "15773238205",
-                            "19892389826"
-                            // 可根据设备类型/节点ID动态调整
-                    );
+
                     for (NodeData nd : data.getNodeList()) {
                         try {
                             ERealTimeData realTimeData = new ERealTimeData();
@@ -128,8 +125,11 @@ public class RSServerService {
                             realTimeData.setCreateTime(LocalDateTime.now());
                             realTimeDataMapper.insert(realTimeData);
 
-                            // 2. 必须传入第三个参数(报警手机号列表)
-                            smsUtil.checkDeviceAlarmAndSend(data, nd, mandatoryAlarmPhones);
+                            //获取能够发送的手机号
+                            List<String> devicePhoneList = devicePhoneFetchUtil.getPhoneListByDeviceId(String.valueOf(data.getDeviceId()));
+
+                            //传入手机号参数
+                            smsUtil.checkDeviceAlarmAndSend(data, nd, devicePhoneList);
                         } catch (Exception e) {
                             log.error("实时数据入库失败:设备ID={}, 节点ID={}", data.getDeviceId(), nd.getNodeId(), e);
                         }

+ 101 - 0
environment-service/src/main/java/com/zksy/environment/utils/DevicePhoneFetchUtil.java

@@ -0,0 +1,101 @@
+package com.zksy.environment.utils;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zksy.base.domain.EquipmentMaintain;
+import com.zksy.base.domain.EquipmentStatus;
+import com.zksy.base.service.EquipmentMaintainService;
+import com.zksy.base.service.EquipmentStatusService;
+import com.zksy.common.core.domain.entity.SysUser;
+import com.zksy.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Component
+public class DevicePhoneFetchUtil {
+
+    //换了一种方式注入,待测试
+    @Autowired
+    private  EquipmentMaintainService equipmentMaintainService;
+    @Autowired
+    private  EquipmentStatusService equipmentStatusService;
+    @Autowired
+    private  ISysUserService sysUserService;
+
+//    private final EquipmentMaintainService equipmentMaintainService;
+//    private final EquipmentStatusService equipmentStatusService;
+//    private final ISysUserService sysUserService;
+//
+//    public DevicePhoneFetchUtil(EquipmentMaintainService equipmentMaintainService,
+//                                EquipmentStatusService equipmentStatusService,
+//                                ISysUserService sysUserService) {
+//        this.equipmentMaintainService = equipmentMaintainService;
+//        this.equipmentStatusService = equipmentStatusService;
+//        this.sysUserService = sysUserService;
+//    }
+
+    /**
+     * 根据设备ID获取所有关联手机号
+     * @param deviceId 设备ID
+     * @return 去重后的有效手机号列表
+     */
+    public List<String> getPhoneListByDeviceId(String deviceId) {
+        Set<String> phoneSet = new HashSet<>();
+
+        //获取维护表中的手机号
+        addAllMaintainPersonPhones(phoneSet, deviceId);
+        //获取用户表的手机号
+        addUserPhoneByStatus(phoneSet, deviceId);
+        return phoneSet.stream()
+                .filter(this::isValidPhone)
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 收集该设备所有维护记录中的维护人手机号
+     */
+    private void addAllMaintainPersonPhones(Set<String> phoneSet, String deviceId) {
+        LambdaQueryWrapper<EquipmentMaintain> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EquipmentMaintain::getEquipmentId, deviceId);
+
+        List<EquipmentMaintain> maintainList = equipmentMaintainService.list(queryWrapper);
+        if (maintainList.isEmpty()) {
+            return;
+        }
+        maintainList.forEach(maintain -> {
+            String phone = String.valueOf(maintain.getMaintainPersonPhone());
+            phoneSet.add(phone);
+        });
+    }
+
+    /**
+     * 从设备状态表关联用户表获取负责人手机号
+     */
+    private void addUserPhoneByStatus(Set<String> phoneSet, String deviceId) {
+
+        LambdaQueryWrapper<EquipmentStatus> statusWrapper = new LambdaQueryWrapper<>();
+        statusWrapper.eq(EquipmentStatus::getEquipmentId, deviceId);
+        EquipmentStatus equipmentStatus = equipmentStatusService.getOne(statusWrapper);
+
+        if (equipmentStatus == null || equipmentStatus.getUserId() == null) {
+            return;
+        }
+        SysUser sysUser = sysUserService.selectUserById(equipmentStatus.getUserId());
+
+        //0代表存在的用户
+        if (sysUser != null && sysUser.getPhonenumber() != null && sysUser.getDelFlag().equals("0")) {
+            phoneSet.add(sysUser.getPhonenumber());
+        }
+    }
+
+    /**
+     * 校验手机号格式(11位数字)
+     */
+    private boolean isValidPhone(String phone) {
+        return phone != null && phone.matches("^1[3-9]\\d{9}$");
+    }
+}

+ 5 - 1
environment-service/src/main/resources/application-dev.yaml

@@ -14,4 +14,8 @@ spring:
       discovery:
         server-addr: 192.168.110.30:8848
       config:
-        server-addr: 192.168.110.30:8848
+        server-addr: 192.168.110.30:8848
+
+mybatis-plus:
+  type-aliases-package: com.zksy.environment.domain, com.zksy.common.core.domain.entity,com.zksy.system.domain
+  mapper-locations: classpath*:mapper/**/*Mapper.xml