licailing vor 4 Jahren
Ursprung
Commit
f1606e5530

+ 32 - 1
src/main/java/com/izouma/wenlvju/domain/TrainingInstitution.java

@@ -1,7 +1,9 @@
 package com.izouma.wenlvju.domain;
 package com.izouma.wenlvju.domain;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.wenlvju.annotations.Searchable;
 import com.izouma.wenlvju.annotations.Searchable;
+import com.izouma.wenlvju.utils.excel.BooleanConverter;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -21,19 +23,24 @@ import java.math.BigDecimal;
 @ApiModel("培训机构")
 @ApiModel("培训机构")
 public class TrainingInstitution extends BaseEntity {
 public class TrainingInstitution extends BaseEntity {
     @Searchable
     @Searchable
+    @ExcelProperty(value = "企业名称")
     @ApiModelProperty("企业名称")
     @ApiModelProperty("企业名称")
     private String name;
     private String name;
 
 
+    @ExcelProperty(value = "注册号")
     @ApiModelProperty("注册号")
     @ApiModelProperty("注册号")
     private String uscc;
     private String uscc;
 
 
+    @ExcelProperty(value = "经营范围")
     @Column(columnDefinition = "TEXT")
     @Column(columnDefinition = "TEXT")
     @ApiModelProperty("经营范围")
     @ApiModelProperty("经营范围")
     private String businessScope;
     private String businessScope;
 
 
+    @ExcelProperty(value = "企业住所")
     @ApiModelProperty("企业住所")
     @ApiModelProperty("企业住所")
     private String address;
     private String address;
 
 
+    @ExcelProperty(value = "生产经营场所")
     @ApiModelProperty("生产经营场所")
     @ApiModelProperty("生产经营场所")
     private String businessPremise;
     private String businessPremise;
 
 
@@ -41,74 +48,98 @@ public class TrainingInstitution extends BaseEntity {
     @ApiModelProperty(value = "法人姓名")
     @ApiModelProperty(value = "法人姓名")
     private String privacyPolicy;
     private String privacyPolicy;
 
 
+    @ExcelIgnore
     @ApiModelProperty(value = "短信号码")
     @ApiModelProperty(value = "短信号码")
     private String phone;
     private String phone;
 
 
+    @ExcelProperty(value = "企业联系方式")
     @ApiModelProperty(value = "企业联系方式")
     @ApiModelProperty(value = "企业联系方式")
     private String contactPhone;
     private String contactPhone;
 
 
+    @ExcelProperty(value = "企业联系方式")
     @ApiModelProperty(value = "所属管区")
     @ApiModelProperty(value = "所属管区")
     private String district;
     private String district;
 
 
+    @ExcelProperty(value = "企业联系方式")
     @ApiModelProperty(value = "注册资本(万)")
     @ApiModelProperty(value = "注册资本(万)")
     private BigDecimal registeredCapital;
     private BigDecimal registeredCapital;
 
 
+    @ExcelProperty(value = "企业联系方式")
     @ApiModelProperty(value = "单位性质")
     @ApiModelProperty(value = "单位性质")
     private String category;
     private String category;
 
 
+    @ExcelProperty(value = "企业联系方式")
     @ApiModelProperty(value = "专业种类")
     @ApiModelProperty(value = "专业种类")
     private String specialty;
     private String specialty;
 
 
+    @ExcelProperty(value = "培训点数量三楼及以下")
     @ApiModelProperty(value = "培训点数量三楼及以下")
     @ApiModelProperty(value = "培训点数量三楼及以下")
     private int trainingSite;
     private int trainingSite;
 
 
+    @ExcelProperty(value = "培训点数量四楼及以上")
     @ApiModelProperty(value = "培训点数量四楼及以上")
     @ApiModelProperty(value = "培训点数量四楼及以上")
     private int trainingSiteFour;
     private int trainingSiteFour;
 
 
+    @ExcelProperty(value = "总面积")
     @ApiModelProperty(value = "总面积")
     @ApiModelProperty(value = "总面积")
     private double area;
     private double area;
 
 
+    @ExcelProperty(value = "教室数量")
     @ApiModelProperty(value = "教室数量")
     @ApiModelProperty(value = "教室数量")
     private int classroomNum;
     private int classroomNum;
 
 
+    @ExcelProperty(value = "教师总数")
     @ApiModelProperty(value = "教师总数")
     @ApiModelProperty(value = "教师总数")
     private int teacherNum;
     private int teacherNum;
 
 
+    @ExcelProperty(value = "专职数量")
     @ApiModelProperty(value = "专职数量")
     @ApiModelProperty(value = "专职数量")
     private int fullTimeNum;
     private int fullTimeNum;
 
 
+    @ExcelProperty(value = "兼职数量")
     @ApiModelProperty(value = "兼职数量")
     @ApiModelProperty(value = "兼职数量")
     private int partTimeNum;
     private int partTimeNum;
 
 
+    @ExcelProperty(value = "音乐类")
     @ApiModelProperty(value = "音乐类")
     @ApiModelProperty(value = "音乐类")
     private int musicNum;
     private int musicNum;
 
 
+    @ExcelProperty(value = "舞蹈类")
     @ApiModelProperty(value = "舞蹈类")
     @ApiModelProperty(value = "舞蹈类")
     private int danceNum;
     private int danceNum;
 
 
+    @ExcelProperty(value = "美术类")
     @ApiModelProperty(value = "美术类")
     @ApiModelProperty(value = "美术类")
     private int artNum;
     private int artNum;
 
 
-    @ApiModelProperty(value = "戏剧戏曲")
+    @ExcelProperty(value = "戏剧戏曲类")
+    @ApiModelProperty(value = "戏剧戏曲类")
     private int theatreOperaNum;
     private int theatreOperaNum;
 
 
+    @ExcelProperty(value = "曲艺类")
     @ApiModelProperty(value = "曲艺类")
     @ApiModelProperty(value = "曲艺类")
     private int folkMusicNum;
     private int folkMusicNum;
 
 
+    @ExcelProperty(value = "有教师资格证")
     @ApiModelProperty(value = "有教师资格证")
     @ApiModelProperty(value = "有教师资格证")
     private int qualificationNum;
     private int qualificationNum;
 
 
+    @ExcelProperty(value = "年培训人数")
     @ApiModelProperty(value = "年培训人数")
     @ApiModelProperty(value = "年培训人数")
     private long traineesPerYearNum;
     private long traineesPerYearNum;
 
 
+    @ExcelProperty(value = "是否是艺术水平考级考点", converter = BooleanConverter.class)
     @ApiModelProperty(value = "是否是艺术水平考级考点")
     @ApiModelProperty(value = "是否是艺术水平考级考点")
     private boolean examPoint;
     private boolean examPoint;
 
 
+    @ExcelProperty(value = "艺术水平考级机构名称")
     @ApiModelProperty(value = "艺术水平考级机构名称")
     @ApiModelProperty(value = "艺术水平考级机构名称")
     private String gradingOrganization;
     private String gradingOrganization;
 
 
+    @ExcelProperty(value = "备注")
     @Column(columnDefinition = "TEXT")
     @Column(columnDefinition = "TEXT")
     @ApiModelProperty(value = "备注")
     @ApiModelProperty(value = "备注")
     private String remark;
     private String remark;
 
 
+    private boolean submit;
 }
 }

+ 3 - 0
src/main/java/com/izouma/wenlvju/repo/TrainingInstitutionRepo.java

@@ -15,5 +15,8 @@ public interface TrainingInstitutionRepo extends JpaRepository<TrainingInstituti
     @Transactional
     @Transactional
     void softDelete(Long id);
     void softDelete(Long id);
 
 
+    @Query("select phone from TrainingInstitution where submit = false and phone is not null")
+    List<String> findAllBySubmitFalseAndPhoneIsNotNull();
+
     List<TrainingInstitution> findAllByNameLike(String name);
     List<TrainingInstitution> findAllByNameLike(String name);
 }
 }

