package com.hxzk.util;
|
|
import com.hxzk.deo.TbWarning;
|
import com.hxzk.pojo.TbSmsLog;
|
import com.hxzk.pojo.TbSmsReminder;
|
import com.hxzk.pojo.WarnTongji;
|
import com.hxzk.service.SmsLogService;
|
import com.hxzk.service.TbSmsReminderService;
|
import com.hxzk.service.WarnTongJiService;
|
import com.hxzk.service.WarningService;
|
import com.tencentcloudapi.common.Credential;
|
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
|
import com.tencentcloudapi.common.profile.ClientProfile;
|
import com.tencentcloudapi.common.profile.HttpProfile;
|
import com.tencentcloudapi.sms.v20210111.SmsClient;
|
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
|
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
|
import org.springframework.stereotype.Component;
|
|
import java.lang.ref.PhantomReference;
|
import java.sql.SQLOutput;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Random;
|
|
@Component
|
public class MyThreadTask implements Runnable {
|
private String SecretId = "AKIDrjZOI4e6KLZu9FAsSRN8eOwSt52lbMBz";
|
private String SecretKey = "xnRtHUL3YqdMyOLVSBjKkz1pQoxujS4d";
|
private WarningService warningService;
|
private TbSmsReminderService smsReminderService;
|
|
private SmsLogService smsLogService;
|
private WarnTongJiService warnTongJiService;
|
|
private Integer thr = 5000;
|
private Integer csSMS = 0;
|
private Integer csOnline = 0;
|
public MyThreadTask(WarningService warningService,TbSmsReminderService smsReminderService,SmsLogService smsLogService,WarnTongJiService warnTongJiService) {
|
this.warningService = warningService;
|
this.smsReminderService = smsReminderService;
|
this.smsLogService = smsLogService;
|
this.warnTongJiService = warnTongJiService;
|
|
}
|
@Override
|
public void run() {
|
try {
|
while (true) {
|
//获取当前定义的短信提示类型
|
List<TbSmsReminder> smsReminders = smsReminderService.findAllSMSReminder();
|
List<Integer> ids = new ArrayList<>();
|
//循环短信提示(根据类型)查找需要发送短信的告警
|
for (int i = 0 ; i< smsReminders.size();i++){
|
String type = smsReminders.get(i).getSmstype();
|
if (type.equals("引擎异常")){
|
//根据现在系统时间查询Warning_TongJi时间
|
List<WarnTongji> warnTongjis = warnTongJiService.findWarnTongJi();
|
long time = GetTimeChaMiao(gettime(),warnTongjis.get(0).getAddtime()); //此方法计算时间差
|
if (time <= -90L){
|
csOnline = 1; //cs离线
|
if (csSMS == 0 && csOnline ==1){
|
smsRemin(smsReminders.get(i).getPhone(),smsReminders.get(i).getMsg());
|
TbSmsLog tbSmsLog = new TbSmsLog();
|
tbSmsLog.setAddtime(gettime());
|
tbSmsLog.setType(type);
|
tbSmsLog.setPhone(smsReminders.get(i).getPhone());
|
tbSmsLog.setMsg(smsReminders.get(i).getMsg());
|
tbSmsLog.setName(smsReminders.get(i).getName());
|
tbSmsLog.setBumen(smsReminders.get(i).getBumen());
|
smsLogService.addSMSLog(tbSmsLog);
|
csSMS = 1;
|
//发送之后修改短信状态为已发送
|
System.out.println("发送成功");
|
}
|
thr = 60000;
|
|
}else{
|
csOnline = 0;//cs在线
|
csSMS = 0;
|
thr = 5000;
|
}
|
}else{
|
List<TbWarning> a = warningService.findNowAll(type);
|
for (int j = 0 ; j <a.size();j++){
|
if (type.equals("SOS")){
|
String[] weizhi = a.get(j).getBaoliu1().split(";");
|
if(a.get(j).getPdepartment().equals(smsReminders.get(i).getBumen())){
|
String sms = smsReminders.get(i).getMsg()+",我的位置,经度:"+weizhi[0]+",纬度:"+weizhi[1]+"我的电话是:"+a.get(j).getPphone()+",我的名称是:"+a.get(j).getPname()+",我的设备编号:"+a.get(j).getPtagid();
|
String phone = smsReminders.get(i).getPhone();
|
smsRemin(phone,sms);
|
//发送成功,则添加日志
|
TbSmsLog tbSmsLog = new TbSmsLog();
|
tbSmsLog.setAddtime(gettime());
|
tbSmsLog.setType(type);
|
tbSmsLog.setPhone(phone);
|
tbSmsLog.setMsg(sms);
|
tbSmsLog.setName(smsReminders.get(i).getName());
|
tbSmsLog.setBumen(smsReminders.get(i).getBumen());
|
smsLogService.addSMSLog(tbSmsLog);
|
//同时修改标识,只发一次短信
|
ids.add(a.get(j).getId());
|
}
|
}else{
|
if(a.get(j).getPdepartment().equals(smsReminders.get(i).getBumen())){
|
String sms = smsReminders.get(i).getMsg()+",我的电话是:"+a.get(j).getPphone()+",我的名称:"+a.get(j).getPname()+",我的设备编号:"+a.get(j).getPtagid();
|
String phone = smsReminders.get(i).getPhone();
|
smsRemin(phone,sms);
|
//发送成功,则添加日志
|
TbSmsLog tbSmsLog = new TbSmsLog();
|
tbSmsLog.setAddtime(gettime());
|
tbSmsLog.setType(type);
|
tbSmsLog.setPhone(phone);
|
tbSmsLog.setMsg(sms);
|
tbSmsLog.setName(smsReminders.get(i).getName());
|
tbSmsLog.setBumen(smsReminders.get(i).getBumen());
|
smsLogService.addSMSLog(tbSmsLog);
|
//同时修改标识,只发一次短信
|
ids.add(a.get(j).getId());
|
}
|
}
|
}
|
}
|
}
|
for (int i = 0;i< ids.size();i++){
|
warningService.updateIDWarning(ids.get(i));
|
}
|
|
Thread.sleep(thr); // 线程休眠5秒
|
}
|
} catch (InterruptedException e) {
|
// 处理线程中断异常
|
e.printStackTrace();
|
}
|
}
|
|
public String gettime(){
|
Date now = new Date();
|
// 创建日期格式化对象,设置格式为 "yyyy-MM-dd HH:mm"
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
// 格式化日期对象,输出字符串结果
|
String formattedDate = sdf.format(now);
|
return formattedDate;
|
}
|
public long GetTimeChaMiao(String time,String warTime){
|
String startTimeStr = time;
|
String endTimeStr = warTime;
|
long differenceSeconds = 0;
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
try {
|
Date startTime = format.parse(startTimeStr);
|
Date endTime = format.parse(endTimeStr);
|
|
long differenceMillis = endTime.getTime() - startTime.getTime();
|
differenceSeconds = differenceMillis / 1000;
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return differenceSeconds;
|
}
|
|
public void smsRemin(String phone,String neirong){
|
try {
|
Credential cred = new Credential(this.SecretId, this.SecretKey);
|
HttpProfile httpProfile = new HttpProfile();
|
httpProfile.setEndpoint("sms.tencentcloudapi.com");
|
ClientProfile clientProfile = new ClientProfile();
|
clientProfile.setHttpProfile(httpProfile);
|
SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
|
SendSmsRequest req = new SendSmsRequest();
|
String[] phoneNumberSet1 = new String[]{phone};
|
req.setPhoneNumberSet(phoneNumberSet1);
|
req.setSmsSdkAppId("1400838975");
|
req.setSignName("北京华星北斗智控");
|
req.setTemplateId("2082020");
|
String[] templateParamSet1 = new String[]{String.valueOf(neirong)};
|
req.setTemplateParamSet(templateParamSet1);
|
SendSmsResponse resp = client.SendSms(req);
|
} catch (TencentCloudSDKException var12) {
|
System.out.println(var12.toString());
|
}
|
}
|
}
|