Răsfoiți Sursa

短信发送记录功能代码提交

jingyuanchao 1 an în urmă
părinte
comite
e0e745f2ea

+ 1 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/SmsNotifyType.java → soc-modules/soc-modules-mediator/src/main/java/com/xunmei/mediator/api/enums/SmsNotifyType.java

@@ -1,4 +1,4 @@
-package com.xunmei.common.core.enums.iot;
+package com.xunmei.mediator.api.enums;
 
 import cn.hutool.core.util.ObjectUtil;
 import io.netty.util.internal.StringUtil;

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

@@ -16,20 +16,22 @@ import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleExpress;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmRuleSource;
 import com.xunmei.common.core.domain.mediator.domain.IotAlarmSystemField;
 import com.xunmei.common.core.domain.video.MediatorVideoDiagnosisRecord;
-import com.xunmei.common.core.enums.iot.SmsNotifyType;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.mediator.api.enums.AlarmDataTypeEnum;
 import com.xunmei.mediator.api.enums.AlarmRuleExpressOperateEnum;
 import com.xunmei.mediator.api.enums.AlarmVideoTypeEnum;
+import com.xunmei.mediator.api.enums.SmsNotifyType;
 import com.xunmei.mediator.api.mapper.*;
 import com.xunmei.mediator.api.service.IotAlarmDataService;
 import com.xunmei.system.api.RemoteConfigService;
 import com.xunmei.system.api.RemoteSmsService;
 import com.xunmei.system.api.domain.SysConfig;
+import com.xunmei.system.api.util.LogUtils;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -38,6 +40,7 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -49,6 +52,7 @@ import java.util.stream.Collectors;
  * @author oygj
  * @since 2024-01-26
  */
+@Slf4j
 @Service
 public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, IotAlarmData> implements IotAlarmDataService {
 
@@ -140,11 +144,15 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
             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);
