licailing %!s(int64=4) %!d(string=hai) anos
pai
achega
b719ca745f

+ 3 - 0
src/main/java/com/izouma/wenlvju/domain/performance/Participant.java

@@ -44,6 +44,9 @@ public class Participant extends BaseEntity {
     @ApiModelProperty(value = "证书")
     private String certificate;
 
+    @ApiModelProperty(value = "奖状图片")
+    private String awardImg;
+
     private String phone;
 
     public Participant(ProgrammeDTO dto) {

+ 1 - 1
src/main/java/com/izouma/wenlvju/repo/performance/ParticipantRepo.java

@@ -23,7 +23,7 @@ public interface ParticipantRepo extends JpaRepository<Participant, Long>, JpaSp
 
     List<Participant> findAllByProgrammeIdIn(Collection<Long> ids);
 
-    List<Participant> findAllByProgrammeId(Long id);
+    List<Participant> findAllByProgrammeId(Long programmeId);
 
     List<Participant> findByIdNoAndPerformanceId(String idNo, Long performanceId);
 }

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

@@ -1,17 +1,31 @@
 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.izouma.wenlvju.domain.performance.Participant;
+import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.AwardRepo;
 import com.izouma.wenlvju.repo.performance.ParticipantRepo;
+import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
+import com.izouma.wenlvju.service.storage.StorageService;
 import com.izouma.wenlvju.utils.JpaUtils;
 import com.izouma.wenlvju.utils.ObjUtils;
 import lombok.AllArgsConstructor;
+import net.coobird.thumbnailator.Thumbnails;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -19,6 +33,9 @@ import java.util.List;
 public class ParticipantService {
 
     private ParticipantRepo participantRepo;
+    private ProgrammeRepo   programmeRepo;
+    private AwardRepo       awardRepo;
+    private StorageService  storageService;
 
     public Page<Participant> all(PageQuery pageQuery) {
         return participantRepo.findAll(JpaUtils.toSpecification(pageQuery, Participant.class), JpaUtils.toPageRequest(pageQuery));
@@ -57,4 +74,84 @@ public class ParticipantService {
             }
         });
     }
+
+    private String createAward(Participant participant, String award) throws IOException {
+        BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/certificate.jpeg"));
+        BufferedImage result = new BufferedImage(1100, 778, 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);
+        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+        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, 78 * 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, 78 * 2, null);
+
+            g.drawImage(avatarImg, 420 * 2, 50 * 2, 68 * 2, 78 * 2, null);
+        }
+
+
+        // 文字
+        g.setColor(new Color(0, 0, 0)); //根据图片的背景设置水印颜色
+        Font font = new Font("黑体", Font.PLAIN, 30);
+        String content = participant.getName();
+        // 加水印
+        g.setFont(font);              //设置字体
+        //设置水印的坐标
+        g.drawString(content, 160, 330);  //画出水印
+
+        String content1 = "在2021“宁艺之星”社会艺术水平考级展演(览)中,表现优";
+        //设置水印的坐标
+        g.drawString(content1, 215, 390);
+        String content2 = "秀,被评为“" + award + "”,特发此证,以资鼓励。";
+        g.drawString(content2, 160, 450);
+
+        g.dispose();
+        ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
+        Thumbnails.of(result)
+                .scale(1)
+                .outputQuality(.9f)
+                .outputFormat("jpg")
+                .toOutputStream(out);
+        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+
+        return storageService.uploadFromInputStream(in, "/award/" + participant.getId() + ".jpg");
+    }
+
+    public void create(Long programmeId) {
+        List<Participant> participants = participantRepo.findAllByProgrammeId(programmeId);
+        if (ObjectUtil.isNull(participants)) {
+            return;
+        }
+
+        Programme programme = programmeRepo.findById(programmeId).orElseThrow(new BusinessException("无节目"));
+        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));
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+                result.add(participant);
+            }
+        });
+
+        participantRepo.saveAll(result);
+    }
 }

+ 0 - 81
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeAwardService.java

