public int execSmsQuestionnaireDetail(Date date) {
int successCnt = 0;
Example pushPlanExample = new Example(QuestionnaireDetail.class);
Example.Criteria criteria = pushPlanExample.createCriteria();
criteria.andIn("pushWay", Lists.newArrayList(1,4));
criteria.andGreaterThanOrEqualTo("created", date);
int count = questionnaireDetailMapper.selectCountByExample(pushPlanExample);
log.info("短信發送計劃,本次任務待發送{}條", count);
while (count > 0) {
count -= 200;
if (count < 0) {
count = 0;
}
//一次處理200條
RowBounds rowBonds = new RowBounds(count, 200);
List<QuestionnaireDetail> questionnaireDetails = questionnaireDetailMapper.selectByExampleAndRowBounds(pushPlanExample, rowBonds);
log.info("短信發送計劃,有{}條計劃待發送", questionnaireDetails.size());
// 隨機線性訪問這樣的遍歷效率最高
if (questionnaireDetails instanceof RandomAccess) {
log.info("RandomAccess logs");
for (int i = 0; i < questionnaireDetails.size(); i++) {
QuestionnaireDetail bean = questionnaireDetails.get(i);
if (StringUtils.isNotBlank(bean.getSmsContent()) && StringUtils.isNotBlank(bean.getCustomerTel())) {
smsSendService.sendSMS(questionnaireDetails.get(i));
log.info("短信發送計劃smsSendService.sendSMS,發送成功");
successCnt++;
}
}
}
}
return successCnt;
}