Răsfoiți Sursa

承办单位

licailing 4 ani în urmă
părinte
comite
7fed8174f0

+ 12 - 0
pom.xml

@@ -322,6 +322,18 @@
             <artifactId>thumbnailator</artifactId>
             <version>0.4.13</version>
         </dependency>
+
+        <!-- 画二维码 -->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>3.3.0</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 11 - 0
src/main/java/com/izouma/wenlvju/domain/Organization.java

@@ -16,6 +16,7 @@ import org.hibernate.annotations.Where;
 import javax.persistence.Column;
 import javax.persistence.Convert;
 import javax.persistence.Entity;
+import javax.persistence.Transient;
 import java.util.List;
 
 @Data
@@ -34,6 +35,11 @@ public class Organization extends BaseEntity {
     @ApiModelProperty(value = "承办单位名称")
     private String name;
 
+
+    @ExcelProperty(value = "考级机构")
+    @Transient
+    private String go;
+
     @ExcelIgnore
     @Convert(converter = LongArrayConverter.class)
     @ApiModelProperty(value = "考级机构名称")
@@ -86,7 +92,12 @@ public class Organization extends BaseEntity {
     @ExcelProperty(value = "编码")
     private String code;
 
+    @ExcelIgnore
     @ApiModelProperty(value = "联盟id")
     private Long allianceId;
 
+    @ExcelProperty(value = "是否参加联盟")
+    @Transient
+    private String alliance;
+
 }

+ 3 - 6
src/main/java/com/izouma/wenlvju/repo/performance/ProgrammeRepo.java

@@ -56,13 +56,10 @@ public interface ProgrammeRepo extends JpaRepository<Programme, Long>, JpaSpecif
 
     List<Programme> findAllByReviewArrangeId(Long arrangeId);
 
-    @Query("select id from Programme where awardId = ?1")
-    List<Long> findAllByAwardId(Long awardId);
+    List<Programme> findAllByAwardId(Long awardId);
 
-    @Query("select id from Programme where awardId = ?1 and parentSpecialtyId = ?2")
-    List<Long> findAllByAwardIdAndParentSpecialtyId(Long awardId, Long parentSpecialtyId);
+    List<Programme> findAllByAwardIdAndParentSpecialtyId(Long awardId, Long parentSpecialtyId);
 
-    @Query("select id from Programme where awardId = ?1 and specialtyId = ?2")
-    List<Long> findAllByAwardIdAndSpecialtyId(Long awardId, Long specialtyId);
+    List<Programme> findAllByAwardIdAndSpecialtyId(Long awardId, Long specialtyId);
 
 }

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

@@ -17,4 +17,6 @@ public interface ComplainRepo extends JpaRepository<Complain, Long>, JpaSpecific
     void softDelete(Long id);
 
     List<Complain> findAllByComplainAtBetween(LocalDateTime start, LocalDateTime end);
+
+    List<Complain> findAllByFinishIsTrueAndComplainAtBetween(LocalDateTime start, LocalDateTime end);
 }

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

@@ -3,6 +3,12 @@ package com.izouma.wenlvju.service.performance;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
 import com.izouma.wenlvju.domain.performance.Participant;
 import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.dto.PageQuery;
@@ -14,6 +20,7 @@ import com.izouma.wenlvju.service.storage.StorageService;
 import com.izouma.wenlvju.utils.JpaUtils;
 import com.izouma.wenlvju.utils.ObjUtils;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import net.coobird.thumbnailator.Thumbnails;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
@@ -24,10 +31,15 @@ import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.net.BindException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 @AllArgsConstructor
 public class ParticipantService {
@@ -75,9 +87,9 @@ public class ParticipantService {
         });
     }
 
