fei.wang
2024-05-13 19fe5a3d816184549e8ffa011c39f218734da8d5
src/main/java/com/flow/controller/DuanxinlogController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,291 @@
package com.flow.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.flow.mapper.*;
import com.flow.pojo.*;
import com.flow.service.DuanxinlogService;
import com.flow.service.TbFuwuqiService;
import com.flow.util.DESUtil;
import com.flow.util.result;
import com.flow.util.resultutil;
import com.github.pagehelper.PageInfo;
import com.tencentcloudapi.common.Credential;
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.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import java.text.SimpleDateFormat;
import java.util.*;
@RestController
@RequestMapping({"/hxzk"})
@Component
public class DuanxinlogController {
    private String SecretId = "AKIDrjZOI4e6KLZu9FAsSRN8eOwSt52lbMBz";
    private String SecretKey = "xnRtHUL3YqdMyOLVSBjKkz1pQoxujS4d";
    @Autowired
    DuanxinlogService duanxinlogService;
    @Autowired
    CardMapper cardMapper;
    @Autowired
    TbFuwuqiMapper tbFuwuqiMapper;
    @Autowired
    DuanxinlogMapper duanxinlogMapper;
    @Autowired
    TbFuwuqiService tbFuwuqiService;
    @Autowired
    CompanyMapper companyMapper;
    @Autowired
    ManagerMapper managerMapper;
    @GetMapping({"findDuanxinlog"})
    result<List<Duanxinlog>> findDuanxinlog(Integer page, Integer limit) {
        PageInfo<Duanxinlog> cz = this.duanxinlogService.FindDuanxinlog(page, limit);
        return resultutil.returnSuccess(cz.getTotal(), cz.getList());
    }
    @PostMapping({"DeleteDuanxinlog"})
    public ModelAndView DeleteManager(String num) {
        this.duanxinlogService.DeleteDuanxinlog(num);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/page/Duanxinlog.jsp");
        return modelAndView;
    }
    /*
     * å‡½æ•°å     : smsfuwuqi
     * è¯´æ˜Ž      :
                        æœåС噍
                        æŸ¥è¯¢æ‰€æœ‰æœåŠ¡å™¨æ•°æ®
                        æ ¹æ®å…¬å¸åç§°æŸ¥è¯¢ç”µè¯
                        ä½¿ç”¨å½“前时间减去结束时间
                        ä½¿ç”¨å·ç æŸ¥è¯¢çŸ­ä¿¡è¡¨å–出发送日期,如果当前日期大于发送日期
                        å‘送短信
     * è¿”回值            : æ— 
     * ä½œè€…            : çŽ‹é£ž
//     * æ—¥æœŸ    : 2024å¹´2月28日
     */
//    @EnableScheduling
//    @Scheduled(cron = "*/10 * * * * ?")//测试10一次
//    @Scheduled(cron = "0 46 17 * * ?")
    @Scheduled(cron = "0 0 */1 * * ?")//一小时执行一次
    public void smsfuwuqi() throws Exception {
        System.out.println("服务器定时器执行============》》》》》》》》》》》》》》》》");
        QueryWrapper queryWrapper1 = new QueryWrapper();
        queryWrapper1.eq("none", "0");
        List<TbFuwuqi> fuwuqiList = (tbFuwuqiMapper).selectList(queryWrapper1);
        for (int i = 0; i < fuwuqiList.size(); i++) {
            QueryWrapper queryWrapper3 = new QueryWrapper();
            queryWrapper3.eq("none", "0");
            queryWrapper3.eq("companyName", fuwuqiList.get(i).getCompany());
            Company companyList = (companyMapper).selectOne(queryWrapper3);
            SimpleDateFormat date2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            Date endDay = date2.parse(fuwuqiList.get(i).getEnddate());//结束时间
            Long starTime = date.getTime();
            Long endTime = endDay.getTime();
            Long num11 = endTime - starTime;//时间戳
            //不足一天的算作一天,因此在到期天数上加1
            if (+num11 / 24 / 60 / 60 / 1000 == 19 | +num11 / 24 / 60 / 60 / 1000 == 9 | +num11 / 24 / 60 / 60 / 1000 == 4 | +num11 / 24 / 60 / 60 / 1000 == 0) {
                String dispatchDate = this.duanxinlogService.userdate(fuwuqiList.get(i).getServername());
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                String dtext = formatter.format(date);
                if (dispatchDate == null || !dtext.equals(dispatchDate)) {
                    // å®žä¾‹åŒ–一个认证对象,入参需要传入腾讯云账户 SecretId å’Œ SecretKey,此处还需注意密钥对的保密
                    // ä»£ç æ³„露可能会导致 SecretId å’Œ SecretKey æ³„露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
                    // å¯†é’¥å¯å‰å¾€å®˜ç½‘控制台 https://console.cloud.tencent.com/cam/capi è¿›è¡ŒèŽ·å–
                    Credential cred = new Credential(SecretId, SecretKey);
                    // å®žä¾‹åŒ–一个http选项,可选的,没有特殊需求可以跳过
                    HttpProfile httpProfile = new HttpProfile();
                    httpProfile.setEndpoint("sms.tencentcloudapi.com");
                    // å®žä¾‹åŒ–一个client选项,可选的,没有特殊需求可以跳过
                    ClientProfile clientProfile = new ClientProfile();
                    clientProfile.setHttpProfile(httpProfile);
                    // å®žä¾‹åŒ–要请求产品的client对象,clientProfile是可选的
                    SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
                    // å®žä¾‹åŒ–一个请求对象,每个接口都会对应一个request对象
                    SendSmsRequest req = new SendSmsRequest();
//                    String[] phoneNumberSet1 = {"18701153496"};
                    String[] phoneNumberSet1 = {DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key)};
                    QueryWrapper sms = new QueryWrapper();
                    sms.eq("none", "0");
                    sms.eq("smsreception", "1");
                    List<Manager> managerList = (managerMapper).selectList(sms);
                    for (int s=0;s<managerList.size();s++){
//                        System.out.println(managerList.get(s).getPhone());
//                        phoneNumberSet1[s] = managerList.get(s).getPhone();
                        String[] phoneNumberSet12  = {managerList.get(s).getPhone()};
                        System.out.println(phoneNumberSet12);
                        req.setPhoneNumberSet(phoneNumberSet12);
                        req.setSmsSdkAppId("1400838975");
                        req.setSignName("北京华星北斗智控");
                        req.setTemplateId("2100321");
//                    String[] templateParamSet1 = {String.valueOf(+num11 / 24 / 60 / 60 / 1000)};
                        String[] templateParamSet1 = {String.valueOf("您有流量卡将于:"  + fuwuqiList.get(i).getEnddate()+"到期,")};
                        req.setTemplateParamSet(templateParamSet1);
                        // è¿”回的resp是一个SendSmsResponse的实例,与请求对象对应
                        SendSmsResponse resp = client.SendSms(req);
                    }
                    req.setPhoneNumberSet(phoneNumberSet1);
                    req.setSmsSdkAppId("1400838975");
                    req.setSignName("北京华星北斗智控");
                    req.setTemplateId("2100321");
//                    String[] templateParamSet1 = {String.valueOf(+num11 / 24 / 60 / 60 / 1000)};
                    String[] templateParamSet1 = {String.valueOf("您有服务器将于:"  + fuwuqiList.get(i).getEnddate()+"到期,")};
                    req.setTemplateParamSet(templateParamSet1);
                    // è¿”回的resp是一个SendSmsResponse的实例,与请求对象对应
                    SendSmsResponse resp = client.SendSms(req);
                    // è¾“出json格式的字符串回包
                    Duanxinlog duanxinlog = new Duanxinlog();
                    duanxinlog.setIdentification(fuwuqiList.get(i).getServername());
                    duanxinlog.setReceiver(fuwuqiList.get(i).getCompany());
                    duanxinlog.setNumber(DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key));
                    duanxinlog.setNumber(DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key));
                    duanxinlog.setContent("尊敬的用户,您好!您有服务器将于"+fuwuqiList.get(i).getEnddate()+"到期,为避免影响您的正常使用请及时续费,您可登录华星智控公司物联网管理平台查询详情续费,如有疑问可咨询我公司客服人员,祝您生活愉快!");
                    this.duanxinlogService.addDuanxinlog(duanxinlog);
                }
            }
        }
    }
    /*
     * å‡½æ•°å     : sms
     * è¯´æ˜Ž      : æŸ¥è¯¢æ‰€æœ‰å¡å·æ•°æ®
                    ä½¿ç”¨å½“前时间减去结束时间
                    ä½¿ç”¨å·ç æŸ¥è¯¢çŸ­ä¿¡è¡¨å–出发送日期,如果当前日期大于发送日期
                        å‘送短信
                        å‘送短信
     * è¿”回值            : æ— 
     * ä½œè€…            : çŽ‹é£ž
//     * æ—¥æœŸ    : 2024å¹´2月28日
     */
