|
@@ -210,6 +210,128 @@ public class SendSmsServiceImpl implements ISendSmsService {
|
|
|
return backResult;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 导入发送短信的中考学科成绩数据
|
|
|
+ * @param smsList
|
|
|
+ * @param isUpdateSupport
|
|
|
+ * @param operName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String importScore(List<SendSms> smsList, Boolean isUpdateSupport, String operName) {
|
|
|
+
|
|
|
+ if (StringUtils.isNull(smsList) || smsList.size() == 0) {
|
|
|
+ throw new CustomException("导入数据不能为空!");
|
|
|
+ }
|
|
|
+ //短信模板
|
|
|
+ SendSms sendSms1 = smsList.get(0);
|
|
|
+ String templateCode = sendSms1.getTemplateCode();
|
|
|
+ int maxNums = 100; //每次最多发送100条,我们一次批量发100条
|
|
|
+ int times = 0;// 循环几个100 用List的长度 除 100
|
|
|
+ int size = 0; //
|
|
|
+
|
|
|
+ List<String> phoneList = new ArrayList<>();
|
|
|
+ List<String> templateList = new ArrayList<>();
|
|
|
+ List<String> signNameList = new ArrayList<>();
|
|
|
+ StringBuffer phoneNumberJson;
|
|
|
+ StringBuffer templateParamJson;
|
|
|
+ StringBuffer signNameJson;
|
|
|
+ //返回提示
|
|
|
+ String backResult = "";
|
|
|
+ size = smsList.size();
|
|
|
+ if (size < 100) {
|
|
|
+ times = 1;
|
|
|
+ } else {
|
|
|
+ times = (size - 1) / maxNums + 1; //为什么要-1 因为如果是200的时候,理论上次数应该是2,而不是3,如果是101,那么次数也是2,这样就保证次数准确。
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int j = 0; j < times; j++) {
|
|
|
+ if (j > 0 && (j * maxNums + 1 > size)) { //边界判定,如果刚好是100条,那么times的值为2,这时候j 为1的时候 101 大于100结束循环,100条以内不生效
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ phoneNumberJson = new StringBuffer();
|
|
|
+ templateParamJson = new StringBuffer();
|
|
|
+ signNameJson = new StringBuffer();
|
|
|
+ phoneNumberJson.append("[");
|
|
|
+ templateParamJson.append("[");
|
|
|
+ signNameJson.append("[");
|
|
|
+ for (int k = j * maxNums; k < size && k < (j + 1) * maxNums; k++) {
|
|
|
+ // 防止有空行,手机号是必须要有的
|
|
|
+ String phone = smsList.get(k).getPhone();
|
|
|
+ if (StringUtils.isEmpty(phone)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ phoneNumberJson.append("\"" + smsList.get(k).getPhone() + "\",");
|
|
|
+ signNameJson.append("\"潜山市数据资源局\",");
|
|
|
+ templateParamJson.append("{\"year\":\"" + smsList.get(k).getYear() + "\",\"admission\":\"" + smsList.get(k).getTicketId()
|
|
|
+ + "\",\"name\":\"" + smsList.get(k).getName()
|
|
|
+ + "\",\"chinese\":\"" + smsList.get(k).getChinese()
|
|
|
+ + "\",\"mathematics\":\"" + smsList.get(k).getMathematics()
|
|
|
+ + "\",\"english\":\"" + smsList.get(k).getEnglish()
|
|
|
+ + "\",\"morality\":\"" + smsList.get(k).getMorality()
|
|
|
+ + "\",\"history\":\"" + smsList.get(k).getHistory()
|
|
|
+ + "\",\"physics\":\"" + smsList.get(k).getPhysics()
|
|
|
+ + "\",\"chemistry\":\"" + smsList.get(k).getChemistry()
|
|
|
+ + "\",\"culture\":\"" + smsList.get(k).getCulture()
|
|
|
+ + "\",\"experiment\":\"" + smsList.get(k).getExperiment()
|
|
|
+ + "\",\"policy\":\"" + smsList.get(k).getPolicy()
|
|
|
+ + "\",\"score\":\"" + smsList.get(k).getScore() + "\"},");
|
|
|
+ }
|
|
|
+ phoneNumberJson.deleteCharAt(phoneNumberJson.length() - 1);//移除最后一个逗号字符,
|
|
|
+ templateParamJson.deleteCharAt(templateParamJson.length() - 1);//移除最后一个逗号字符
|
|
|
+ signNameJson.deleteCharAt(signNameJson.length() - 1);
|
|
|
+ phoneNumberJson.append("]");
|
|
|
+ templateParamJson.append("]");
|
|
|
+ signNameJson.append("]");
|
|
|
+ phoneList.add(phoneNumberJson.toString());
|
|
|
+ templateList.add(templateParamJson.toString());
|
|
|
+ signNameList.add(signNameJson.toString());
|
|
|
+ }
|
|
|
+ //组装请求对象
|
|
|
+ if (times == phoneList.size()) {
|
|
|
+ for (int i = 0; i < times; i++) {
|
|
|
+ long startTimeSql = System.currentTimeMillis();
|
|
|
+ SendBatchSmsRequest sendBatchSmsRequest = new SendBatchSmsRequest();
|
|
|
+ //组装电话号码
|
|
|
+ sendBatchSmsRequest.setPhoneNumberJson(phoneList.get(i));
|
|
|
+ //签名名称
|
|
|
+ sendBatchSmsRequest.setSignNameJson(signNameList.get(i));
|
|
|
+ //替换参数
|
|
|
+ sendBatchSmsRequest.setTemplateParamJson(templateList.get(i));
|
|
|
+ //固定的模板名称
|
|
|
+ sendBatchSmsRequest.setTemplateCode(templateCode);
|
|
|
+ long endTimeSql = System.currentTimeMillis() - startTimeSql;
|
|
|
+ System.out.println("执行批量下发短信计算:"+i+"次,时间" + endTimeSql + "ms");
|
|
|
+ long startTimeSend = System.currentTimeMillis();
|
|
|
+ SendBatchSmsResponse sendBatchSmsResponse = SendBatchSmsUtils.sendBatchSms(sendBatchSmsRequest);
|
|
|
+ long endTimeSend = System.currentTimeMillis() - startTimeSend;
|
|
|
+ System.out.println("执行批量下发短信接口请求:" + endTimeSend + "ms");
|
|
|
+ SendSms sendSms = new SendSms();
|
|
|
+ if (sendBatchSmsResponse != null) {
|
|
|
+ String code = sendBatchSmsResponse.getBody().getCode();
|
|
|
+ if (sendBatchSmsResponse.getBody().getCode() != null && "OK".equals(code)) {
|
|
|
+ sendSms.setStatus("发送成功");
|
|
|
+ sendSms.setPhone(String.join(",", phoneList));
|
|
|
+ sendSms.setCreateBy(operName);
|
|
|
+ sendSmsMapper.insertSendSms(sendSms);
|
|
|
+ //批量请求发送短信成功
|
|
|
+ System.out.println("批量短信发送成功:" + phoneList.get(i).split(",").length + "条");
|
|
|
+ backResult = backResult +"第"+i+"次批量成功 ";
|
|
|
+ } else {
|
|
|
+ sendSms.setPhone(String.join(",", phoneList));
|
|
|
+ sendSms.setStatus("发送失败");
|
|
|
+ sendSms.setCreateBy(operName);
|
|
|
+ sendSmsMapper.insertSendSms(sendSms);
|
|
|
+ System.out.println("批量短信发送失败!");
|
|
|
+ backResult = backResult +"第"+i+"次批量失败 ";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return backResult;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 导入下发中考身份信息修改通知
|
|
|
* @param smsList
|