|
@@ -19,14 +19,16 @@ import com.usky.alarm.service.BaseAlarmNoticeResultService;
|
|
|
import com.usky.alarm.service.config.voice.VoiceNotice;
|
|
|
import com.usky.common.core.bean.CommonPage;
|
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
-import com.usky.common.security.utils.SecurityUtils;
|
|
|
+import com.usky.system.domain.MceRequestVO;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import com.usky.system.RemoteMceService;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@@ -44,77 +46,167 @@ public class BaseAlarmNoticeResultServiceImpl extends AbstractCrudService<BaseAl
|
|
|
private VoiceNotice voiceNotice;
|
|
|
@Autowired
|
|
|
private SysUserMapper sysUserMapper;
|
|
|
+ @Autowired
|
|
|
+ private RemoteMceService remoteMceService;
|
|
|
+
|
|
|
+ private static final String SMS_SIGN_NAME = "上海永天科技股份有限公司";
|
|
|
+ private static final String SMS_TEMPLATE_CODE = "SMS_463791105";
|
|
|
+ private static final String REGION_ID = "cn-beijing";
|
|
|
+ private static final String ACCESS_KEY_ID = "LTAI5tH3VvRL5BUkovCokHJX";
|
|
|
+ private static final String ACCESS_KEY_SECRET = "SaaWUouNqvcA0C746gcNOH9m6SRYN4";
|
|
|
+
|
|
|
+ private static final String INFO_TYPE = "4";
|
|
|
+ private static final String INFO_TITLE = "设备告警";
|
|
|
+ private static final String ALARM_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
|
|
+ private static final String REMARK_TEMPLATE = "设备名称:%s,请及时处理!";
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public CommonPage<BaseAlarmNoticeResult> resultInfo(String receiver, Integer alarmId, Integer current, Integer size) {
|
|
|
IPage<BaseAlarmNoticeResult> page = new Page<>(current, size);
|
|
|
LambdaQueryWrapper<BaseAlarmNoticeResult> queryWrapper1 = Wrappers.lambdaQuery();
|
|
|
- queryWrapper1.like(StringUtils.isNotBlank(receiver),BaseAlarmNoticeResult::getReceiver, receiver)
|
|
|
+ queryWrapper1.like(StringUtils.isNotBlank(receiver), BaseAlarmNoticeResult::getReceiver, receiver)
|
|
|
.eq(BaseAlarmNoticeResult::getAlarmId, alarmId);
|
|
|
// .eq(BaseAlarmNoticeResult::getTenantId, SecurityUtils.getTenantId());
|
|
|
- page = this.page(page,queryWrapper1);
|
|
|
- return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
|
|
|
+ page = this.page(page, queryWrapper1);
|
|
|
+ return new CommonPage<>(page.getRecords(), page.getTotal(), page.getCurrent(), page.getSize());
|
|
|
}
|
|
|
|
|
|
- //异步多线程调用
|
|
|
+ // 异步多线程调用
|
|
|
@Async("asyncServiceExecutor")
|
|
|
public Integer send(BaseAlarm baseAlarm, List<BaseAlarmNotice> records3, Integer alarmId, List<DmpProduct> records,
|
|
|
BaseAlarmType baseAlarmType, List<DmpDevice> records2) throws ClientException {
|
|
|
- log.info("start asyncServiceExecutor--------------------");
|
|
|
+ log.info("Start asyncServiceExecutor--------------------");
|
|
|
Integer saveAlarmResult = 0;
|
|
|
- try{
|
|
|
- String[] array = records3.get(0).getReceiver1().split(",");
|
|
|
- for (String s : array) {
|
|
|
- LambdaQueryWrapper<SysUser> lambdaQuery4 = Wrappers.lambdaQuery();
|
|
|
- lambdaQuery4.eq(SysUser::getUserId,s)
|
|
|
- .eq(SysUser::getDelFlag,0);
|
|
|
- SysUser sysUser = sysUserMapper.selectOne(lambdaQuery4);
|
|
|
- BaseAlarmNoticeResult baseAlarmNoticeResult = new BaseAlarmNoticeResult();
|
|
|
- baseAlarmNoticeResult.setReceiver(sysUser.getNickName());
|
|
|
- baseAlarmNoticeResult.setReceiverPhone(sysUser.getPhonenumber());
|
|
|
- baseAlarmNoticeResult.setAlarmId(alarmId);
|
|
|
- baseAlarmNoticeResult.setNoticeTime(LocalDateTime.now());
|
|
|
- baseAlarmNoticeResult.setNoticeContent(records.get(0).getProductName()+","+baseAlarmType.getTypeName()+","+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
|
|
|
- "HH:mm:ss")));
|
|
|
- baseAlarmNoticeResult.setTenantId(records.get(0).getTenantId());
|
|
|
- if (records3.get(0).getNoticeMethod().contains("电话")){
|
|
|
- SingleCallByTtsResponse code = voiceNotice.sendCVoice(sysUser.getPhonenumber(),
|
|
|
- records.get(0).getProductName(),baseAlarmType.getTypeName(),
|
|
|
- baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
|
|
|
- "HH:mm:ss")));
|
|
|
- baseAlarmNoticeResult.setNoticeType(3);
|
|
|
- if(code.getCode() != null && code.getCode().equals("OK")) {
|
|
|
- //请求成功
|
|
|
- baseAlarmNoticeResult.setNoticeResult(1);
|
|
|
- }else {
|
|
|
- baseAlarmNoticeResult.setNoticeResult(2);
|
|
|
- }
|
|
|
- saveAlarmResult = baseMapper.insert(baseAlarmNoticeResult);
|
|
|
+ String templateParam = createTemplateParam(baseAlarm, baseAlarmType, records2.get(0));
|
|
|
+
|
|
|
+ try {
|
|
|
+ String[] receivers = records3.get(0).getReceiver1().split(",");
|
|
|
+ for (String receiver : receivers) {
|
|
|
+ SysUser sysUser = getSysUser(receiver);
|
|
|
+ if (sysUser == null) {
|
|
|
+ log.warn("查询不到告警接收用户: {}", receiver);
|
|
|
+ continue;
|
|
|
}
|
|
|
- if (records3.get(0).getNoticeMethod().contains("短信")){
|
|
|
- DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "LTAI5tH3VvRL5BUkovCokHJX", "SaaWUouNqvcA0C746gcNOH9m6SRYN4");
|
|
|
- IAcsClient client = new DefaultAcsClient(profile);
|
|
|
- SendSmsRequest request = new SendSmsRequest();
|
|
|
- request.setPhoneNumbers(sysUser.getPhonenumber());//接收短信的手机号码
|
|
|
- request.setSignName("上海永天科技股份有限公司");//短信签名名称
|
|
|
- request.setTemplateCode("SMS_463791105");//短信模板CODE
|
|
|
- request.setTemplateParam("{\"deviceName\":\""+records2.get(0).getDeviceName()+"\","+"\"time\":\""+baseAlarm.getAlarmTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd " +
|
|
|
- "HH:mm:ss"))+"\","+
|
|
|
- "\"alarmType\":\""+baseAlarmType.getTypeName()+"\","+"\"alarmContent\":\""+baseAlarm.getAlarmContent()+"\"}");
|
|
|
- SendSmsResponse code = client.getAcsResponse(request);
|
|
|
- baseAlarmNoticeResult.setNoticeType(4);
|
|
|
- if(code.getCode() != null && code.getCode().equals("OK")) {
|
|
|
- //请求成功
|
|
|
- baseAlarmNoticeResult.setNoticeResult(1);
|
|
|
- }else {
|
|
|
- baseAlarmNoticeResult.setNoticeResult(2);
|
|
|
- }
|
|
|
- saveAlarmResult = baseMapper.insert(baseAlarmNoticeResult);
|
|
|
+
|
|
|
+ BaseAlarmNoticeResult baseAlarmNoticeResult = createBaseAlarmNoticeResult(sysUser, baseAlarm, baseAlarmType, records.get(0), alarmId);
|
|
|
+
|
|
|
+ if (records3.get(0).getNoticeMethod().contains("电话")) {
|
|
|
+ handleVoiceNotice(sysUser, baseAlarmNoticeResult, records.get(0), baseAlarmType, baseAlarm);
|
|
|
}
|
|
|
+
|
|
|
+ if (records3.get(0).getNoticeMethod().contains("短信")) {
|
|
|
+ handleSmsNotice(sysUser, baseAlarmNoticeResult, templateParam);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (records3.get(0).getNoticeMethod().contains("APP")) {
|
|
|
+ handleMceNotice(sysUser, baseAlarmNoticeResult, baseAlarm, baseAlarmType, records2.get(0), "1");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (records3.get(0).getNoticeMethod().contains("微信")) {
|
|
|
+ handleMceNotice(sysUser, baseAlarmNoticeResult, baseAlarm, baseAlarmType, records2.get(0), "2");
|
|
|
+ }
|
|
|
+
|
|
|
+ saveAlarmResult = baseMapper.insert(baseAlarmNoticeResult);
|
|
|
}
|
|
|
- }catch (Exception e){
|
|
|
- e.printStackTrace();
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("Error in sending alarm notice", e);
|
|
|
}
|
|
|
return saveAlarmResult;
|
|
|
}
|
|
|
+
|
|
|
+ private String createTemplateParam(BaseAlarm baseAlarm, BaseAlarmType baseAlarmType, DmpDevice device) {
|
|
|
+ return "{\"deviceName\":\"" + device.getDeviceName() + "\"," +
|
|
|
+ "\"time\":\"" + formatAlarmTime(baseAlarm.getAlarmTime()) + "\"," +
|
|
|
+ "\"alarmType\":\"" + baseAlarmType.getTypeName() + "\"," +
|
|
|
+ "\"alarmContent\":\"" + baseAlarm.getAlarmContent() + "\"}";
|
|
|
+ }
|
|
|
+
|
|
|
+ private SysUser getSysUser(String userId) {
|
|
|
+ LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.eq(SysUser::getUserId, userId)
|
|
|
+ .eq(SysUser::getDelFlag, 0);
|
|
|
+ return sysUserMapper.selectOne(queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private BaseAlarmNoticeResult createBaseAlarmNoticeResult(SysUser sysUser, BaseAlarm baseAlarm, BaseAlarmType baseAlarmType, DmpProduct product, Integer alarmId) {
|
|
|
+ BaseAlarmNoticeResult result = new BaseAlarmNoticeResult();
|
|
|
+ result.setReceiver(sysUser.getNickName());
|
|
|
+ result.setReceiverPhone(sysUser.getPhonenumber());
|
|
|
+ result.setAlarmId(alarmId);
|
|
|
+ result.setNoticeTime(LocalDateTime.now());
|
|
|
+ result.setNoticeContent(product.getProductName() + "," + baseAlarmType.getTypeName() + "," + formatAlarmTime(baseAlarm.getAlarmTime()));
|
|
|
+ result.setTenantId(product.getTenantId());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void handleVoiceNotice(SysUser sysUser, BaseAlarmNoticeResult baseAlarmNoticeResult, DmpProduct product, BaseAlarmType baseAlarmType, BaseAlarm baseAlarm) {
|
|
|
+ baseAlarmNoticeResult.setNoticeType(3);
|
|
|
+ try {
|
|
|
+ SingleCallByTtsResponse response = voiceNotice.sendCVoice(sysUser.getPhonenumber(),
|
|
|
+ product.getProductName(), baseAlarmType.getTypeName(),
|
|
|
+ formatAlarmTime(baseAlarm.getAlarmTime()));
|
|
|
+ baseAlarmNoticeResult.setNoticeResult(response.getCode() != null && "OK".equals(response.getCode()) ? 1 : 2);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("用户:{},告警消息电话拨打失败", sysUser.getUserId(), e);
|
|
|
+ baseAlarmNoticeResult.setNoticeResult(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void handleSmsNotice(SysUser sysUser, BaseAlarmNoticeResult baseAlarmNoticeResult, String templateParam) {
|
|
|
+ baseAlarmNoticeResult.setNoticeType(4);
|
|
|
+ try {
|
|
|
+ IAcsClient client = createAcsClient();
|
|
|
+ SendSmsRequest request = new SendSmsRequest();
|
|
|
+ request.setPhoneNumbers(sysUser.getPhonenumber());
|
|
|
+ request.setSignName(SMS_SIGN_NAME);
|
|
|
+ request.setTemplateCode(SMS_TEMPLATE_CODE);
|
|
|
+ request.setTemplateParam(templateParam);
|
|
|
+ SendSmsResponse response = client.getAcsResponse(request);
|
|
|
+ baseAlarmNoticeResult.setNoticeResult(response.getCode() != null && response.getCode().equals("OK") ? 1 : 2);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("用户:{},告警消息短信发送失败", sysUser.getUserId(), e);
|
|
|
+ baseAlarmNoticeResult.setNoticeResult(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private IAcsClient createAcsClient() {
|
|
|
+ DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
|
|
|
+ return new DefaultAcsClient(profile);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 发送消息中心
|
|
|
+ private void handleMceNotice(SysUser sysUser, BaseAlarmNoticeResult baseAlarmNoticeResult, BaseAlarm baseAlarm, BaseAlarmType baseAlarmType, DmpDevice device, String sendType) {
|
|
|
+ MceRequestVO mceRequestVO = createMceRequestVO(sysUser, baseAlarm, baseAlarmType, device, sendType);
|
|
|
+
|
|
|
+ try {
|
|
|
+ remoteMceService.addMceReceive(mceRequestVO);
|
|
|
+ baseAlarmNoticeResult.setNoticeResult(1);
|
|
|
+ } catch (Exception e) {
|
|
|
+ String noticeType = "1".equals(sendType) ? "APP" : "微信";
|
|
|
+ log.error("用户:{},告警消息{}推送失败:", sysUser.getUserId(), noticeType, e);
|
|
|
+ baseAlarmNoticeResult.setNoticeResult(2);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置通知类型
|
|
|
+ baseAlarmNoticeResult.setNoticeType("1".equals(sendType) ? 1 : 2);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建消息请求参数
|
|
|
+ private MceRequestVO createMceRequestVO(SysUser sysUser, BaseAlarm baseAlarm, BaseAlarmType baseAlarmType, DmpDevice device, String sendType) {
|
|
|
+ MceRequestVO mceRequestVO = new MceRequestVO();
|
|
|
+ mceRequestVO.setInfoType(INFO_TYPE);
|
|
|
+ mceRequestVO.setInfoTitle(INFO_TITLE);
|
|
|
+ mceRequestVO.setDeviceId(device.getDeviceId());
|
|
|
+ mceRequestVO.setInfoContent(baseAlarmType.getTypeName());
|
|
|
+ mceRequestVO.setAlarmTime(formatAlarmTime(baseAlarm.getAlarmTime()));
|
|
|
+ mceRequestVO.setAlarmSendType(sendType);
|
|
|
+ mceRequestVO.setRemark(String.format(REMARK_TEMPLATE, device.getDeviceName()));
|
|
|
+ mceRequestVO.setUserIds(Collections.singletonList(sysUser.getUserId()));
|
|
|
+ return mceRequestVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String formatAlarmTime(LocalDateTime alarmTime) {
|
|
|
+ return alarmTime.format(DateTimeFormatter.ofPattern(ALARM_TIME_FORMAT));
|
|
|
+ }
|
|
|
}
|