//    @EnableScheduling
//    @Scheduled(cron = "*/10 * * * * ?")//测试10秒执行一次
//    @Scheduled(cron = "0 11 16 * * ?")
    @Scheduled(cron = "0 0 */1 * * ?")//一小时执行一次
    public void sms() throws Exception {
        System.out.println("短信定时器执行============》》》》》》》》》》》》》》》》");
        //查询数据库中所有的引擎数据
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("none", "0");
//        queryWrapper.eq("num", "1");
        List<Card> cardList = (cardMapper).selectList(queryWrapper);
        for (int i = 0; i < cardList.size(); i++) {
            QueryWrapper queryWrapper3 = new QueryWrapper();
            queryWrapper3.eq("none", "0");
            queryWrapper3.eq("companyName", cardList.get(i).getCompany());
            Company companyList = new Company();
            companyList = (companyMapper).selectOne(queryWrapper3);
            if (companyList == null) {
                QueryWrapper queryWrapper4 = new QueryWrapper();
                queryWrapper4.eq("none", "0");
                queryWrapper4.eq("companyabbname", cardList.get(i).getCompany());
                companyList = (companyMapper).selectOne(queryWrapper4);
            }
            SimpleDateFormat date2 = new SimpleDateFormat("yyyy-MM-dd");
            Date date = new Date();
            Date endDay = date2.parse(cardList.get(i).getEnddate());//结束时间
            Long starTime = date.getTime();
            Long endTime = endDay.getTime();
            Long num11 = endTime - starTime;//时间戳
            if (+num11 / 24 / 60 / 60 / 1000 == 19 | +num11 / 24 / 60 / 60 / 1000 == 9 | +num11 / 24 / 60 / 60 / 1000 == 4 | +num11 / 24 / 60 / 60 / 1000 == 0) {
                String dispatchDate = this.duanxinlogService.userdate(cardList.get(i).getCardnumber());
//                    String dispatchDate = this.duanxinlogService.userdate(cardList.get(i).getCardnumber());
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date dtext = formatter.parse(dispatchDate);//结束时间
                Long endTime1 = dtext.getTime();
                if ((endTime1-starTime) / 24 / 60 / 60 / 1000 != 0) {
                    String randomNumber = new String();
                    // å®žä¾‹åŒ–一个认证对象,入参需要传入腾讯云账户 SecretId å’Œ SecretKey,此处还需注意密钥对的保密
                    // ä»£ç æ³„露可能会导致 SecretId å’Œ SecretKey æ³„露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
                    // å¯†é’¥å¯å‰å¾€å®˜ç½‘控制台 https://console.cloud.tencent.com/cam/capi è¿›è¡ŒèŽ·å–
                    Credential cred = new Credential(SecretId, SecretKey);
                    // å®žä¾‹åŒ–一个http选项,可选的,没有特殊需求可以跳过
                    HttpProfile httpProfile = new HttpProfile();
                    httpProfile.setEndpoint("sms.tencentcloudapi.com");
                    // å®žä¾‹åŒ–一个client选项,可选的,没有特殊需求可以跳过
                    ClientProfile clientProfile = new ClientProfile();
                    clientProfile.setHttpProfile(httpProfile);
                    // å®žä¾‹åŒ–要请求产品的client对象,clientProfile是可选的
                    SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile);
                    // å®žä¾‹åŒ–一个请求对象,每个接口都会对应一个request对象
                    SendSmsRequest req = new SendSmsRequest();
//                        String[] phoneNumberSet1 = {cardList.get(i).getCardnumber()};
                    String[] phoneNumberSet1 = {DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key)};
//                    String[] phoneNumberSet1 = {"18701153496"};
                    QueryWrapper sms = new QueryWrapper();
                    sms.eq("none", "0");
                    sms.eq("smsreception", "1");
                    List<Manager> managerList = (managerMapper).selectList(sms);
                    String string = new String();
                    for (int s=0;s<managerList.size();s++){
                        if (s!=0){
                            string+=",";
                        }
                        string += managerList.get(s).getPhone();
                        String[] phoneNumberSet12  = {managerList.get(s).getPhone()};
                        System.out.println(phoneNumberSet12);
                        req.setPhoneNumberSet(phoneNumberSet12);
                        req.setSmsSdkAppId("1400838975");
                        req.setSignName("北京华星北斗智控");
                        req.setTemplateId("2100321");
//                    String[] templateParamSet1 = {String.valueOf(+num11 / 24 / 60 / 60 / 1000)};
                        String[] templateParamSet1 = {String.valueOf("您有流量卡将于:"  + cardList.get(i).getEnddate()+"到期,")};
                        req.setTemplateParamSet(templateParamSet1);
                        // è¿”回的resp是一个SendSmsResponse的实例,与请求对象对应
                        SendSmsResponse resp = client.SendSms(req);
                    }
//                    phoneNumberSet1[managerList.size()] = DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key);
//                    System.out.println(phoneNumberSet1);
                    req.setPhoneNumberSet(phoneNumberSet1);
                    req.setSmsSdkAppId("1400838975");
                    req.setSignName("北京华星北斗智控");
                    req.setTemplateId("2100321");
//                    String[] templateParamSet1 = {String.valueOf(+num11 / 24 / 60 / 60 / 1000)};
                    String[] templateParamSet1 = {String.valueOf("您有流量卡将于:"  + cardList.get(i).getEnddate()+"到期,")};
                    req.setTemplateParamSet(templateParamSet1);
                    // è¿”回的resp是一个SendSmsResponse的实例,与请求对象对应
                    SendSmsResponse resp = client.SendSms(req);
                    System.out.println(SendSmsResponse.toJsonString(resp));
                    // è¾“出json格式的字符串回包
                    Duanxinlog duanxinlog = new Duanxinlog();
                    duanxinlog.setIdentification(cardList.get(i).getCardnumber());
                    duanxinlog.setReceiver(cardList.get(i).getCompany());
                    duanxinlog.setNumber(string);
                    duanxinlog.setContent("尊敬的用户,您好!您有流量卡将于"+cardList.get(i).getEnddate()+"到期,为避免影响您的正常使用请及时续费,您可登录华星智控公司物联网管理平台查询详情续费,如有疑问可咨询我公司客服人员,祝您生活愉快!"
                    );
                    this.duanxinlogService.addDuanxinlog(duanxinlog);
                }
            }
        }
    }
}