فهرست منبع

新增中考成绩下发

Administrator 2 سال پیش
والد
کامیت
bef05ac221

+ 6 - 1
boman-web-core/src/main/java/com/boman/web/core/Thread/SmsThread.java

@@ -7,10 +7,14 @@ package com.boman.web.core.Thread;
 import com.aliyun.dysmsapi20170525.models.SendBatchSmsRequest;
 import com.aliyun.dysmsapi20170525.models.SendBatchSmsResponse;
 import com.boman.common.core.exception.CustomException;
+import com.boman.common.core.utils.SecurityUtils;
 import com.boman.common.core.utils.StringUtils;
 import com.boman.web.core.domain.SendSms;
+import com.boman.web.core.mapper.SendSmsMapper;
 import com.boman.web.core.utils.SendBatchSmsUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -48,7 +52,7 @@ public class SmsThread extends Thread {
         int maxNums = 100; //每次最多发送100条,我们一次批量发100条
         int times = 0;// 循环几个100  用List的长度 除 100
         int size = 0; //
-
+        String operName = "admin";
         List<String> phoneList = new ArrayList<>();
         //List<String> templateList = new ArrayList<>();
         List<String> signNameList = new ArrayList<>();
@@ -114,6 +118,7 @@ public class SmsThread extends Thread {
                     SendBatchSmsResponse sendBatchSmsResponse = SendBatchSmsUtils.sendBatchSms(sendBatchSmsRequest);
                     long endTimeSend = System.currentTimeMillis() - startTimeSend;
                     System.out.println("线程" + Thread.currentThread().getId()+"执行批量下发短信通知接口请求:" + (i+1) + "次,时间"+ endTimeSend + "ms");
+                    SendSms sendSms = new SendSms();
                     if (sendBatchSmsResponse != null) {
                         String code = sendBatchSmsResponse.getBody().getCode();
                         if (sendBatchSmsResponse.getBody().getCode() != null && "OK".equals(code)) {

+ 19 - 0
boman-web-core/src/main/java/com/boman/web/core/controller/SendSmsController.java

@@ -86,6 +86,25 @@ public class SendSmsController extends BaseController
     }
 
 
+    /**
+     * 导入发送短信的中考学科成绩数据
+     * @param file
+     * @param updateSupport
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/importScore")
+    public AjaxResult importScore(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        long startTimeSql = System.currentTimeMillis();
+        ExcelUtil<SendSms> util = new ExcelUtil<SendSms>(SendSms.class);
+        List<SendSms> userList = util.importExcel(file.getInputStream());
+        String operName = SecurityUtils.getUsername();
+        String message = sendSmsService.importScore(userList, updateSupport, operName);
+        long endTimeSql = System.currentTimeMillis() - startTimeSql;
+        System.out.println("执行批量下发短信共:" + endTimeSql + "ms");
+        return AjaxResult.success(message);
+    }
     /**
      * 导入发送短信的中考录取数据
      * @param file

+ 133 - 0
boman-web-core/src/main/java/com/boman/web/core/domain/SendSms.java

@@ -34,6 +34,35 @@ public class SendSms extends BaseEntity
      */
     @Excel(name = "姓名")
     private String name;
+    /**
+     * 年份
+     */
+    @Excel(name = "年份")
+    private String year;
+    @Excel(name = "语文")
+    private String chinese;
+    @Excel(name = "数学")
+    private String mathematics;
+    @Excel(name = "英语")
+    private String english;
+    @Excel(name = "思想品德")
+    private String morality;
+    @Excel(name = "历史")
+    private String history;
+    @Excel(name = "物理")
+    private String physics;
+    @Excel(name = "化学")
+    private String chemistry;
+    @Excel(name = "体育")
+    private String culture;
+    @Excel(name = "实验")
+    private String experiment;
+    @Excel(name = "政策")
+    private String policy;
+    @Excel(name = "总分")
+    private String score;
+    @Excel(name = "短信模板")
+    private String templateCode;
 
     /**
      *录取结果
@@ -64,6 +93,110 @@ public class SendSms extends BaseEntity
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
+    public String getTemplateCode() {
+        return templateCode;
+    }
+
+    public void setTemplateCode(String templateCode) {
+        this.templateCode = templateCode;
+    }
+
+    public String getYear() {
+        return year;
+    }
+
+    public void setYear(String year) {
+        this.year = year;
+    }
+
+    public String getChinese() {
+        return chinese;
+    }
+
+    public void setChinese(String chinese) {
+        this.chinese = chinese;
+    }
+
+    public String getMathematics() {
+        return mathematics;
+    }
+
+    public void setMathematics(String mathematics) {
+        this.mathematics = mathematics;
+    }
+
+    public String getEnglish() {
+        return english;
+    }
+
+    public void setEnglish(String english) {
+        this.english = english;
+    }
+
+    public String getMorality() {
+        return morality;
+    }
+
+    public void setMorality(String morality) {
+        this.morality = morality;
+    }
+
+    public String getHistory() {
+        return history;
+    }
+
+    public void setHistory(String history) {
+        this.history = history;
+    }
+
+    public String getPhysics() {
+        return physics;
+    }
+
+    public void setPhysics(String physics) {
+        this.physics = physics;
+    }
+
+    public String getChemistry() {
+        return chemistry;
+    }
+
+    public void setChemistry(String chemistry) {
+        this.chemistry = chemistry;
+    }
+
+    public String getCulture() {
+        return culture;
+    }
+
+    public void setCulture(String culture) {
+        this.culture = culture;
+    }
+
+    public String getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(String experiment) {
+        this.experiment = experiment;
+    }
+
+    public String getPolicy() {
+        return policy;
+    }
+
+    public void setPolicy(String policy) {
+        this.policy = policy;
+    }
+
+    public String getScore() {
+        return score;
+    }
+
+    public void setScore(String score) {
+        this.score = score;
+    }
+
     @Override
     public Date getCreateTime() {
         return createTime;

+ 9 - 0
boman-web-core/src/main/java/com/boman/web/core/service/sendSms/ISendSmsService.java

@@ -69,6 +69,15 @@ public interface ISendSmsService
      */
     public String importUser(List<SendSms> smsList, Boolean isUpdateSupport, String operName);
 
+    /**
+     * 导入发送短信的中考学科成绩数据
+     * @param smsList
+     * @param isUpdateSupport
+     * @param operName
+     * @return
+     */
+    public String importScore(List<SendSms> smsList, Boolean isUpdateSupport, String operName);
+
     /**
      * 导入下发中考身份信息修改通知
      * @param smsList

+ 122 - 0
boman-web-core/src/main/java/com/boman/web/core/service/sendSms/Impl/SendSmsServiceImpl.java

@@ -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