zhitong.yu
2024-06-19 890cb68586fe79d95b37ee0ad78df0d9f7dce796
src/main/java/com/hxzk/util/MyThreadTask.java
@@ -3,8 +3,10 @@
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;
@@ -15,6 +17,7 @@
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;
@@ -30,14 +33,18 @@
    private TbSmsReminderService smsReminderService;
    private SmsLogService smsLogService;
    private WarnTongJiService warnTongJiService;
    public MyThreadTask(WarningService warningService,TbSmsReminderService smsReminderService,SmsLogService smsLogService) {
    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 {
@@ -48,54 +55,80 @@
                //循环短信提示(根据类型)查找需要发送短信的告警
                for (int i = 0 ; i< smsReminders.size();i++){
                    String type = smsReminders.get(i).getSmstype();
                    //拿着当前type 在数据库中查询在之前6秒和现在满足告警条件的数据
                    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());
                           }
                    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{
                            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());
                            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(5000); // 线程休眠5秒
                Thread.sleep(thr); // 线程休眠5秒
            }
        } catch (InterruptedException e) {
            // 处理线程中断异常
@@ -111,6 +144,23 @@
        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 {