对比新文件 |
| | |
| | | package com.gk.firework.Scheduls.WarningTask; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.gk.firework.Domain.*; |
| | | import com.gk.firework.Domain.Utils.HttpUtils; |
| | | import com.gk.firework.Domain.Utils.StringUtils; |
| | | import com.gk.firework.Domain.Vo.WarnContentVo; |
| | | import com.gk.firework.Service.*; |
| | | import org.apache.log4j.LogManager; |
| | | import org.apache.log4j.Logger; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.scheduling.annotation.EnableScheduling; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLEncoder; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | |
| | | @Configuration |
| | | @EnableScheduling |
| | | @ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true") |
| | | public class MessageSendTask { |
| | | private Logger logger = LogManager.getLogger(MessageSendTask.class); |
| | | @Autowired |
| | | SmsLogService smsLogService; |
| | | @Autowired |
| | | WarnContentService warnContentService; |
| | | @Autowired |
| | | SaleOrderService saleOrderInfoService; |
| | | @Autowired |
| | | EnterpriseService enterpriseService; |
| | | @Autowired |
| | | UserService userService; |
| | | @Autowired |
| | | RegisterService registerService; |
| | | |
| | | public static String key = "f89279278b739f972ed922fa708eafa0"; |
| | | public final static String URL = "http://v.juhe.cn/sms/send"; |
| | | |
| | | |
| | | @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次 |
| | | private void EmailSend() throws UnsupportedEncodingException, InterruptedException { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | Date now = new Date(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(now); |
| | | calendar.add(Calendar.MINUTE, -10); |
| | | Date starttime = calendar.getTime(); |
| | | String starttimeStr = sdf.format(starttime); |
| | | String endtimeStr = sdf.format(now); |
| | | |
| | | //查询10分钟内需要发短信,但又没发送过的记录 |
| | | List<WarnContentVo> warnContentInfoList = warnContentService.selectNeedMail(starttimeStr,endtimeStr); |
| | | if (warnContentInfoList.size() > 0) { |
| | | for (WarnContentVo warnContentInfo : warnContentInfoList){ |
| | | if (warnContentInfo.getWarntype().equals("购买超量")){ |
| | | Long enterpriseid = saleOrderInfoService.selectByCustomer(warnContentInfo.getCustomid()); |
| | | List<String> mobiles = selectMobilesByEnterprise(enterpriseid); |
| | | String content = "姓名:"+warnContentInfo.getPurchasename()+",身份证号:"+warnContentInfo.getIdcard()+" "+warnContentInfo.getWarncontent(); |
| | | String head = ""; |
| | | boolean issend = sendMessage(head,mobiles,content); |
| | | if (issend){ |
| | | warnContentInfo.setIssend((byte)1); |
| | | warnContentService.updateById(warnContentInfo); |
| | | } |
| | | }else if (warnContentInfo.getWarntype().equals("库存超量")){ |
| | | List<String> mobiles = selectMobilesByEnterprise(warnContentInfo.getEnterpriseid()); |
| | | String content = "企业名称:"+warnContentInfo.getEnterprisename()+","+warnContentInfo.getWarncontent(); |
| | | String head = ""; |
| | | boolean issend = sendMessage(head,mobiles,content); |
| | | if (issend){ |
| | | warnContentInfo.setIssend((byte)1); |
| | | warnContentService.updateById(warnContentInfo); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次 |
| | | private void registerEmailSend() throws UnsupportedEncodingException { |
| | | List<RegisterInfo> registerInfos = registerService.needSendSmsList(); |
| | | if (registerInfos.size() > 0){ |
| | | for (RegisterInfo registerInfo : registerInfos){ |
| | | String tplId; |
| | | if (registerInfo.getReviewresult().equals((byte)1)){ |
| | | tplId = "235091"; |
| | | }else { |
| | | tplId = "235094"; |
| | | } |
| | | boolean isSend = sendSms(registerInfo.getEnterprisename(),registerInfo.getLegalpersonphone(),tplId); |
| | | if (isSend){ |
| | | registerInfo.setSmsat(new Date()); |
| | | registerInfo.setSmstimes(registerInfo.getSmstimes()+1); |
| | | registerInfo.setIssms((byte)1); |
| | | registerService.updateById(registerInfo); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | // private boolean issendTest = false; |
| | | // @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次 |
| | | // private void EmailSendTest() throws UnsupportedEncodingException, InterruptedException { |
| | | // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | // Date now = new Date(); |
| | | // Calendar calendar = Calendar.getInstance(); |
| | | // calendar.setTime(now); |
| | | // calendar.add(Calendar.MINUTE, -10); |
| | | // Date starttime = calendar.getTime(); |
| | | // |
| | | // List<String> mobiles = new ArrayList<>(); |
| | | // mobiles.add("15651251027"); |
| | | // String content = "测试短信"; |
| | | // String head = ""; |
| | | // if (!issendTest){ |
| | | // issendTest = sendMessage(head,mobiles,content); |
| | | // } |
| | | // } |
| | | |
| | | |
| | | |
| | | private List<String> selectMobilesByEnterprise(Long enterpriseid) { |
| | | List<String> mobiles = new ArrayList<> (); |
| | | //先查直属监管部门,若不存在则再查上一级,直到查到对应监管部门用户 |
| | | Enterprise enterprise = enterpriseService.getById(enterpriseid); |
| | | UserInfo userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),enterprise.getDistrict(),enterprise.getStreet(),enterprise.getCommittee()); |
| | | if (userInfo == null){ |
| | | userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),enterprise.getDistrict(),enterprise.getStreet(),null); |
| | | if (userInfo == null){ |
| | | userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),enterprise.getDistrict(),null,null); |
| | | if (userInfo == null){ |
| | | userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),null,null,null); |
| | | if (userInfo == null){ |
| | | userInfo = userService.selectSupervise(enterprise.getProvince(),null,null,null,null); |
| | | if (userInfo == null){ |
| | | userInfo = userService.selectSupervise(null,null,null,null,null); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (userInfo != null && StringUtils.isNotBlank(userInfo.getMobile())){ |
| | | mobiles.add(userInfo.getMobile()); |
| | | } |
| | | return mobiles; |
| | | } |
| | | |
| | | |
| | | public Boolean sendMessage(String head,List<String> mobiles,String content) throws UnsupportedEncodingException { |
| | | String url ="http://v.juhe.cn/sms/send";//请求接口地址 |
| | | String tpl_id = "231913"; |
| | | String dtype = "json"; |
| | | String tpl_value = "#name#=" + head + "&#code#=" + content; |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); |
| | | SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59"); |
| | | Date now = new Date(); |
| | | String starttime = sdfstart.format(now); |
| | | String endtime = sdfend.format(now); |
| | | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(now); |
| | | calendar.add(Calendar.HOUR_OF_DAY, -1); |
| | | Date onehour = calendar.getTime(); |
| | | String onehourstart = sdf.format(onehour); |
| | | String onehourend = sdf.format(now); |
| | | |
| | | boolean issend = false; |
| | | for (String mobile : mobiles) { |
| | | /**运营商限制同1个号码同1个签名的内容1分钟内只能接收1条,10分钟3条,1小时内4条,一天20条,否则可能会被运营商屏蔽**/ |
| | | SmsLogInfo smsLogInfo = smsLogService.selectByTel(mobile,starttime,endtime,(byte)2); |
| | | if (null != smsLogInfo && smsLogInfo.getTimes()>=20){ |
| | | logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",当天已发出20条,无法继续发送"); |
| | | continue; |
| | | } |
| | | SmsLogInfo smsLogInfoHour = smsLogService.selectByTel(mobile,onehourstart,onehourend,(byte)1); |
| | | if (null != smsLogInfoHour && smsLogInfoHour.getTimes()>=4){ |
| | | logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",本小时已发出4条,无法继续发送"); |
| | | continue; |
| | | } |
| | | String respnse = null; |
| | | Map params = new HashMap();//请求参数 |
| | | params.put("mobile", mobile);//接收短信的手机号码 |
| | | params.put("tpl_id", tpl_id);//短信模板ID,请参考个人中心短信模板设置 |
| | | params.put("tpl_value", tpl_value); |
| | | params.put("key", key);//应用APPKEY(应用详细页查询) |
| | | params.put("dtype", dtype);//返回数据的格式,xml或json,默认json |
| | | try { |
| | | respnse = HttpUtils.net(url, params, "GET"); |
| | | JSONObject jsonResult = JSONObject.parseObject(respnse); |
| | | String errorcode = jsonResult.getString("error_code"); |
| | | String reason = jsonResult.getString("reason"); |
| | | if (errorcode.equals("0")) { |
| | | //增加发送次数 |
| | | JSONObject result = jsonResult.getJSONObject("result"); |
| | | Integer count = result.getInteger("count"); |
| | | if (null != smsLogInfo){ |
| | | smsLogInfo.setTimes(smsLogInfo.getTimes()+count); |
| | | smsLogService.updateById(smsLogInfo); |
| | | }else { |
| | | SmsLogInfo smsLogInfo1 = new SmsLogInfo(); |
| | | smsLogInfo1.setMobile(mobile); |
| | | smsLogInfo1.setSendtime(now); |
| | | smsLogInfo1.setTimes(count); |
| | | smsLogInfo1.setType((byte)2); |
| | | smsLogService.save(smsLogInfo1); |
| | | } |
| | | issend = true; |
| | | if (null != smsLogInfoHour){ |
| | | smsLogInfoHour.setTimes(smsLogInfoHour.getTimes()+count); |
| | | smsLogService.updateById(smsLogInfoHour); |
| | | }else { |
| | | SmsLogInfo smsLogInfo1 = new SmsLogInfo(); |
| | | smsLogInfo1.setMobile(mobile); |
| | | smsLogInfo1.setSendtime(now); |
| | | smsLogInfo1.setTimes(count); |
| | | smsLogInfo1.setType((byte)1); |
| | | smsLogService.save(smsLogInfo1); |
| | | } |
| | | } else { |
| | | logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + "发送短信失败,原因为:" + reason); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | return issend; |
| | | } |
| | | |
| | | public Boolean sendSms(String head, String mobile, String tplId) throws UnsupportedEncodingException { |
| | | String dtype = "json"; |
| | | String tplValue = "#name#=" + head; |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); |
| | | SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59"); |
| | | Date now = new Date(); |
| | | String starttime = sdfstart.format(now); |
| | | String endtime = sdfend.format(now); |
| | | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(now); |
| | | calendar.add(Calendar.HOUR_OF_DAY, -1); |
| | | Date onehour = calendar.getTime(); |
| | | String onehourstart = sdf.format(onehour); |
| | | String onehourend = sdf.format(now); |
| | | |
| | | boolean isSend = false; |
| | | |
| | | /** 运营商限制同1个号码同1个签名的内容1分钟内只能接收1条,10分钟3条,1小时内4条,一天20条,否则可能会被运营商屏蔽 **/ |
| | | SmsLogInfo smsLogInfo = smsLogService.selectByTel(mobile,starttime,endtime,(byte)2); |
| | | if (null != smsLogInfo && smsLogInfo.getTimes()>= 20){ |
| | | logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",当天已发出20条,无法继续发送"); |
| | | return false; |
| | | } |
| | | SmsLogInfo smsLogInfoHour = smsLogService.selectByTel(mobile,onehourstart,onehourend,(byte)1); |
| | | if (null != smsLogInfoHour && smsLogInfoHour.getTimes()>= 4){ |
| | | logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",本小时已发出4条,无法继续发送"); |
| | | return false; |
| | | } |
| | | String response; |
| | | Map params = new HashMap();//请求参数 |
| | | params.put("mobile", mobile);//接收短信的手机号码 |
| | | params.put("tpl_id", tplId);//短信模板ID,请参考个人中心短信模板设置 |
| | | params.put("tpl_value", tplValue); |
| | | params.put("key", key);//应用APPKEY(应用详细页查询) |
| | | params.put("dtype", dtype);//返回数据的格式,xml或json,默认json |
| | | try { |
| | | response = HttpUtils.net(URL, params, "GET"); |
| | | JSONObject jsonResult = JSONObject.parseObject(response); |
| | | String errorcode = jsonResult.getString("error_code"); |
| | | String reason = jsonResult.getString("reason"); |
| | | if (errorcode.equals("0")) { |
| | | //增加发送次数 |
| | | JSONObject result = jsonResult.getJSONObject("result"); |
| | | Integer count = result.getInteger("count"); |
| | | if (null != smsLogInfo){ |
| | | smsLogInfo.setTimes(smsLogInfo.getTimes()+count); |
| | | smsLogService.updateById(smsLogInfo); |
| | | }else { |
| | | SmsLogInfo smsLogInfo1 = new SmsLogInfo(); |
| | | smsLogInfo1.setMobile(mobile); |
| | | smsLogInfo1.setSendtime(now); |
| | | smsLogInfo1.setTimes(count); |
| | | smsLogInfo1.setType((byte)2); |
| | | smsLogService.save(smsLogInfo1); |
| | | } |
| | | isSend = true; |
| | | if (null != smsLogInfoHour){ |
| | | smsLogInfoHour.setTimes(smsLogInfoHour.getTimes()+count); |
| | | smsLogService.updateById(smsLogInfoHour); |
| | | }else { |
| | | SmsLogInfo smsLogInfo1 = new SmsLogInfo(); |
| | | smsLogInfo1.setMobile(mobile); |
| | | smsLogInfo1.setSendtime(now); |
| | | smsLogInfo1.setTimes(count); |
| | | smsLogInfo1.setType((byte)1); |
| | | smsLogService.save(smsLogInfo1); |
| | | } |
| | | } else { |
| | | logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + "发送短信失败,原因为:" + reason); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return isSend; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |