爱分享666

当前位置:首页 >资讯>站长新闻

/**
 * @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();
      }
   }
}
上一篇:

springboot视频【尚硅谷springboot】_(下)整合篇_压缩版_java视频教程

下一篇:

mysql索引实现原理及mysql存储引擎比较

0 +1
打赏 ×

如果网站能给予您帮助,欢迎给网站捐助,给我打赏个吧!
您的支持是我的动力,让网站能一直陪伴着大家,共同学习进步。
捐助费用将用于网站日常运营(服务器租费、域名租费等)
捐助者请发送邮箱提供姓名至 zhaoqn@163.com 留言以表感谢。

网友评论


  • 验证码:

热门评论

本月热门

推荐资料

精彩评论

回到顶部