licailing 4 лет назад
Родитель
Сommit
4475b1d0e0

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

@@ -56,19 +56,19 @@ public class TrainingInstitution extends BaseEntity {
     @ApiModelProperty(value = "企业联系方式")
     private String contactPhone;
 
-    @ExcelProperty(value = "企业联系方式")
+    @ExcelProperty(value = "所属管区")
     @ApiModelProperty(value = "所属管区")
     private String district;
 
-    @ExcelProperty(value = "企业联系方式")
+    @ExcelProperty(value = "注册资本(万)")
     @ApiModelProperty(value = "注册资本(万)")
     private BigDecimal registeredCapital;
 
-    @ExcelProperty(value = "企业联系方式")
+    @ExcelProperty(value = "单位性质")
     @ApiModelProperty(value = "单位性质")
     private String category;
 
-    @ExcelProperty(value = "企业联系方式")
+    @ExcelProperty(value = "专业种类")
     @ApiModelProperty(value = "专业种类")
     private String specialty;
 

+ 37 - 0
src/main/java/com/izouma/wenlvju/dto/TrainingInstitutionDTO.java

@@ -0,0 +1,37 @@
+package com.izouma.wenlvju.dto;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.wenlvju.domain.TrainingInstitution;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("培训机构")
+public class TrainingInstitutionDTO {
+    @ExcelProperty(value = "编号")
+    private Long id;
+
+    @ExcelProperty(value = "企业名称")
+    @ApiModelProperty("企业名称")
+    private String name;
+
+    @ExcelProperty(value = "固定电话")
+    @ApiModelProperty(value = "固定电话")
+    private String contactPhone;
+
+    @ExcelProperty(value = "移动电话")
+    @ApiModelProperty(value = "移动电话")
+    private String phone;
+
+    public TrainingInstitutionDTO(TrainingInstitution trainingInstitution) {
+        BeanUtil.copyProperties(trainingInstitution, this);
+    }
+}

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

@@ -18,5 +18,7 @@ public interface TrainingInstitutionRepo extends JpaRepository<TrainingInstituti
     @Query("select phone from TrainingInstitution where submit = false and phone is not null")
     List<String> findAllBySubmitFalseAndPhoneIsNotNull();
 
+    List<TrainingInstitution> findAllByPhoneIsNull();
+
     List<TrainingInstitution> findAllByNameLike(String name);
 }

+ 36 - 2
src/main/java/com/izouma/wenlvju/service/TrainingInstitutionService.java

@@ -1,15 +1,24 @@
 package com.izouma.wenlvju.service;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.EasyExcel;
 import com.izouma.wenlvju.domain.TrainingInstitution;
 import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.dto.ProgUploadDTO;
+import com.izouma.wenlvju.dto.TrainingInstitutionDTO;
 import com.izouma.wenlvju.repo.TrainingInstitutionRepo;
 import com.izouma.wenlvju.service.sms.NjwlSmsService;
 import com.izouma.wenlvju.utils.JpaUtils;
+import com.izouma.wenlvju.utils.excel.UploadDataListener;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.transaction.Transactional;
+import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @Service
@@ -23,8 +32,8 @@ public class TrainingInstitutionService {
         return trainingInstitutionRepo.findAll(JpaUtils.toSpecification(pageQuery, TrainingInstitution.class), JpaUtils.toPageRequest(pageQuery));
     }
 
-    public void batchSend() throws InterruptedException {
-        List<String> phones = trainingInstitutionRepo.findAllBySubmitFalseAndPhoneIsNotNull();
+    public void batchSend(List<String> phones) throws InterruptedException {
+
         int count = phones.size() / 950;
         String body = "";
         for (int i = 0; i < count; i++) {
@@ -43,4 +52,29 @@ public class TrainingInstitutionService {
         }
 
     }
+
+    @Transactional(rollbackOn = Exception.class)
+    public void upload(MultipartFile file) throws IOException, InterruptedException {
+        UploadDataListener<TrainingInstitutionDTO> listener = new UploadDataListener<>();
+        List<TrainingInstitutionDTO> dtos = EasyExcel.read(file.getInputStream(), TrainingInstitutionDTO.class, listener)
+                .sheet()
+                .doReadSync();
+        List<Long> ids = dtos.stream().map(TrainingInstitutionDTO::getId).collect(Collectors.toList());
+        List<TrainingInstitution> all = trainingInstitutionRepo.findAllById(ids);
+        Map<Long, TrainingInstitution> tiMap = all
+                .stream()
+                .collect(Collectors.toMap(TrainingInstitution::getId, trainingInstitution -> trainingInstitution));
+
+        dtos.forEach(dto -> {
+            TrainingInstitution trainingInstitution = tiMap.get(dto.getId());
+            if (ObjectUtil.isNotNull(trainingInstitution)) {
+                trainingInstitution.setPhone(dto.getPhone());
+                trainingInstitutionRepo.save(trainingInstitution);
+            }
+        });
+
+        // 发送短信
+        this.batchSend(dtos.stream().map(TrainingInstitutionDTO::getPhone).collect(Collectors.toList()));
+
+    }
 }

+ 14 - 1
src/main/java/com/izouma/wenlvju/web/TrainingInstitutionController.java

@@ -1,6 +1,7 @@
 package com.izouma.wenlvju.web;
 
 import com.izouma.wenlvju.domain.TrainingInstitution;
+import com.izouma.wenlvju.dto.TrainingInstitutionDTO;
 import com.izouma.wenlvju.service.TrainingInstitutionService;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/trainingInstitution")
@@ -59,9 +61,20 @@ public class TrainingInstitutionController extends BaseController {
         ExcelUtils.export(response, data);
     }
 
+    @GetMapping("/excel1")
+    @ResponseBody
+    public void excel1(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<TrainingInstitution> data = trainingInstitutionRepo.findAllByPhoneIsNull();
+        List<TrainingInstitutionDTO> dtos = data.stream()
+                .map(TrainingInstitutionDTO::new)
+                .collect(Collectors.toList());
+        ExcelUtils.export(response, dtos);
+    }
+
     @GetMapping("/batchSend")
     public void batchSend() throws InterruptedException {
-        trainingInstitutionService.batchSend();
+        List<String> phones = trainingInstitutionRepo.findAllBySubmitFalseAndPhoneIsNotNull();
+        trainingInstitutionService.batchSend(phones);
     }
 }
 

+ 37 - 5
src/main/vue/src/views/TrainingInstitutionList.vue

@@ -3,7 +3,7 @@
         <div class="filters-container">
             <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input>
             <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item">搜索 </el-button>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item">添加 </el-button>
+            <!-- <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item">添加 </el-button> -->
             <el-button
                 @click="download"
                 type="primary"
@@ -12,7 +12,15 @@
                 class="filter-item"
                 >导出EXCEL
             </el-button>
-            <el-button @click="sendSms" type="primary" :loading="downloading" class="filter-item">短信通知 </el-button>
+            <el-button
+                @click="downloadTel"
+                type="primary"
+                icon="el-icon-download"
+                :loading="downloading"
+                class="filter-item"
+                >导出固定电话
+            </el-button>
+            <el-button @click="sendSms" type="primary" class="filter-item">短信通知 </el-button>
         </div>
         <el-table
             :data="tableData"
@@ -136,7 +144,31 @@ export default {
             this.$axios
                 .get('/trainingInstitution/excel', {
                     responseType: 'blob',
-                    params: { size: 10000 }
+                    params: { size: 100000 }
+                })
+                .then(res => {
+                    console.log(res);
+                    this.downloading = false;
+                    const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                    const link = document.createElement('a');
+                    link.href = downloadUrl;
+                    link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
+                    document.body.appendChild(link);
+                    link.click();
+                    link.remove();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.downloading = false;
+                    this.$message.error(e.error);
+                });
+        },
+        downloadTel() {
+            this.downloading = true;
+            this.$axios
+                .get('/trainingInstitution/excel1', {
+                    responseType: 'blob',
+                    params: { size: 50000 }
                 })
                 .then(res => {
                     console.log(res);
@@ -180,13 +212,13 @@ export default {
                 });
         },
         sendSms() {
-            this.$alert('确认发送吗?', '提示')
+            this.$alert('确认发送短信吗?', '提示')
                 .then(() => {
                     return this.$http.post(`/trainingInstitution/batchSend`);
                 })
                 .then(() => {
                     this.$message.success('发送成功');
-                    this.getData();
+                    // this.getData();
                 })
                 .catch(e => {
                     if (e !== 'cancel') {

+ 1 - 1
src/test/java/com/izouma/wenlvju/repo/UserRepoTest.java

@@ -74,7 +74,7 @@ public class UserRepoTest {
 
     @Test
     public void test3() {
-        System.out.println(jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(10130L)
+        System.out.println(jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(17369L)
                 .orElseThrow(new BusinessException("用户不存在")))));
     }
 

+ 3 - 2
src/test/java/com/izouma/wenlvju/web/TrainingInstitutionControllerTest.java

@@ -23,9 +23,10 @@ public class TrainingInstitutionControllerTest extends ApplicationTests {
     @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++) {
+        for (int i = 5; i < count / 1000; i++) {
             pageQuery.setPage(i);
             List<TrainingInstitution> content = trainingInstitutionController.all(pageQuery).getContent();
             List<TrainingInstitution> result = new ArrayList<>();
@@ -39,7 +40,7 @@ public class TrainingInstitutionControllerTest extends ApplicationTests {
             trainingInstitutionRepo.saveAll(result);
             System.out.println(i);
 //            Thread.sleep(5 * 60 * 1000);
-            Thread.sleep(30 * 1000);
+//            Thread.sleep(30 * 1000);
         }
 
 //        System.out.println("12".split(","));