+ 26 - 0
src/main/java/com/izouma/wenlvju/service/TrainingInstitutionService.java

@@ -3,18 +3,44 @@ package com.izouma.wenlvju.service;
 import com.izouma.wenlvju.domain.TrainingInstitution;
 import com.izouma.wenlvju.domain.TrainingInstitution;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.repo.TrainingInstitutionRepo;
 import com.izouma.wenlvju.repo.TrainingInstitutionRepo;
+import com.izouma.wenlvju.service.sms.NjwlSmsService;
 import com.izouma.wenlvju.utils.JpaUtils;
 import com.izouma.wenlvju.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 @Service
 @AllArgsConstructor
 @AllArgsConstructor
 public class TrainingInstitutionService {
 public class TrainingInstitutionService {
 
 
     private TrainingInstitutionRepo trainingInstitutionRepo;
     private TrainingInstitutionRepo trainingInstitutionRepo;
+    private NjwlSmsService          njwlSmsService;
 
 
     public Page<TrainingInstitution> all(PageQuery pageQuery) {
     public Page<TrainingInstitution> all(PageQuery pageQuery) {
         return trainingInstitutionRepo.findAll(JpaUtils.toSpecification(pageQuery, TrainingInstitution.class), JpaUtils.toPageRequest(pageQuery));
         return trainingInstitutionRepo.findAll(JpaUtils.toSpecification(pageQuery, TrainingInstitution.class), JpaUtils.toPageRequest(pageQuery));
     }
     }
+
+    public void batchSend() throws InterruptedException {
+        List<String> phones = trainingInstitutionRepo.findAllBySubmitFalseAndPhoneIsNotNull();
+        int count = phones.size() / 950;
+        String body = "";
+        for (int i = 0; i < count; i++) {
+            int start = i * 950;
+            int end = start + 950;
+            if (end > count) {
+                end = count;
+            }
+            List<String> result = phones.subList(start, end);
+            String sendPhone = String.join(",", result);
+            System.out.println(sendPhone);
+//            njwlSmsService.sendSms(sendPhone, body);
+
+            // 睡眠5分钟
+            Thread.sleep(5 * 60 * 1000);
+        }
+
+    }
 }
 }