-    public String createAward(Participant participant, String award) throws IOException {
+    public String createAward(Participant participant, String programmeName) throws IOException, WriterException {
         BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/certificate.jpeg"));
-        BufferedImage result = new BufferedImage(1100, 778, BufferedImage.TYPE_INT_RGB);
+        BufferedImage result = new BufferedImage(2480, 1748, BufferedImage.TYPE_INT_RGB);
         Graphics2D g = result.createGraphics();
         g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
         g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -85,40 +97,55 @@ public class ParticipantService {
         g.setComposite(AlphaComposite.SrcOver);
         g.drawImage(shareImg, 0, 0, null);
 
-        // 头像
-        if (ObjectUtil.isNotNull(participant.getImg())) {
-            BufferedImage avatar = ImageIO.read(new URL(participant.getImg()));
-//        int size = Math.min(avatar.getWidth(), avatar.getHeight());
-//        BufferedImage subImg = avatar
-//                .getSubimage((avatar.getWidth() - size) / 2, (avatar.getHeight() - size) / 2, size, size);
-            BufferedImage avatarImg = new BufferedImage(68 * 2, 80 * 2, BufferedImage.TYPE_INT_ARGB);
-            Graphics2D g2 = avatarImg.createGraphics();
-            g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-            g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-            g2.setComposite(AlphaComposite.SrcOver);
-            g2.setBackground(Color.GREEN);
-//        g2.setClip(new Ellipse2D.Float(0, 0, 68 * 2, 76 * 2)); //椭圆
-            g2.drawImage(avatar, 0, 0, 68 * 2, 160, null);
-
-            g.drawImage(avatarImg, 420 * 2, 50 * 2, 68 * 2, 160, null);
-        }
+        // 二维码
+        Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
+        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+        hints.put(EncodeHintType.MARGIN, 1);
+
+        BitMatrix bitMatrix = new MultiFormatWriter().encode("http://yskj.njlyw.cn:8081/h5?progremmeId=" + participant.getProgrammeId(),
+                BarcodeFormat.QR_CODE, 1000, 1000, hints);
+        BufferedImage code = MatrixToImageWriter.toBufferedImage(bitMatrix);
+
+        BufferedImage avatarImg = new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g2 = avatarImg.createGraphics();
+        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+        g2.setComposite(AlphaComposite.SrcOver);
+        g2.setBackground(Color.GREEN);
+        g2.drawImage(code, 0, 0, 240, 240, null);
+
+        g.drawImage(avatarImg, 1898, 253, 240, 240, null);
 
 
         // 文字
-        g.setColor(new Color(0, 0, 0)); //根据图片的背景设置水印颜色
-        Font font = new Font("黑体", Font.PLAIN, 30);
-        String content = participant.getName();
-        // 加水印
+        g.setColor(new Color(48, 52, 82)); //根据图片的背景设置水印颜色
+        // 编号
+        String programmeId = participant.getProgrammeId().toString();
+        Font fontId = new Font("黑体", Font.PLAIN, 35);
+        g.setFont(fontId);
+        g.drawString(programmeId, 2000, 544);
+
+
+        // 姓名
+        Font font = new Font("黑体", Font.BOLD, 60);
+        String name = participant.getName();
         g.setFont(font);              //设置字体
         //设置水印的坐标
-        g.drawString(content, 160, 330);  //画出水印
+        g.drawString(name, 400, 600);
 
-        String content1 = "在2021“宁艺之星”社会艺术水平考级展演(览)中,表现优";
-        //设置水印的坐标
-        g.drawString(content1, 215, 390);
-        String content2 = "秀,被评为“" + award + "”,特发此证,以资鼓励。";
-        g.drawString(content2, 160, 450);
+
+        // 节目名称
+        if (programmeName.length() > 8) {
+            String body1 = programmeName.substring(0, 7);
+            String body2 = programmeName.substring(7);
+            Font title = new Font("黑体", Font.PLAIN, 40);
+            g.setFont(title);
+            g.drawString(body1, 1200, 795);
+            g.drawString(body2, 1200, 835);
+        } else {
+            g.drawString(programmeName, 1220, 825);
+        }
 
         g.dispose();
         ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
@@ -139,14 +166,16 @@ public class ParticipantService {
         }
 
         Programme programme = programmeRepo.findById(programmeId).orElseThrow(new BusinessException("无节目"));
-        String name = awardRepo.findById(programme.getAwardId()).orElseThrow(new BusinessException("无奖项")).getName();
+//        String name = awardRepo.findById(programme.getAwardId()).orElseThrow(new BusinessException("无奖项")).getName();
         List<Participant> result = new ArrayList<>();
         participants.forEach(participant -> {
             if (ObjectUtil.isNull(participant.getAwardImg())) {
                 try {
-                    participant.setAwardImg(this.createAward(participant, name));
+                    participant.setAwardImg(this.createAward(participant, programme.getName()));
                 } catch (IOException e) {
-                    e.printStackTrace();
+                    log.error("文件找不到", e);
+                } catch (WriterException e) {
+                    log.error("生成二维码失败", e);
                 }
                 result.add(participant);
             }
@@ -156,8 +185,8 @@ public class ParticipantService {
     }
 
     public void awardByAwardId(Long awardId, Long specialtyId, boolean parent) {
-        String award = awardRepo.findById(awardId).orElseThrow(new BusinessException("无奖项")).getName();
-        List<Long> programmes;
+//        String award = awardRepo.findById(awardId).orElseThrow(new BusinessException("无奖项")).getName();
+        List<Programme> programmes;
         if (ObjectUtil.isNull(specialtyId)) {
             programmes = programmeRepo.findAllByAwardId(awardId);
         } else if (parent) {
@@ -165,14 +194,18 @@ public class ParticipantService {
         } else {
             programmes = programmeRepo.findAllByAwardIdAndSpecialtyId(awardId, specialtyId);
         }
-        List<Participant> participants = participantRepo.findAllByProgrammeIdIn(programmes);
+        Map<Long, String> programmeMap = programmes.stream()
+                .collect(Collectors.toMap(Programme::getId, Programme::getName));
+        List<Participant> participants = participantRepo.findAllByProgrammeIdIn(programmeMap.keySet());
         List<Participant> result = new ArrayList<>();
         participants.forEach(participant -> {
             if (ObjectUtil.isNull(participant.getAwardImg())) {
                 try {
-                    participant.setAwardImg(this.createAward(participant, award));
+                    participant.setAwardImg(this.createAward(participant, programmeMap.get(participant.getProgrammeId())));
                 } catch (IOException e) {
-                    e.printStackTrace();
+                    log.error("文件找不到", e);
+                } catch (WriterException e) {
+                    log.error("生成二维码失败", e);
                 }
                 result.add(participant);
             }

+ 40 - 20
src/main/java/com/izouma/wenlvju/service/regulation/ReportService.java

@@ -2,12 +2,13 @@ package com.izouma.wenlvju.service.regulation;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.izouma.wenlvju.config.DateConfig;
-import com.izouma.wenlvju.domain.*;
+import cn.hutool.core.util.StrUtil;
+import com.izouma.wenlvju.domain.GradingOrganization;
+import com.izouma.wenlvju.domain.Organization;
+import com.izouma.wenlvju.domain.Record;
+import com.izouma.wenlvju.domain.RecordSpecialty;
 import com.izouma.wenlvju.domain.regulation.Complain;
-import com.izouma.wenlvju.domain.regulation.RecordExpertAudit;
 import com.izouma.wenlvju.domain.regulation.Report;
-import com.izouma.wenlvju.domain.regulation.ReportStatistic;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.ReportDTO;
 import com.izouma.wenlvju.enums.ReportType;
@@ -20,20 +21,22 @@ import com.izouma.wenlvju.repo.RecordSpecialtyRepo;
 import com.izouma.wenlvju.repo.regulation.ComplainRepo;
 import com.izouma.wenlvju.repo.regulation.RecordExpertAuditRepo;
 import com.izouma.wenlvju.repo.regulation.ReportRepo;
+import com.izouma.wenlvju.service.storage.StorageService;
 import com.izouma.wenlvju.utils.JpaUtils;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.Version;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
 import java.io.StringWriter;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -49,13 +52,14 @@ public class ReportService {
     private OrganizationRepo        organizationRepo;
     private RecordExpertAuditRepo   recordExpertAuditRepo;
     private RecordSpecialtyRepo     recordSpecialtyRepo;
+    private StorageService          storageService;
 
     public Page<Report> all(PageQuery pageQuery) {
         return reportRepo.findAll(JpaUtils.toSpecification(pageQuery, Report.class), JpaUtils.toPageRequest(pageQuery));
     }
 
     //获取时间
-    public Map<String, LocalDateTime> getDate(Report report) {
+    public Map<String, Object> getDate(Report report) {
         //开始结束时间
         int year = report.getYear();
         LocalDateTime start = LocalDateTime.of(year, 1, 1, 0, 0);
@@ -112,13 +116,11 @@ public class ReportService {
         }
         // 结束日期
         LocalDateTime end = LocalDateTime.of(endDate, LocalTime.MAX);
-        report.setTime(time);
-        report.setTitle("南京市社会艺术水平考级监管报告");
-        Report report1 = reportRepo.save(report);
-        report.setId(report1.getId());
-        Map<String, LocalDateTime> map = new HashMap<>();
+
+        Map<String, Object> map = new HashMap<>();
         map.put("start", start);
         map.put("end", end);
+        map.put("time", time);
         return map;
     }
 
@@ -249,7 +251,7 @@ public class ReportService {
     各转报考人数-饼图
      */
     public Map<String, Long> getSpecialty(List<RecordSpecialty> recordSpecialties) {
-        Map<String, Long> specialtyCount = recordSpecialties.stream()
+        Map<String, Long> specialtyCount = recordSpecialties.stream().filter(rs -> StrUtil.isNotEmpty(rs.getCode()))
                 .collect(Collectors.groupingBy(RecordSpecialty::getCode, Collectors.counting()));
         Map<String, Long> result = new HashMap<>(5);
         result.put("01", 0L);
@@ -291,19 +293,19 @@ public class ReportService {
     /*
     生成word
      */
-    public String word(Report report) {
+    public void word(Report report) {
         // 开始结束时间
-        Map<String, LocalDateTime> date = this.getDate(report);
+        Map<String, Object> date = this.getDate(report);
         if (ObjectUtil.isNull(date)) {
             throw new BusinessException("该文档已生成");
         }
 
-        LocalDateTime start = date.get("start");
-        LocalDateTime end = date.get("end");
+        LocalDateTime start = LocalDateTime.parse(String.valueOf(date.get("start")));
+        LocalDateTime end = LocalDateTime.parse(String.valueOf(date.get("end")));
         //备案
         List<Record> records = recordRepo.findAllByExaminationStartTimeBetween(start.toLocalDate(), end.toLocalDate());
         //投诉
-        List<Complain> complains = complainRepo.findAllByComplainAtBetween(start, end);
+        List<Complain> complains = complainRepo.findAllByFinishIsTrueAndComplainAtBetween(start, end);
         //备案专业
         List<Long> recordIds = records.stream().map(Record::getId).collect(Collectors.toList());
         List<RecordSpecialty> recordSpecialties = recordSpecialtyRepo.findAllByRecordIdIn(recordIds);
@@ -337,9 +339,20 @@ public class ReportService {
             List<ReportDTO> reportDTOS = this.generate(records, recordIds, complains);
             Map<UnitType, List<ReportDTO>> unitTypeListMap = reportDTOS.stream()
                     .collect(Collectors.groupingBy(ReportDTO::getUnitType));
-            //考级机构
-
+            //承办单位
+            List<ReportDTO> reports = unitTypeListMap.get(UnitType.ORGANIZATION);
+            List<Map<String, Object>> listMap = new ArrayList<>();
+            reports.forEach(dto -> {
+                Map<String, Object> goMap = new HashMap<>();
+                goMap.put("name", dto.getName());
+                goMap.put("examCenterQuantity", dto.getExamCenterQuantity());
+                goMap.put("examQuantity", dto.getExamQuantity());
+                goMap.put("complain", dto.getComplain());
+                goMap.put("complainContent", dto.getComplainContent());
+                listMap.add(goMap);
+            });
 
+            dataMap.put("list", listMap);
 
             //Configuration 用于读取ftl文件
             Configuration configuration = new Configuration(new Version("2.3.0"));
@@ -349,7 +362,14 @@ public class ReportService {
             StringWriter writer = new StringWriter();
             Template template = configuration.getTemplate("ReportTemplate.ftl", "utf-8");//以utf-8的编码读取ftl文件
             template.process(dataMap, writer);
-            return writer.toString();
+
+            InputStream is = IOUtils.toInputStream(writer.toString(), "UTF-8");
+            String url = storageService.uploadFromInputStream(is, "/word");
+
+            report.setFile(url);
+            report.setTime(String.valueOf(date.get("time")));
+            report.setTitle("南京市社会艺术水平考级监管报告");
+            reportRepo.save(report);
         } catch (Exception e) {
             log.error("生成word错误", e);
             throw new BusinessException(e.getMessage());

+ 21 - 6
src/main/java/com/izouma/wenlvju/web/OrganizationController.java

@@ -3,8 +3,10 @@ package com.izouma.wenlvju.web;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.izouma.wenlvju.domain.GradingOrganization;
 import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.domain.User;
+import com.izouma.wenlvju.repo.GradingOrganizationRepo;
 import com.izouma.wenlvju.repo.SettingRepo;
 import com.izouma.wenlvju.repo.UserRepo;
 import com.izouma.wenlvju.service.OrganizationService;
@@ -22,16 +24,18 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/organization")
 @AllArgsConstructor
 public class OrganizationController extends BaseController {
-    private OrganizationService organizationService;
-    private OrganizationRepo    organizationRepo;
-    private SettingRepo         settingRepo;
-    private UserRepo            userRepo;
+    private OrganizationService     organizationService;
+    private OrganizationRepo        organizationRepo;
+    private SettingRepo             settingRepo;
+    private UserRepo                userRepo;
+    private GradingOrganizationRepo gradingOrganizationRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -77,7 +81,18 @@ public class OrganizationController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<Organization> all(@RequestBody PageQuery pageQuery) {
-        return organizationService.all(pageQuery);
+        Map<Long, String> goMap = gradingOrganizationRepo.findAll()
+                .stream()
+                .collect(Collectors.toMap(GradingOrganization::getId, GradingOrganization::getName));
+        return organizationService.all(pageQuery).map(organization -> {
+            String go = organization.getGradingOrganizationId()
+                    .stream()
+                    .map(goMap::get)
+                    .collect(Collectors.joining(","));
+            organization.setGo(go);
+            organization.setAlliance(ObjectUtil.isNotNull(organization.getAllianceId()) ? "是" : "否");
+            return organization;
+        });
     }
 
     @GetMapping("/get/{id}")
@@ -112,7 +127,7 @@ public class OrganizationController extends BaseController {
                     .collect(Collectors.toList()));
             if (CollUtil.isNotEmpty(users)) {
                 String phone = users.get(0).getPhone();
-                return phone.replace(phone.substring(3, phone.length() - 4),"****");
+                return phone.replace(phone.substring(3, phone.length() - 4), "****");
             }
         }
         return null;

+ 6 - 1
src/main/java/com/izouma/wenlvju/web/regulation/ReportController.java

@@ -23,7 +23,7 @@ import java.util.List;
 @AllArgsConstructor
 public class ReportController extends BaseController {
     private ReportService reportService;
-    private ReportRepo reportRepo;
+    private ReportRepo    reportRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -59,5 +59,10 @@ public class ReportController extends BaseController {
         List<Report> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @PostMapping("/word")
+    public void word(@RequestBody Report report) {
+        reportService.word(report);
+    }
 }
 

Fișier diff suprimat deoarece este prea mare
+ 1 - 1
src/main/resources/templates/ReportTemplate.ftl


+ 2 - 1
src/main/vue/src/views/Login.vue

@@ -507,7 +507,8 @@ export default {
                     this.$http
                         .get('/organization/byName', { name: this.registerInfo.organizationName }, { body: 'json' })
                         .then(res => {
-                            if (res != null || res != 'undefind') {
+                            console.log(res);
+                            if (res != null && res != 'undefind' && res != '' && str.length() != 0) {
                                 this.$confirm('该承办单位已有人注册,注册手机号为' + res + ',是否继续注册', '提示', {
                                     confirmButtonText: '继续注册',
                                     cancelButtonText: '返回登录',

+ 62 - 4
src/main/vue/src/views/ReportList.vue

@@ -12,7 +12,7 @@
                 class="filter-item"
                 >导出EXCEL
             </el-button> -->
-            <el-form :model="form" inline size="mini">
+            <el-form :model="form" :rules="rules" ref="form" inline size="mini">
                 <el-form-item label="报告类型">
                     <el-select v-model="form.type" clearable style="width: 125px">
                         <el-option
@@ -44,8 +44,8 @@
                     </el-select>
                 </el-form-item>
                 <el-form-item>
-                    <el-button type="primary" @change="getData">查询</el-button>
-                    <el-button type="primary">生成</el-button>
+                    <el-button type="primary" @click="getData">查询</el-button>
+                    <el-button type="primary" :loading="loading" @click="generate">生成</el-button>
                 </el-form-item>
             </el-form>
         </div>
@@ -122,12 +122,43 @@ export default {
                 { label: '三季度', value: 3 },
                 { label: '四季度', value: 4 }
             ],
-            months: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
+            months: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+            loading: false
         };
     },
     computed: {
         selection() {
             return this.$refs.table.selection.map(i => i.id);
+        },
+        rules() {
+            return {
+                type: [{ required: true, message: '请选择报告类型', trigger: 'blur' }],
+                year: [{ required: true, message: '请选择年份', trigger: 'blur' }],
+                quarterly: [
+                    {
+                        validator: (rule, value, callback) => {
+                            if (this.form.type == 'ANNUAL') {
+                                callback();
+                            } else {
+                                callback(new Error('请选择季度!'));
+                            }
+                        },
+                        trigger: 'change'
+                    }
+                ],
+                month: [
+                    {
+                        validator: (rule, value, callback) => {
+                            if (this.form.type == 'QUARTERLY') {
+                                callback();
+                            } else {
+                                callback(new Error('请选择月份!'));
+                            }
+                        },
+                        trigger: 'change'
+                    }
+                ]
+            };
         }
     },
     methods: {
@@ -223,6 +254,33 @@ export default {
                         this.$message.error(e.error);
                     }
                 });
+        },
+        generate() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.word();
+                } else {
+                    return false;
+                }
+            });
+        },
+        word() {
+            this.loading = true;
+            this.$alert('确认生成吗?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post('/report/word', this.form, { body: 'json' });
+                })
+                .then(() => {
+                    this.$message.success('生成成功');
+                    this.getData();
+                    this.loading = false;
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        this.$message.error(e.error);
+                    }
+                    this.loading = false;
+                });
         }
     }
 };

+ 1 - 0
src/main/vue/src/views/organization/OrganizationList.vue

@@ -85,6 +85,7 @@
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
             <el-table-column prop="id" label="ID" width="80"> </el-table-column>
             <el-table-column prop="name" label="承办单位名称" show-overflow-tooltip> </el-table-column>
+            <el-table-column prop="go" label="考级机构名称" show-overflow-tooltip> </el-table-column>
             <el-table-column prop="uscc" label="统一社会信用代码" show-overflow-tooltip></el-table-column>
             <el-table-column prop="district" label="所属区县"> </el-table-column>
             <el-table-column prop="businessLicense" label="营业执照" min-width="50">

+ 19 - 6
src/test/java/com/izouma/wenlvju/service/performance/ParticipantServiceTest.java

@@ -1,6 +1,12 @@
 package com.izouma.wenlvju.service.performance;
 
 
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
 import com.izouma.wenlvju.ApplicationTests;
 import com.izouma.wenlvju.domain.performance.Participant;
 import com.izouma.wenlvju.exception.BusinessException;
@@ -14,6 +20,7 @@ import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.*;
 import java.net.URL;
+import java.util.Hashtable;
 
 public class ParticipantServiceTest extends ApplicationTests {
 
@@ -23,7 +30,7 @@ public class ParticipantServiceTest extends ApplicationTests {
     private ParticipantRepo    participantRepo;
 
     @Test
-    public void test() throws IOException {
+    public void test() throws IOException, WriterException {
         BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/certificate.png"));
         BufferedImage result = new BufferedImage(2480, 1748, BufferedImage.TYPE_INT_RGB);
         Graphics2D g = result.createGraphics();
@@ -35,7 +42,13 @@ public class ParticipantServiceTest extends ApplicationTests {
 
         // 二维码
 //        BufferedImage avatar = ImageIO.read(new URL("http://yskj.njlyw.cn:8081/files/image/2021-11-04-12-36-43bJEcdPkI.jpg"));
-        BufferedImage avatar = ImageIO.read(new File("/Users/qiufangchao/Desktop/17824.png"));
+        Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
+        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+        hints.put(EncodeHintType.MARGIN, 1);
+        BitMatrix bitMatrix = new MultiFormatWriter().encode("http://yskj.njlyw.cn:8081/h5?progremmeId=17824", BarcodeFormat.QR_CODE, 1000, 1000, hints);
+//        BufferedImage image = new BufferedImage(240, 240, BufferedImage.TYPE_INT_RGB);
+        BufferedImage code = MatrixToImageWriter.toBufferedImage(bitMatrix);
+//        BufferedImage avatar = ImageIO.read(new File("/Users/qiufangchao/Desktop/17824.png"));
 
 //        int size = Math.min(avatar.getWidth(), avatar.getHeight());
 //        BufferedImage subImg = avatar
@@ -50,7 +63,7 @@ public class ParticipantServiceTest extends ApplicationTests {
         g2.setBackground(Color.GREEN);
 //        g2.setClip(new Ellipse2D.Float(0, 0, 68 * 2, 76 * 2)); //椭圆
 
-        g2.drawImage(avatar, 0, 0, 120 * 2, 120 * 2, null);
+        g2.drawImage(code, 0, 0, 120 * 2, 120 * 2, null);
         g.drawImage(avatarImg, 1898, 253, 120 * 2, 120 * 2, null);
 
 
@@ -93,7 +106,7 @@ public class ParticipantServiceTest extends ApplicationTests {
                 .toOutputStream(out);
         ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
 
-        File file = new File("/Users/qiufangchao/Desktop/朱姝宁.jpg");
+        File file = new File("/Users/qiufangchao/Desktop/朱姝宁2.jpg");
         byte[] buffer = new byte[in.available()];
         in.read(buffer);
         OutputStream outStream = new FileOutputStream(file);
@@ -112,9 +125,9 @@ public class ParticipantServiceTest extends ApplicationTests {
     }
 
     @Test
-    public void test3() throws IOException {
+    public void test3() throws IOException, WriterException {
         Participant participant = participantRepo.findById(3048L).orElseThrow(new BusinessException("无记录"));
-        System.out.println(participantService.createAward(participant, "二等奖"));
+        System.out.println(participantService.createAward(participant, "多声部手风琴原创作品《最美的风景》"));
     }
 
 }

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff