|
|
@@ -2,8 +2,10 @@ 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;
|
|
|
@@ -13,15 +15,25 @@ 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
|
|
|
@@ -32,6 +44,8 @@ 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));
|
|
|
@@ -337,51 +351,68 @@ public class ProgrammeAwardService {
|
|
|
// programmeAwardRepo.saveAll(programmeAwards);
|
|
|
}
|
|
|
|
|
|
-// public String createAward(Long userId, boolean home, Long packageId, String path) throws IOException, WxErrorException {
|
|
|
-// BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/img.png"));
|
|
|
-// BufferedImage result = new BufferedImage(300, 300, 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);
|
|
|
-//
|
|
|
-// byte[] bytes = wxMaService.getQrcodeService()
|
|
|
-// .createWxaCodeUnlimitBytes("expert=true&invitor=" + userId, "pages/home", 94 * 2, false, new WxMaCodeLineColor("0", "0", "0"), true);
|
|
|
-// if (!home) {
|
|
|
-// bytes = wxMaService.getQrcodeService()
|
|
|
-// .createWxaCodeUnlimitBytes("expert=true&invitor=" + userId + "&id=" + packageId, "pages/detail", 94 * 2, false, new WxMaCodeLineColor("0", "0", "0"), true);
|
|
|
-// }
|
|
|
-// ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
|
|
|
-// BufferedImage codeImg = ImageIO.read(byteArrayInputStream);
|
|
|
-//
|
|
|
-// g.drawImage(codeImg, 0, 0, 150 * 2, 150 * 2, null);
|
|
|
-//
|
|
|
-// BufferedImage avatar = ImageIO
|
|
|
-// .read(new URL(Optional.ofNullable(user.getAvatar()).orElse(Constants.DEFAULT_AVATAR)));
|
|
|
+ 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, 68 * 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, 68 * 2));
|
|
|
-// g2.drawImage(subImg, 0, 0, 68 * 2, 68 * 2, null);
|
|
|
-//
|
|
|
-// g.drawImage(avatarImg, 41 * 2, 41 * 2, 68 * 2, 68 * 2, null);
|
|
|
-//
|
|
|
-// 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, path + userId + ".jpg");
|
|
|
-// }
|
|
|
+ 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";
|
|
|
+ }
|
|
|
}
|