+ 1 - 1
src/main/java/com/izouma/wenlvju/service/performance/ParticipantService.java

@@ -30,7 +30,7 @@ public class ParticipantService {
                 Participant orig = participantRepo.findById(participant.getId())
                 Participant orig = participantRepo.findById(participant.getId())
                         .orElseThrow(new BusinessException("无记录"));
                         .orElseThrow(new BusinessException("无记录"));
 
 
-                if (StrUtil.isNotEmpty(participant.getIdNo())) {
+                if (!participant.isDel() && StrUtil.isNotEmpty(participant.getIdNo())) {
                     List<Participant> byIdNo = participantRepo.findByIdNoAndPerformanceId(participant.getIdNo(), participant.getPerformanceId());
                     List<Participant> byIdNo = participantRepo.findByIdNoAndPerformanceId(participant.getIdNo(), participant.getPerformanceId());
                     if (CollUtil.isNotEmpty(byIdNo)) {
                     if (CollUtil.isNotEmpty(byIdNo)) {
                         if (byIdNo.size() > 1) {
                         if (byIdNo.size() > 1) {

+ 10 - 3
src/main/java/com/izouma/wenlvju/web/TrainingInstitutionController.java

@@ -1,4 +1,5 @@
 package com.izouma.wenlvju.web;
 package com.izouma.wenlvju.web;
+
 import com.izouma.wenlvju.domain.TrainingInstitution;
 import com.izouma.wenlvju.domain.TrainingInstitution;
 import com.izouma.wenlvju.service.TrainingInstitutionService;
 import com.izouma.wenlvju.service.TrainingInstitutionService;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.PageQuery;
@@ -8,7 +9,6 @@ import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
@@ -20,14 +20,16 @@ import java.util.List;
 @AllArgsConstructor
 @AllArgsConstructor
 public class TrainingInstitutionController extends BaseController {
 public class TrainingInstitutionController extends BaseController {
     private TrainingInstitutionService trainingInstitutionService;
     private TrainingInstitutionService trainingInstitutionService;
-    private TrainingInstitutionRepo trainingInstitutionRepo;
+    private TrainingInstitutionRepo    trainingInstitutionRepo;
 
 
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @PostMapping("/save")
     public TrainingInstitution save(@RequestBody TrainingInstitution record) {
     public TrainingInstitution save(@RequestBody TrainingInstitution record) {
         if (record.getId() != null) {
         if (record.getId() != null) {
-            TrainingInstitution orig = trainingInstitutionRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            TrainingInstitution orig = trainingInstitutionRepo.findById(record.getId())
+                    .orElseThrow(new BusinessException("无记录"));
             ObjUtils.merge(orig, record);
             ObjUtils.merge(orig, record);
+            orig.setSubmit(true);
             return trainingInstitutionRepo.save(orig);
             return trainingInstitutionRepo.save(orig);
         }
         }
         return trainingInstitutionRepo.save(record);
         return trainingInstitutionRepo.save(record);
@@ -56,5 +58,10 @@ public class TrainingInstitutionController extends BaseController {
         List<TrainingInstitution> data = all(pageQuery).getContent();
         List<TrainingInstitution> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
         ExcelUtils.export(response, data);
     }
     }
+
+    @GetMapping("/batchSend")
+    public void batchSend() throws InterruptedException {
+        trainingInstitutionService.batchSend();
+    }
 }
 }
 
 

+ 16 - 0
src/main/vue/src/views/TrainingInstitutionList.vue

@@ -12,6 +12,7 @@
                 class="filter-item"
                 class="filter-item"
                 >导出EXCEL
                 >导出EXCEL
             </el-button>
             </el-button>
+            <el-button @click="sendSms" type="primary" :loading="downloading" class="filter-item">短信通知 </el-button>
         </div>
         </div>
         <el-table
         <el-table
             :data="tableData"
             :data="tableData"
@@ -177,6 +178,21 @@ export default {
                         this.$message.error(e.error);
                         this.$message.error(e.error);
                     }
                     }
                 });
                 });
+        },
+        sendSms() {
+            this.$alert('确认发送吗?', '提示')
+                .then(() => {
+                    return this.$http.post(`/trainingInstitution/batchSend`);
+                })
+                .then(() => {
+                    this.$message.success('发送成功');
+                    this.getData();
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        this.$message.error(e.error);
+                    }
+                });
         }
         }
     }
     }
 };
 };