@@ -2,38 +2,25 @@ package com.izouma.wenlvju.service.performance;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.izouma.wenlvju.config.Constants;
 import com.izouma.wenlvju.domain.ArtType;
 import com.izouma.wenlvju.domain.Award;
-import com.izouma.wenlvju.domain.performance.Participant;
 import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.domain.performance.ProgrammeAward;
 import com.izouma.wenlvju.dto.AwardDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.ProgrammeAwardDTO;
 import com.izouma.wenlvju.enums.ProgrammeStatus;
-import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.repo.AwardRepo;
-import com.izouma.wenlvju.repo.performance.ParticipantRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeAwardRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
-import com.izouma.wenlvju.service.storage.StorageService;
 import com.izouma.wenlvju.utils.JpaUtils;
 import com.izouma.wenlvju.utils.ObjUtils;
 import lombok.AllArgsConstructor;
-import net.coobird.thumbnailator.Thumbnails;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.geom.Ellipse2D;
-import java.awt.image.BufferedImage;
-import java.io.*;
-import java.net.URL;
 import java.util.*;
-import java.util.List;
 import java.util.stream.Collectors;
 
 @Service
@@ -44,8 +31,6 @@ public class ProgrammeAwardService {
     private ArtTypeRepo        artTypeRepo;
     private ProgrammeRepo      programmeRepo;
     private AwardRepo          awardRepo;
-    private ParticipantRepo    participantRepo;
-    private StorageService     storageService;
 
     public Page<ProgrammeAward> all(PageQuery pageQuery) {
         return programmeAwardRepo.findAll(JpaUtils.toSpecification(pageQuery, ProgrammeAward.class), JpaUtils.toPageRequest(pageQuery));
@@ -296,7 +281,6 @@ public class ProgrammeAwardService {
 //            throw new BusinessException("有节目未评分");
 //        }
 
-
         Map<Long, List<Programme>> programmeMap = programmeList.stream()
                 .peek(programme -> {
                     if (ObjectUtil.isNull(programme.getScore())) {
@@ -350,69 +334,4 @@ public class ProgrammeAwardService {
         });
 //        programmeAwardRepo.saveAll(programmeAwards);
     }
-
-    public String createAward(String path) throws IOException {
-//        Participant participant = participantRepo.findById(participantId).orElseThrow(new BusinessException("无记录"));
-        BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/certificate.jpeg"));
-        BufferedImage result = new BufferedImage(1100, 778, 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);
-        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-        g.setComposite(AlphaComposite.SrcOver);
-        g.drawImage(shareImg, 0, 0, null);
-
-        // 头像
-        BufferedImage avatar = ImageIO
-                .read(new URL(Optional.ofNullable("http://yskj.njlyw.cn:8081/files/image/2021-11-04-19-07-50IkiRAgFj.jpg")
-                        .orElse(Constants.DEFAULT_AVATAR)));
-//        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, 78 * 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, 78 * 2, null);
-
-        g.drawImage(avatarImg, 420 * 2, 50 * 2, 68 * 2, 78 * 2, null);
-
-        // 文字
-        g.setColor(new Color(0, 0, 0)); //根据图片的背景设置水印颜色
-        Font font = new Font("黑体", Font.PLAIN, 30);
-        String content = "陆俊旗小朋友:";
-        // 加水印
-        g.setFont(font);              //设置字体
-        //设置水印的坐标
-        g.drawString(content, 160, 330);  //画出水印
-
-        String content1 = "在2021“宁艺之星”社会艺术水平考级展演(览)中,表现优";
-        //设置水印的坐标
-        g.drawString(content1, 215, 390);
-        String content2 = "秀,被评为“一等奖”,特发此证,以资鼓励。";
-        g.drawString(content2, 160, 450);
-
-        g.dispose();
-        ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
-        Thumbnails.of(result)
-                .scale(1)
-                .outputQuality(.9f)
-                .outputFormat("jpg")
-                .toOutputStream(out);
-        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
-
-
-        File file = new File("/Users/qiufangchao/Desktop/1.jpg");
-        byte[] buffer = new byte[in.available()];
-        in.read(buffer);
-        OutputStream outStream = new FileOutputStream(file);
-        outStream.write(buffer);
-//        return storageService.uploadFromInputStream(in, path + "test.jpg");
-
-        return "ok";
-    }
 }

+ 3 - 14
src/main/java/com/izouma/wenlvju/web/performance/ProgrammeAwardController.java

@@ -1,24 +1,21 @@
 package com.izouma.wenlvju.web.performance;
 
-import com.izouma.wenlvju.dto.ProgrammeAwardDTO;
-import com.izouma.wenlvju.web.BaseController;
 import com.izouma.wenlvju.domain.performance.ProgrammeAward;
-import com.izouma.wenlvju.service.performance.ProgrammeAwardService;
 import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.dto.ProgrammeAwardDTO;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.performance.ProgrammeAwardRepo;
+import com.izouma.wenlvju.service.performance.ProgrammeAwardService;
 import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
-
+import com.izouma.wenlvju.web.BaseController;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 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("/programmeAward")
@@ -82,13 +79,5 @@ public class ProgrammeAwardController extends BaseController {
         programmeAwardService.saveProgramme1(dtos);
     }
 
-    @PostMapping("/createAward")
-    public void createAward(){
-        try {
-            programmeAwardService.createAward("");
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
 }
 

+ 77 - 0
src/test/java/com/izouma/wenlvju/service/performance/ParticipantServiceTest.java

@@ -0,0 +1,77 @@
+package com.izouma.wenlvju.service.performance;
+
+
+import com.izouma.wenlvju.ApplicationTests;
+import net.coobird.thumbnailator.Thumbnails;
+import org.junit.Test;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.URL;
+
+public class ParticipantServiceTest extends ApplicationTests {
+
+    @Test
+    public void test() throws IOException {
+        BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/certificate.jpeg"));
+        BufferedImage result = new BufferedImage(1100, 778, 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);
+        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+        g.setComposite(AlphaComposite.SrcOver);
+        g.drawImage(shareImg, 0, 0, null);
+
+        // 头像
+        BufferedImage avatar = ImageIO.read(new URL("http://yskj.njlyw.cn:8081/files/image/2021-11-04-12-36-43bJEcdPkI.jpg"));
+//        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, 78 * 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, 78 * 2, null);
+
+        g.drawImage(avatarImg, 420 * 2, 50 * 2, 68 * 2, 78 * 2, null);
+
+
+        // 文字
+        g.setColor(new Color(0, 0, 0)); //根据图片的背景设置水印颜色
+        Font font = new Font("黑体", Font.PLAIN, 30);
+        String content = "张妍:";
+        // 加水印
+        g.setFont(font);              //设置字体
+        //设置水印的坐标
+        g.drawString(content, 160, 330);  //画出水印
+
+        String content1 = "在2021“宁艺之星”社会艺术水平考级展演(览)中,表现优";
+        //设置水印的坐标
+        g.drawString(content1, 215, 390);
+        String content2 = "秀,被评为“一等奖”,特发此证,以资鼓励。";
+        g.drawString(content2, 160, 450);
+
+        g.dispose();
+        ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
+        Thumbnails.of(result)
+                .scale(1)
+                .outputQuality(.9f)
+                .outputFormat("jpg")
+                .toOutputStream(out);
+        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+
+        File file = new File("/Users/qiufangchao/Desktop/2.jpg");
+        byte[] buffer = new byte[in.available()];
+        in.read(buffer);
+        OutputStream outStream = new FileOutputStream(file);
+        outStream.write(buffer);
+
+    }
+
+}

+ 0 - 24
src/test/java/com/izouma/wenlvju/service/performance/ProgrammeAwardServiceTest.java

@@ -1,24 +0,0 @@
-package com.izouma.wenlvju.service.performance;
-
-
-import com.izouma.wenlvju.ApplicationTests;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.io.IOException;
-
-public class ProgrammeAwardServiceTest extends ApplicationTests {
-
-    @Autowired
-    private ProgrammeAwardService programmeAwardService;
-
-    @Test
-    public void test(){
-        try {
-            programmeAwardService.createAward("");
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-}