Преглед изворни кода

告警规则添加是否发送短信

gaoxiong пре 1 година
родитељ
комит
c361edaefb

+ 14 - 1
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/RemoteSmsService.java

@@ -13,8 +13,21 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 @FeignClient(contextId = "remoteSmsService", value = ServiceNameConstants.SMS, fallbackFactory = RemoteSmsFallbackFactory.class)
 public interface RemoteSmsService {
-
+    /**
+     * 自定义发送
+     * @param smsData
+     * @return
+     */
     @PostMapping("/api/sms/send")
     R<AjaxResult> sendSms(@RequestBody SmsInfoVo smsData);
 
+
+    /**
+     * 发送动环告警
+     * @param orgId
+     * @param alarmContent
+     * @return
+     */
+    @PostMapping("/api/sms/sendSmsIot")
+    void sendSmsIot(@RequestParam("orgId") Long orgId,@RequestParam("alarmContent") String alarmContent,@RequestParam("alarmTime") String alarmTime);
 }

+ 6 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/factory/RemoteSmsFallbackFactory.java

@@ -25,6 +25,12 @@ public class RemoteSmsFallbackFactory implements FallbackFactory<RemoteSmsServic
             public R<AjaxResult> sendSms(SmsInfoVo smsData) {
                 return null;
             }
+
+            @Override
+            public void sendSmsIot(Long orgId, String alarmContent, String alarmTime) {
+
+            }
+
         };
     }
 }

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/mediator/domain/IotAlarmData.java

@@ -110,5 +110,9 @@ public class IotAlarmData extends BaseEntity {
     @TableField("do_type")
     private Integer doType;
 
+    @ApiModelProperty(value = "是否需要发送短信")
+    @TableField(exist = false)
+    private Boolean smsType;
+
 
 }

+ 4 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/mediator/domain/IotAlarmRuleExpress.java