+ 49 - 0
src/test/java/com/izouma/wenlvju/web/TrainingInstitutionControllerTest.java

@@ -0,0 +1,49 @@
+package com.izouma.wenlvju.web;
+
+
+import com.izouma.wenlvju.ApplicationTests;
+import com.izouma.wenlvju.converter.StringArrayConverter;
+import com.izouma.wenlvju.domain.TrainingInstitution;
+import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.repo.TrainingInstitutionRepo;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TrainingInstitutionControllerTest extends ApplicationTests {
+
+    @Autowired
+    private TrainingInstitutionController trainingInstitutionController;
+
+    @Autowired
+    private TrainingInstitutionRepo trainingInstitutionRepo;
+
+    @Test
+    public void test() throws InterruptedException {
+        long count = trainingInstitutionRepo.count();
+        PageQuery pageQuery = new PageQuery();
+        pageQuery.setSize(1000);
+        for (int i = 0; i < count / 1000; i++) {
+            pageQuery.setPage(i);
+            List<TrainingInstitution> content = trainingInstitutionController.all(pageQuery).getContent();
+            List<TrainingInstitution> result = new ArrayList<>();
+            content.forEach(t -> {
+                if (t.getPhone() != null && (t.getPhone().length() < 11 || t.getPhone().contains("-"))) {
+                    t.setPhone(null);
+                    result.add(t);
+                }
+
+            });
+            trainingInstitutionRepo.saveAll(result);
+            System.out.println(i);
+//            Thread.sleep(5 * 60 * 1000);
+            Thread.sleep(30 * 1000);
+        }
+
+//        System.out.println("12".split(","));
+    }
+
+
+}