/** * @discribe 定时扫描短信 * @author zhaoqnan * @time 2019-10-05 */ @Component("SendWaitMessageThread") @PropertySource({"classpath:fix666.properties"}) public class SendWaitMessageThread { // log4j日志 private final Logger logger = LoggerFactory.getLogger(getClass()); @Resource private IMessageSendWaitService messageSendWaitService; @Resource private IMessageSendLogService messageSendLogService; @Resource private IFeigeSmsService feigeSmsService; @Value("${SCAN_THREAD_SEND_SMS_FLAG}") private String SCAN_THREAD_SEND_SMS_FLAG; public void sendWaitMessage() throws Exception { if("true".equals(SCAN_THREAD_SEND_SMS_FLAG)){ MessageSendWait messageSendWait = new MessageSendWait(); List<MessageSendWait> list = messageSendWaitService.MessageSendWaitList(messageSendWait); //20191012 String sendContent = ""; //本次发送的内容 StringBuilder sendMobiles = new StringBuilder("");//本次发送的所有手机号 String smsType = ""; //短信类型 int mobileLimitCount=0; //同一波手机号最多个数 List<MessageSendWait> list2= new ArrayList<>(); for(int i=0;i<list.size();i++) { mobileLimitCount += 1; MessageSendWait newmessageSendWait = list.get(i); if (i == 0) { sendContent = newmessageSendWait.getMesContent(); sendMobiles.append(newmessageSendWait.getMesRescPhone()).append(","); smsType = newmessageSendWait.getSmsType(); list2.add(newmessageSendWait); } else { if (sendContent.equals(newmessageSendWait.getMesContent()) && smsType.equals(newmessageSendWait.getSmsType()) && mobileLimitCount<200) { //短信内容和类型一样,拼接手机号,作为同一波发送 sendMobiles.append(newmessageSendWait.getMesRescPhone()).append(","); list2.add(newmessageSendWait); } else { //part1:内容和类型不一样或者达到发送上限则把上一波短信发送出去,调短信接口,发送一波 //发送代码: sendSms(sendContent, sendMobiles.toString(), smsType,list2); //part2:然后重置下一波发送的内容和手机号 sendContent = newmessageSendWait.getMesContent(); sendMobiles = new StringBuilder(newmessageSendWait.getMesRescPhone()).append(","); smsType = newmessageSendWait.getSmsType(); mobileLimitCount=0; list2= new ArrayList<>(); list2.add(newmessageSendWait); } } //如果list只有1个或者是最后1个,则发送一波 if ( (list.size()==1) || (i==list.size()-1) ) { //发送代码: sendSms(sendContent, sendMobiles.toString(), smsType,list2); } } //20191012 } } /** * 发送短信,删除待发表,并记录日志 */ public void sendSms(String sendContent, String sendMobiles, String smsType,List<MessageSendWait> list){ //发送代码: if ("01".equals(smsType)) { } else { //调短信接口 HashMap<String, Object> sendmap = new HashMap<String, Object>(); sendmap.put("content", sendContent);//短信内容 sendmap.put("mobile", sendMobiles);//接收用户手机号码 String result = StringUtils.trimToEmpty(feigeSmsService.sendCustomSignSms(sendmap)); if(!"".equals(result)){ JSONObject jsonObj = new JSONObject(result); String SendId= StringUtils.trimToEmpty(String.valueOf(jsonObj.get("SendId"))); String Code=StringUtils.trimToEmpty(String.valueOf(jsonObj.get("Code"))); if(list!=null && list.size()>0){ for (int j = 0; j < list.size(); j++) { MessageSendWait newmessageSendWait4 = list.get(j); if("0".equals(Code)){ MessageSendLogBean messageSendLogBean=new MessageSendLogBean(); messageSendLogBean.setMes_state("01"); messageSendLogBean.setId(Snowflake.getId()); messageSendLogBean.setMes_content(sendContent); messageSendLogBean.setMes_plan_time(newmessageSendWait4.getMesPlanTime()); messageSendLogBean.setMes_resc_phone(newmessageSendWait4.getMesRescPhone()); messageSendLogBean.setBilling_count(newmessageSendWait4.getBillingCount()); messageSendLogBean.setPartion_code(newmessageSendWait4.getPartionCode()); messageSendLogBean.setShop_id(newmessageSendWait4.getShopId()); messageSendLogBean.setSms_type("02"); messageSendLogBean.setSend_id(SendId); boolean flag=messageSendLogService.addMessageSendLog(messageSendLogBean); if(flag){ logger.info("插入短信日志表成功"); }else{ logger.error("插入短信日志表失败"); } int delnum = messageSendWaitService.MessageSendWaitByIds(newmessageSendWait4.getId().toString()); if(delnum>0){ logger.info("删除短信待发送数据成功"); }else{ logger.error("删除短信待发送数据失败"); } logger.info("线程定时发送短信待发表成功"); }else{ logger.error("线程定时发送短信待发表失败"); } } } }else{ logger.error("提交短信到飞鸽短信平台返回异常,结果为空"); } } try { //提交到飞鸽平台后停顿300毫秒,飞鸽平台建议一分钟不超过200次 Thread.sleep(300); } catch (Exception e) { e.printStackTrace(); } } }
网友评论