@@ -57,6 +57,10 @@ public class IotAlarmRuleExpress implements Serializable {
     @TableField("source_type")
     private Integer sourceType;
 
+    @ApiModelProperty(value = "是否需要发送短信:0.不需要发送短信;1.需要发送短信")
+    @TableField("sms_type")
+    private Boolean smsType = false;
+
     /**
      * 采用时间段方式,农信版本不使用时间模板,不撤防不加入报警列表
      */

+ 3 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/dto/alarm/IotAlarmRuleExpressDto.java

@@ -40,6 +40,9 @@ public class IotAlarmRuleExpressDto implements Serializable {
     @ApiModelProperty(value = "报警源类型:4:烟雾传感器;5: 温湿度采集器;6:水浸; 7:门磁、窗磁;8:卷帘门门磁;9:地磁;10燃气报警器;20:报警防区")
     private Integer sourceType;
 
+    @ApiModelProperty(value = "是否需要发送短信:0.不需要发送短信;1.需要发送短信")
+    private Boolean smsType = false;
+
     @ApiModelProperty(value = "规则使用周期:1.周一,2.周二,3.周三,4.周四,5.周五,6.周六,7.周日")
     @TableField("week_day")
     private Integer weekDay;

+ 1 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/service/impl/IotAlarmRuleServiceImpl.java

@@ -89,6 +89,7 @@ public class IotAlarmRuleServiceImpl extends ServiceImpl<IotAlarmRuleMapper, Iot
             List<IotAlarmSystemFieldVo> systemFieldVos = appAlarmSystemFieldVoMapList.get(key);
             map.put("sourceTypeDes", systemFieldVos.get(0).getSourceTypeDes());
             map.put("sourceType", systemFieldVos.get(0).getSourceType());
+            map.put("smsType", systemFieldVos.get(0).getSmsType());
             List<Map<String, Object>> systemFieldsList = new ArrayList<>();
             for (IotAlarmSystemFieldVo vo : systemFieldVos) {
                 Map<String, Object> mapa = new HashMap<>();

+ 4 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/alarm/IotAlarmRuleExpressEditVo.java

@@ -1,5 +1,6 @@
 package com.xunmei.iot.vo.alarm;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -37,6 +38,9 @@ public class IotAlarmRuleExpressEditVo implements Serializable {
     @ApiModelProperty(value = "报警源类型:4:烟雾传感器;5: 温湿度采集器;6:水浸; 7:门磁、窗磁;8:卷帘门门磁;9:地磁;10燃气报警器;20:报警防区")
     private Integer sourceType;
 
+    @ApiModelProperty(value = "是否需要发送短信:0.不需要发送短信;1.需要发送短信")
+    private Boolean smsType = false;
+
     @ApiModelProperty(value = "规则使用周期:1.周一,2.周二,3.周三,4.周四,5.周五,6.周六,7.周日")
     private Integer weekDay;
 

+ 3 - 0
soc-modules/soc-modules-iot/src/main/java/com/xunmei/iot/vo/alarm/IotAlarmSystemFieldVo.java

@@ -26,6 +26,9 @@ public class IotAlarmSystemFieldVo implements Serializable {
     @ApiModelProperty(value = "报警源类型(设备类型):4:烟雾传感器;5: 温湿度采集器;6:水浸; 7:门磁、窗磁;8:卷帘门门磁;9:地磁;10燃气报警器;50:报警防区")
     private Integer sourceType;
 
+    @ApiModelProperty(value = "是否需要发送短信:0.不需要发送短信;1.需要发送短信")
+    private Boolean smsType = false;
+
     @ApiModelProperty(value = "报警源类型(设备类型) 中文")
     private String sourceTypeDes;
 

+ 16 - 1
soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/service/impl/IotAlarmDataServiceImpl.java

@@ -25,6 +25,7 @@ import com.xunmei.mediator.api.enums.AlarmRuleExpressOperateEnum;
 import com.xunmei.mediator.api.enums.AlarmVideoTypeEnum;
 import com.xunmei.mediator.api.mapper.*;
 import com.xunmei.mediator.api.service.IotAlarmDataService;
+import com.xunmei.system.api.RemoteSmsService;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -34,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -64,6 +66,9 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
     @Autowired
     private IotDeviceMapper iotDeviceMapper;
 
+    @Autowired
+    private RemoteSmsService remoteSmsService;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void dealSensorData(IotSensor iotSensor) throws Exception {
@@ -103,6 +108,7 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         boolean isExpress = false;
         List<IotAlarmData> list = new ArrayList<>();
         for (IotAlarmRuleExpress express : iotAlarmRuleExpresses) {
+            Boolean smsType = express.getSmsType();
             boolean isOk = compareTime(express, dateStr, now);
             if (!isOk) {
                 //不在时间段内
@@ -112,6 +118,7 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
             IotAlarmData alarmData = createAlarmData(iotSensor, express, fieldMap);
             if (alarmData != null) {
                 isAlarm = true;
+                alarmData.setSmsType(smsType);
                 list.add(alarmData);
             }
         }
@@ -125,6 +132,15 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         if (isAlarm && alarms.size() == 0) {
             //报警中,且表中没有告警数据,则插入数据
             this.saveBatch(list);
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+            for (IotAlarmData alarm : list) {
+                if(alarm.getSmsType()){
+                    //需要发送短信
+                    LocalDateTime time = alarm.getTime();
+                    String timeStr = time.format(formatter);
+                    remoteSmsService.sendSmsIot(iotSensor.getOrgId(),alarm.getContent(),timeStr);
+                }
+            }
             if (ObjectUtil.notEqual(iotSensor.getState(),1)) {
                 iotSensor.setState(1);
                 iotSensor.setStateUpdateTime(LocalDateTime.now());
@@ -138,7 +154,6 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
             if( alarms.size() != 0){
                 IotAlarmData iotAlarmData = alarms.get(0);
                 iotAlarmData.setEndTime(LocalDateTime.now());
-
                 this.updateById(iotAlarmData);
             }
 

+ 7 - 4
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/controller/SmsController.java

@@ -4,10 +4,7 @@ import com.xunmei.common.core.web.controller.BaseController;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.sms.service.ISmsService;
 import com.xunmei.system.api.vo.SmsInfoVo;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
@@ -35,4 +32,10 @@ public class SmsController extends BaseController {
     public AjaxResult send(@RequestBody SmsInfoVo smsData) {
         return smsService.send(smsData);
     }
+
+
+    @PostMapping("/sendSmsIot")
+    public void sendSmsIot(Long orgId,String alarmContent,String alarmTime){
+
+    };
 }

+ 0 - 28
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/controller/TestController.java

@@ -1,28 +0,0 @@
-package com.xunmei.sms.controller;
-
-import com.xunmei.common.core.web.controller.BaseController;
-import com.xunmei.common.core.web.domain.AjaxResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @description:
- * @author: lj
- * @Date: 2024/2/22 16:26
- */
-@Api(tags = {"SmsTest"})
-@RestController
-@RequestMapping("/test")
-public class TestController extends BaseController {
-
-    @ApiOperation(value = "根据机构获取区域")
-    @GetMapping("/send")
-    public String getAreaByOrg(@RequestParam(value = "orgId") Long orgId) {
-        return "Ok"+ " " + orgId;
-    }
-}

+ 8 - 0
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/ISmsService.java

@@ -14,4 +14,12 @@ public interface ISmsService {
      * @return {@link AjaxResult}
      */
     AjaxResult send(SmsInfoVo data);
+
+    /**
+     * 发送动环短信iot
+     * @param orgId
+     * @param alarmContent
+     * @return
+     */
+    void sendSmsIot(Long orgId,String alarmContent,String alarmTime);
 }

+ 60 - 0
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/SmsService.java

@@ -1,22 +1,46 @@
 package com.xunmei.sms.service;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.dc.eai.data.CompositeData;
 import com.dcfs.esb.client.ESBClient;
+import com.xunmei.common.core.constant.ErrorMsgConstants;
+import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.sms.utils.SmsUtil;
+import com.xunmei.system.api.RemoteOrgService;
+import com.xunmei.system.api.RemoteRoleService;
+import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.api.domain.SysUser;
+import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
 import com.xunmei.system.api.vo.SmsInfoVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 @Service
 public class SmsService implements ISmsService {
 
     private static Logger logger = LoggerFactory.getLogger(SmsService.class);
 
+    @Autowired
+    private RemoteRoleService remoteRoleService;
+
+    @Autowired
+    private RemoteOrgService remoteOrgService;
+
+    //告警代码
+    private static final String ALARM_CODE="854002";
+    //逾期提醒代码
+    private static  final  String TODO_CODE="854001";
+
     /**
      * 在ESB系统里的 系统编码
      */
@@ -70,6 +94,42 @@ public class SmsService implements ISmsService {
         }
     }
 
+    /**
+     * 根据机构获取机构下网点负责人角色,并发送告警短信
+     * @param orgId
+     * @param alarmContent
+     * @return
+     */
+    @Override
+    public void sendSmsIot(Long orgId, String alarmContent,String alarmTime) {
+        List<SysUser> userList = RemoteCallHandlerExecutor.executeRemoteCall(() ->
+                remoteRoleService.selectUserByRoleNameAndOrgId("网点负责人", orgId, 0, SecurityConstants.INNER), ErrorMsgConstants.QUERY_USER_DATA_ERROR);
+        SysOrg sysOrg = remoteOrgService.selectOrgById(orgId, SecurityConstants.INNER);
+        Date now = new Date();
+        String date = DateUtil.format(now, "yyyy-MM-dd");
+        String time = DateUtil.format(now, "hh:mm:ss");
+        if (ObjectUtil.isNotEmpty(userList)){
+            for (SysUser sysUser : userList) {
+                String phone = sysUser.getPhone();
+                SmsInfoVo smsInfoVo = new SmsInfoVo();
+                smsInfoVo.setBelongBranchId(sysOrg.getGuid());
+                smsInfoVo.setTranType(ALARM_CODE);
+                smsInfoVo.setMobile(phone);
+                smsInfoVo.setOccurDate(date);
+                smsInfoVo.setOccurTime(time);
+                smsInfoVo.setBak3(alarmContent);
+                CompositeData smsCompositeData = SmsUtil.createSmsBody(smsInfoVo,systemCode,systemName,serviceCode,serviceScene);
+                CompositeData rspData = null;
+                try {
+                    rspData = ESBClient.request(smsCompositeData);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                 getResult(rspData);
+            }
+        }
+    }
+
     private AjaxResult getResult(CompositeData repData) {
         boolean result = false;
         try {