package com.flow.controller; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.alipay.api.kms.aliyun.http.HttpRequest; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.databind.ObjectMapper; 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.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; 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 sun.net.www.http.HttpClient; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Objects; 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> findDuanxinlog(Integer page, Integer limit) { PageInfo 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 51 15 * * ?") // @Scheduled(cron = "0 0 */1 * * ?")//一小时执行一次 @Scheduled(cron = "0 0/60 8-22 * * ?")//8点到10点每10分钟执行一次 public void smsfuwuqi() throws Exception { System.out.println("服务器定时器执行============》》》》》》》》》》》》》》》》"); QueryWrapper queryWrapper1 = new QueryWrapper(); queryWrapper1.eq("none", "0"); List 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"); 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()); if (dispatchDate == null) { // 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) { // 实例化一个认证对象,入参需要传入腾讯云账户 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"}; // if (phone.split("[,,]").length>1){ // // } QueryWrapper sms = new QueryWrapper(); sms.eq("none", "0"); sms.eq("smsreception", "1"); List 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("2318088"); // 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); } String phone = DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key); for (int j = 0; j < phone.split("[,,]").length; j++) { String[] phoneNumberSet1 = {phone.split("[,,]")[j]}; req.setPhoneNumberSet(phoneNumberSet1); req.setSmsSdkAppId("1400838975"); req.setSignName("北京华星北斗智控"); req.setTemplateId("2318088"); // 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(phone.split("[,,]")[j]); // duanxinlog.setNumber(DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key)); duanxinlog.setContent("尊敬的用户,您好!您有服务器将于" + fuwuqiList.get(i).getEnddate() + "到期,为避免影响您的正常使用请及时续费,您可登录华星智控公司物联网管理平台查询详情续费,如有疑问可咨询我公司客服人员,祝您生活愉快!"); this.duanxinlogService.addDuanxinlog(duanxinlog); } // } } else { 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) { // 实例化一个认证对象,入参需要传入腾讯云账户 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 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("2318088"); // 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); } String phone = DESUtil.decrypt(companyList.getLoginphone(), DESUtil.key); for (int j = 0; j < phone.split("[,,]").length; j++) { String[] phoneNumberSet1 = {phone.split("[,,]")[j]}; req.setPhoneNumberSet(phoneNumberSet1); req.setSmsSdkAppId("1400838975"); req.setSignName("北京华星北斗智控"); req.setTemplateId("2318088"); // 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(phone.split("[,,]")[j]); // 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 48 10 * * ?") // @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 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); // } //// System.out.println("333333"); // 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;//时间戳 //// System.out.println("22222222"); //// System.out.println(+num11 / 24 / 60 / 60 / 1000); // 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) { // System.out.println("1111111111111111111"); // String dispatchDate = this.duanxinlogService.userdate(cardList.get(i).getCardnumber()); // if (dispatchDate==null){ //// 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 managerList = (managerMapper).selectList(sms); // String string = new String(); // for (int s=0;s 0); // if ((starTime-endTime1) / 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 managerList = (managerMapper).selectList(sms); // String string = new String(); // for (int s=0;s companyList = (companyMapper).selectList(queryWrapper); //获取当前年月日时间 SimpleDateFormat date2 = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); String s = date2.format(date); for (int i = 0; i < companyList.size(); i++) { //判断条件是否发送短信和发送短信日期 if (!Objects.equals(companyList.get(i).getSenddate(), s)) { //根据公司名称查询卡号 List cardList = this.cardMapper.findAllcompanycard(companyList.get(i).getCompanyname(), companyList.get(i).getCompanyabbname()); for (int j = 0; j < cardList.size(); j++) { if (cardList.get(j).getEnddate()!=null){ Date endDay = date2.parse(cardList.get(j).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 == 14) || (+num11 / 24 / 60 / 60 / 1000 == 9) || (+num11 / 24 / 60 / 60 / 1000 == 4) || (+num11 / 24 / 60 / 60 / 1000 == 0)) { //发送短信 // 实例化一个认证对象,入参需要传入腾讯云账户 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.get(i).getLoginphone(), DESUtil.key)}; // String[] phoneNumberSet1 = {"18582279726"}; //查询有接收短信权限的管理员给他们发送短信通知 QueryWrapper sms = new QueryWrapper(); sms.eq("none", "0"); sms.eq("smsreception", "1"); List managerList = (managerMapper).selectList(sms); String string = new String(); System.out.println(cardList.get(j)); for (int s1 = 0; s1 < managerList.size(); s1++) { if (s1 != 0) { string += ","; } string += managerList.get(s1).getPhone(); String[] phoneNumberSet12 = {managerList.get(s1).getPhone()}; System.out.println(phoneNumberSet12); req.setPhoneNumberSet(phoneNumberSet12); req.setSmsSdkAppId("1400838975"); req.setSignName("北京华星北斗智控"); req.setTemplateId("2089627"); String[] templateParamSet1 = {String.valueOf("有使用的物联网卡还有"+(+num11 / 24 / 60 / 60 / 1000+1)),String.valueOf(cardList.get(j).getEnddate())}; req.setTemplateParamSet(templateParamSet1); // 返回的resp是一个SendSmsResponse的实例,与请求对象对应 SendSmsResponse resp = client.SendSms(req); } String phone = DESUtil.decrypt(companyList.get(i).getLoginphone(), DESUtil.key); for (int p = 0; p < phone.split("[,,]").length; p++) { String[] phoneNumberSet1 = {phone.split("[,,]")[p]}; System.out.println(phoneNumberSet1); req.setPhoneNumberSet(phoneNumberSet1); req.setSmsSdkAppId("1400838975"); req.setSignName("北京华星北斗智控"); req.setTemplateId("2089627"); String[] templateParamSet1 = {String.valueOf("有使用的物联网卡还有" + (+num11 / 24 / 60 / 60 / 1000 + 1)), String.valueOf(cardList.get(j).getEnddate())}; req.setTemplateParamSet(templateParamSet1); // String[] templateParamSet1 = {String.valueOf("您有流量卡将于:" + cardList.get(i).getEnddate() + "到期,")}; // req.setTemplateParamSet(templateParamSet1); // 返回的resp是一个SendSmsResponse的实例,与请求对象对应 SendSmsResponse resp = client.SendSms(req); System.out.println(SendSmsResponse.toJsonString(resp)); companyList.get(i).setSenddate(s); //发送短信后修改公司发送短信字段和日期字段 QueryWrapper queryWrapper2 = new QueryWrapper(); queryWrapper2.eq("companyId", companyList.get(i).getCompanyid()); companyMapper.update(companyList.get(i), queryWrapper2); // 输出json格式的字符串回包 Duanxinlog duanxinlog = new Duanxinlog(); duanxinlog.setIdentification(cardList.get(j).getCardnumber()); duanxinlog.setReceiver(cardList.get(j).getCompany()); duanxinlog.setNumber(phone.split("[,,]")[p]); duanxinlog.setContent("您有使用的物联网卡还有" + (+num11 / 24 / 60 / 60 / 1000 + 1) + "天即将到期,请在" + cardList.get(j).getEnddate() + "之前续费,如已续费忽略该提示信息,拒收请回复R" ); this.duanxinlogService.addDuanxinlog(duanxinlog); break; } break; } // } //判断结束日期距当前日期还有多久 } } } } } // @PostMapping({"sendudp"}) // public Boolean sendudp(String message,String phone) { //// String phone = ""; // // 假设物联网卡平台的短信接口地址 // String apiUrl = "https://api.spruceiot.cn/api/v1/sms/send"; // // 假设平台的API密钥 // String apiKey = "your_api_key_here"; // // 假设平台的短信模板ID(如果需要) // String templateId = "your_template_id_here"; // String accessKey = "448c2cedcdce41428a290d144e81ab6e"; // String str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // String accessSecret = "RgoIWycMYGmQfrLwLuT2VWawAhwMO8w7P9zh2dZp"; // // 构造请求参数 // Map params = new HashMap<>(); // params.put("apiKey", apiKey); // params.put("to", phone); // params.put("message", message); // params.put("templateId", templateId); // // try (CloseableHttpClient httpClient = HttpClients.createDefault()) { // HttpPost httpPost = new HttpPost(apiUrl); // httpPost.setHeader("Content-Type", "application/json"); // httpPost.setEntity(new StringEntity(new ObjectMapper().writeValueAsString(params))); // // HttpResponse response = httpClient.execute(httpPost); // HttpEntity responseEntity = response.getEntity(); // // if (response.getStatusLine().getStatusCode() == 200) { // // 发送成功 // return true; // } else { // // 发送失败 // System.out.println("Failed to send SMS: " + EntityUtils.toString(responseEntity)); // return false; // } // } catch (Exception e) { // e.printStackTrace(); // return false; // } // } @PostMapping({"sendudp"}) public JSONObject sendudp(String conext,String phone) throws Exception { String accessKey = "448c2cedcdce41428a290d144e81ab6e"; String str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; String accessSecret = "RgoIWycMYGmQfrLwLuT2VWawAhwMO8w7P9zh2dZp"; String nonce = ""; Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); String Timestamp = dateFormat.format(now); int length = 30; Random random = new Random(); for (int i = length; i > 0; --i) { int index = random.nextInt(str.length()); nonce = nonce + str.charAt(index); } String stringSignTemp = accessKey + nonce + Timestamp; Mac sha256Hmac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKeySpec = new SecretKeySpec(accessSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); sha256Hmac.init(secretKeySpec); byte[] hmacBytes = sha256Hmac.doFinal(stringSignTemp.getBytes(StandardCharsets.UTF_8)); String sign = Base64.getEncoder().encodeToString(hmacBytes); String targetUrl = "https://api.spruceiot.cn/api/v1/sms/send"; URL url = new URL(targetUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setRequestProperty("Accept-Charset", "UTF-8"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); connection.setRequestProperty("Access-Control-Allow-Origin", "http://localhost:8080"); connection.setRequestProperty("AccessKey", accessKey); connection.setRequestProperty("Nonce", nonce); connection.setRequestProperty("Timestamp", Timestamp); connection.setRequestProperty("Sign", sign); // 构造请求体 JSONObject requestBody = new JSONObject(); requestBody.put("msisdn",phone ); requestBody.put("content", conext); // 将请求体写入输出流 OutputStream os = connection.getOutputStream(); os.write(requestBody.toString().getBytes("UTF-8")); os.flush(); os.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); StringBuilder response1 = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response1.append(line); } reader.close(); connection.disconnect(); JSONObject jsonObject = new JSONObject(response1); int code = jsonObject.getInt("code"); String message = jsonObject.getStr("message"); JSONObject result = jsonObject.getJSONObject("result"); // int total1 = result.getInt("total"); // JSONArray list = result.getJSONArray("list"); // for (int i = 0; i < list.size(); ++i) { // JSONObject item = list.getJSONObject(i); // String msisdn = item.getStr("msisdn"); // String iccid = item.getStr("iccid"); // String imsi = item.getStr("imsi"); // System.out.println("msisdn: " + msisdn + ", iccid: " + iccid + ", imsi: " + imsi); // } // if (code!=0){ // return message; // }else{ if (code!=0){ }else{ result.set("eStatus", this.getendlog()); } return jsonObject; // } } public String getendlog( ) throws Exception { String accessKey = "448c2cedcdce41428a290d144e81ab6e"; String str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; String accessSecret = "RgoIWycMYGmQfrLwLuT2VWawAhwMO8w7P9zh2dZp"; String nonce = ""; Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); String Timestamp = dateFormat.format(now); int length = 30; Random random = new Random(); for (int i = length; i > 0; --i) { int index = random.nextInt(str.length()); nonce = nonce + str.charAt(index); } String stringSignTemp = accessKey + nonce + Timestamp; Mac sha256Hmac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKeySpec = new SecretKeySpec(accessSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); sha256Hmac.init(secretKeySpec); byte[] hmacBytes = sha256Hmac.doFinal(stringSignTemp.getBytes(StandardCharsets.UTF_8)); String sign = Base64.getEncoder().encodeToString(hmacBytes); String targetUrl = "https://api.spruceiot.cn/api/v1/sms/log/query?pageIndex=1&pageSize=1"; URL url = new URL(targetUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("Accept-Charset", "UTF-8"); connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); connection.setRequestProperty("Access-Control-Allow-Origin", "http://localhost:8080"); connection.setRequestProperty("AccessKey", accessKey); connection.setRequestProperty("Nonce", nonce); connection.setRequestProperty("Timestamp", Timestamp); connection.setRequestProperty("Sign", sign); connection.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); StringBuilder response1 = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response1.append(line); } reader.close(); connection.disconnect(); JSONObject jsonObject = new JSONObject(response1); int code = jsonObject.getInt("code"); String message = jsonObject.getStr("message"); JSONObject result = jsonObject.getJSONObject("result"); JSONArray list = result.getJSONArray("list"); // if (code!=0){ // return ""; // }else{ // return result.get("status").toString(); // } // for (int i = 0; i < list.size(); ++i) { JSONObject item = list.getJSONObject(0); // String msisdn = item.getStr("msisdn"); // String iccid = item.getStr("iccid"); // String imsi = item.getStr("imsi"); // System.out.println("msisdn: " + msisdn + ", iccid: " + iccid + ", imsi: " + imsi); // } if (item.get("status")=="3"){ return item.get("message").toString(); }else{ return item.get("status").toString(); } } @PostMapping({"send"}) public ModelAndView send(String phone,Integer id,String vname,String enddate) throws Exception { SimpleDateFormat date2 = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); String s = date2.format(date); QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("none", "0"); queryWrapper.eq("num", id); Card cardList = (cardMapper).selectOne(queryWrapper); Date endDay = date2.parse(enddate);//结束时间 Long starTime = date.getTime(); Long endTime = endDay.getTime(); Long num11 = endTime - starTime;//时间戳 //判断结束日期距当前日期还有多久 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("2089627"); String[] templateParamSet1 = {String.valueOf("有使用的物联网卡还有"+num11 / 24 / 60 / 60 / 1000),String.valueOf(enddate)}; req.setTemplateParamSet(templateParamSet1); // 返回的resp是一个SendSmsResponse的实例,与请求对象对应 SendSmsResponse resp = client.SendSms(req); System.out.println(SendSmsResponse.toJsonString(resp)); Company companyList = this.companyMapper.findAllcompanycompany(cardList.getCompany()); companyList.setSenddate(s); //发送短信后修改公司发送短信字段和日期字段 QueryWrapper queryWrapper2 = new QueryWrapper(); queryWrapper2.eq("companyId", companyList.getCompanyid()); companyMapper.update(companyList, queryWrapper2); // 输出json格式的字符串回包 Duanxinlog duanxinlog = new Duanxinlog(); duanxinlog.setIdentification(cardList.getCardnumber()); duanxinlog.setReceiver(cardList.getCompany()); duanxinlog.setNumber(phone); duanxinlog.setContent("您有使用的物联网卡还有"+num11 / 24 / 60 / 60 / 1000+"天即将到期,请在" + cardList.getEnddate() + "之前续费,如已续费忽略该提示信息,拒收请回复R" ); this.duanxinlogService.addDuanxinlog(duanxinlog); ModelAndView modelAndView = new ModelAndView(); if (Objects.equals(vname, "index")){ modelAndView.setViewName("/page/index1.jsp"); }else{ modelAndView.setViewName("/page/XinXi.jsp"); } return modelAndView; } @PostMapping({"sendfuwu"}) public ModelAndView sendfuwu(String phone,Integer id,String vname) throws Exception { SimpleDateFormat date2 = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); String s = date2.format(date); QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("none", "0"); queryWrapper.eq("id", id); TbFuwuqi fuwuqiList = (tbFuwuqiMapper).selectOne(queryWrapper); 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("2100321"); String[] templateParamSet1 = {String.valueOf("您有服务器将于:" + fuwuqiList.getEnddate() + "到期,")}; req.setTemplateParamSet(templateParamSet1); // 返回的resp是一个SendSmsResponse的实例,与请求对象对应 SendSmsResponse resp = client.SendSms(req); System.out.println(SendSmsResponse.toJsonString(resp)); Company companyList = this.companyMapper.findAllcompanycompany(fuwuqiList.getCompany()); companyList.setSenddate(s); //发送短信后修改公司发送短信字段和日期字段 QueryWrapper queryWrapper2 = new QueryWrapper(); queryWrapper2.eq("companyId", companyList.getCompanyid()); companyMapper.update(companyList, queryWrapper2); // 输出json格式的字符串回包 Duanxinlog duanxinlog = new Duanxinlog(); duanxinlog.setIdentification(fuwuqiList.getServername()); duanxinlog.setReceiver(fuwuqiList.getCompany()); duanxinlog.setNumber(phone); duanxinlog.setContent("尊敬的用户,您好!您有服务器将于" + fuwuqiList.getEnddate() + "到期,为避免影响您的正常使用请及时续费,您可登录华星智控公司物联网管理平台查询详情续费,如有疑问可咨询我公司客服人员,祝您生活愉快!" ); this.duanxinlogService.addDuanxinlog(duanxinlog); ModelAndView modelAndView = new ModelAndView(); if (Objects.equals(vname, "index")){ modelAndView.setViewName("/page/Fuwuqi.jsp"); }else{ modelAndView.setViewName("/page/XinXi.jsp"); } return modelAndView; } }