-                    String alarmType = SmsNotifyType.getDesc(iotSensor.getDeviceType());
-                    remoteSmsService.sendSmsIot(iotSensor.getOrgId(),alarmType, alarm.getContent(), timeStr);
+                   CompletableFuture.runAsync(()->{
+                       //需要发送短信
+                       LocalDateTime time = alarm.getTime();
+                       String timeStr = time.format(formatter);
+                       String alarmType = SmsNotifyType.getDesc(iotSensor.getDeviceType());
+                       LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警: {} ,准备异步发送短信提醒", iotSensor.getDeviceName(), alarmType);
+                       remoteSmsService.sendSmsIot(iotSensor.getOrgId(), alarmType, alarm.getContent(), timeStr);
+                       LogUtils.DIRECT_HOST_SENSOR_STATUS.info("传感器【 {} 】 发生报警: {} ,异步发送短信提醒完成", iotSensor.getDeviceName(), alarmType);
+                   });
                 }
             }
             if (ObjectUtil.notEqual(iotSensor.getState(), 1)) {
@@ -377,6 +385,9 @@ public class IotAlarmDataServiceImpl extends ServiceImpl<IotAlarmDataMapper, Iot
         Map<String, String> dataMap = dealInfos(infos);
         IotAlarmSystemField field = fieldMap.get(express.getFieldcode());
         String sensorValue = dataMap.get(field.getName());
+        if (StringUtils.isEmpty(sensorValue)) {
+            return null;
+        }
         //此处认为大于,大于等于,小于,小于等于 规则中传感器上报值与规则中的设定值皆为数字,
         //所以在判断此类规则的时候将值转为了BigDecimal进行判断; parseInt会在有小数的时候报错
         if (AlarmRuleExpressOperateEnum.EQUALS.getText().equals(operator)) {

+ 16 - 9
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/SmsService.java

@@ -19,6 +19,7 @@ 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 lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +32,7 @@ import java.util.Date;
 import java.util.List;
 
 @Service
+@Slf4j
 public class SmsService implements ISmsService {
 
     private static Logger logger = LoggerFactory.getLogger(SmsService.class);
@@ -117,9 +119,11 @@ public class SmsService implements ISmsService {
         String date = DateUtil.format(now, "yyyy-MM-dd");
         String time = DateUtil.format(now, "HH:mm:ss");
         if (ObjectUtil.isNotEmpty(userList)){
-            List<SmsSendRecord> records = new ArrayList<>();
             for (SysUser sysUser : userList) {
                 String phone = sysUser.getPhone();
+                if (ObjectUtil.isEmpty(phone)){
+                    continue;
+                }
                 SmsInfoVo smsInfoVo = new SmsInfoVo();
                 smsInfoVo.setBelongBranchId(sysOrg.getGuid());
                 smsInfoVo.setTranType(ALARM_CODE);
@@ -133,12 +137,11 @@ public class SmsService implements ISmsService {
                 try {
                     rspData = ESBClient.request(smsCompositeData);
                 } catch (Exception e) {
-                    e.printStackTrace();
+                    logger.error("短信发送时发生异常 :",e);
                 }
                 AjaxResult result = getResult(rspData);
-                records.add(recordService.saveSmsRecord(sysOrg,sysUser,result,smsInfoVo));
+                recordService.saveSmsRecord(sysOrg, sysUser, result, smsInfoVo);
             }
-            recordService.batchSave(records);
         }
     }
 
@@ -155,6 +158,9 @@ public class SmsService implements ISmsService {
             List<SmsSendRecord> records = new ArrayList<>();
             for (SysUser sysUser : userList) {
                 String phone = sysUser.getPhone();
+                if (ObjectUtil.isEmpty(phone)){
+                    continue;
+                }
                 SmsInfoVo smsInfoVo = new SmsInfoVo();
                 smsInfoVo.setBelongBranchId(sysOrg.getGuid());
                 smsInfoVo.setTranType(TODO_CODE);
@@ -168,12 +174,11 @@ public class SmsService implements ISmsService {
                 try {
                     rspData = ESBClient.request(smsCompositeData);
                 } catch (Exception e) {
-                    e.printStackTrace();
+                    logger.error("短信发送时发生异常 :",e);
                 }
                 AjaxResult result = getResult(rspData);
-                records.add(recordService.saveSmsRecord(sysOrg,sysUser,result,smsInfoVo));
+                recordService.saveSmsRecord(sysOrg,sysUser,result,smsInfoVo);
             }
-            recordService.batchSave(records);
         }
 
     }
@@ -184,8 +189,10 @@ public class SmsService implements ISmsService {
         String date = DateUtil.format(now, "yyyy-MM-dd");
         String time = DateUtil.format(now, "HH:mm:ss");
         List<ReminderScheduleMsgVo> returnData = new ArrayList<>();
-        List<SmsSendRecord> records = new ArrayList<>();
         for (ReminderScheduleMsgDto dto : msgDto) {
+            if (ObjectUtil.isEmpty(dto.getPhone())){
+                continue;
+            }
             SmsInfoVo smsInfoVo = new SmsInfoVo();
             smsInfoVo.setBelongBranchId(dto.getOrgGuid());
             smsInfoVo.setTranType(TODO_CODE);
@@ -210,7 +217,7 @@ public class SmsService implements ISmsService {
                 msgVo.setScheduleId(dto.getScheduleId());
                 returnData.add(msgVo);
             }
-            records.add(recordService.saveSmsRecord(dto,result,smsInfoVo));
+            recordService.saveSmsRecord(dto,result,smsInfoVo);
         }
         return returnData;
     }

+ 26 - 5
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/service/impl/SmsSendRecordServiceImpl.java

@@ -2,6 +2,7 @@ package com.xunmei.sms.service.impl;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -11,16 +12,16 @@ import com.xunmei.common.core.domain.reminder.dto.ReminderScheduleMsgDto;
 import com.xunmei.common.core.domain.sms.domain.SmsSendRecord;
 import com.xunmei.common.core.domain.sms.dto.SmsSendRecordPageDto;
 import com.xunmei.common.core.domain.sms.vo.SmsSendRecordPageVo;
-import com.xunmei.common.core.enums.iot.SmsNotifyType;
-import com.xunmei.common.core.utils.JacksonUtils;
 import com.xunmei.common.core.web.domain.AjaxResult;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.sms.mapper.SmsSendRecordMapper;
 import com.xunmei.sms.service.ISmsSendRecordService;
+import com.xunmei.sms.utils.SmsNotifyType;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.domain.SysUser;
 import com.xunmei.system.api.vo.SmsInfoVo;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -38,6 +39,7 @@ import java.util.Date;
  * @author jingYuanChao
  * @since 2024-06-05
  */
+@Slf4j
 @Service
 public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, SmsSendRecord> implements ISmsSendRecordService {
 
@@ -69,10 +71,17 @@ public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, S
     @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
     public void batchSave(Collection<SmsSendRecord> list) {
         if (ObjectUtil.isEmpty(list)) {
+            log.error("短信发送记录为空");
             return;
         }
         for (SmsSendRecord smsSendRecord : list) {
-            baseMapper.insert(smsSendRecord);
+            int insert = baseMapper.insert(smsSendRecord);
+            if (insert==0){
+                log.error("短信发送记录保存失败");
+            }else {
+                log.info("短信发送记录保存成功:{}",JSON.toJSONString(smsSendRecord));
+            }
+
         }
 
     }
@@ -93,7 +102,13 @@ public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, S
         record.setTypeText(smsInfoVo.getRetMsg());
         record.setResult(result.get(AjaxResult.CODE_TAG).equals(String.valueOf(HttpStatus.SUCCESS)) ? "0" : "1");
         record.setResultDescription(result.get(AjaxResult.MSG_TAG).toString());
-        record.setRespDetail(JacksonUtils.toJSONString(result));
+        record.setRespDetail(JSON.toJSONString(result));
+        int insert = baseMapper.insert(record);
+        if (insert==0){
+            log.error("短信发送记录保存失败");
+        }else {
+            log.info("短信发送记录保存成功:{}",JSON.toJSONString(record));
+        }
         return record;
     }
 
@@ -113,7 +128,13 @@ public class SmsSendRecordServiceImpl extends ServiceImpl<SmsSendRecordMapper, S
         record.setTypeText(smsInfoVo.getRetMsg());
         record.setResult(result.get(AjaxResult.CODE_TAG).equals(String.valueOf(HttpStatus.SUCCESS)) ? "0" : "1");
         record.setResultDescription(result.get(AjaxResult.MSG_TAG).toString());
-        record.setRespDetail(JacksonUtils.toJSONString(result));
+        record.setRespDetail(JSON.toJSONString(result));
+        int insert = baseMapper.insert(record);
+        if (insert==0){
+            log.error("短信发送记录保存失败");
+        }else {
+            log.info("短信发送记录保存成功:{}",JSON.toJSONString(record));
+        }
         return record;
     }
 }

+ 65 - 0
soc-modules/soc-modules-sms/src/main/java/com/xunmei/sms/utils/SmsNotifyType.java

@@ -0,0 +1,65 @@
+package com.xunmei.sms.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import io.netty.util.internal.StringUtil;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
+
+@Getter
+@AllArgsConstructor
+public enum SmsNotifyType {
+
+    EXPIRY_REMINDER("10100", "临期提醒"),
+
+    OVERDUE_REMINDER("10200", "逾期提醒"),
+
+    WATER_DRAINAGE_ALARM("4184", "水浸告警"),
+
+    HUMIDITY_TEMPERATURE_ALARM("4183", "温湿度告警"),
+
+    SMOKE_ALARM("4182", "烟感告警"),
+
+    Infrared_Alarm("4181", "红外告警"),
+
+    GAS_ALARM("41885", "燃气告警"),
+
+    ALARM_OF_THEFT("41881", "盗情告警"),
+
+    DOOR_MAGNET_ALARM("4188", "门磁告警"),
+
+    ;
+
+    private final String code;
+
+
+    private final String desc;
+
+    private static final Map<String, SmsNotifyType> enumMap = new LinkedHashMap<>();
+
+    static {
+        for (SmsNotifyType enumNode : SmsNotifyType.values()) {
+            enumMap.put(enumNode.code, enumNode);
+        }
+    }
+    //根据key找value
+    public static String getDesc(String code) {
+        SmsNotifyType e = enumMap.get(code);
+        return e != null ? e.getDesc() : "";
+    }
+    //根据value找key
+    public static String getCode(String desc) {
+        Optional<SmsNotifyType> optional = Arrays.stream(SmsNotifyType.values()).filter(r -> ObjectUtil.equal(r.getDesc(), desc)).findAny();
+        return optional.isPresent() ? optional.get().getCode() : StringUtil.EMPTY_STRING;
+    }
+
+    public static SmsNotifyType getSensorTypeEnum(String code) {
+        return enumMap.get(code);
+    }
+
+
+}