Jelajahi Sumber

feat:增加字体

wenkai 6 hari lalu
induk
melakukan
960edec204

+ 24 - 13
ruoyi-modules/ruoyi-game-event/src/main/java/org/dromara/system/service/impl/GameEventServiceImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.system.service.impl;
 
+import cn.hutool.core.img.FontUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -19,6 +20,7 @@ import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.*;
@@ -50,7 +52,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
-import java.io.IOException;
+import java.io.*;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
@@ -708,9 +710,13 @@ public class GameEventServiceImpl implements IGameEventService {
                         cb.endText();
                     }
                     StringBuilder joinProject = new StringBuilder();
-                    athlete.getProjectList().forEach(
-                        projectId -> joinProject.append(projectMap.get(Long.valueOf(projectId))).append(" ")
-                    );
+                    StringJoiner joiner = new StringJoiner("、"); // 指定分隔符
+                    athlete.getProjectList().forEach(projectId -> {
+                        String projectName = projectMap.get(Long.valueOf(projectId));
+                        if (projectName != null) {
+                            joiner.add(projectName);
+                        }
+                    });
 
                     // 生成二维码 - 更精确的位置调整
                     String qrData = String.format(
@@ -720,11 +726,11 @@ public class GameEventServiceImpl implements IGameEventService {
                             运动员编号:%s,
                             参与项目:%s,
                             队伍id:%d,
-                            队伍名称:%s
-                            运动员姓名:%s
+                            队伍名称:%s,
+                            运动员姓名:%s,
                             性别:%s,
                             年龄:%d
-                            """,
+                        """,
                         eventName, athlete.getAthleteId(), athlete.getAthleteCode(),
                         joinProject.toString(),
                         athlete.getTeamId(), teamNameMap.get(athlete.getTeamId()), athlete.getName(), athlete.getGender(), athlete.getAge()
@@ -812,13 +818,18 @@ public class GameEventServiceImpl implements IGameEventService {
     private static BaseFont getChineseFont(String fontName) throws Exception {
         // 方式1:使用系统字体(Windows)
         // return BaseFont.createFont("C:/Windows/Fonts/simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
+        String filePath;
         switch (fontName) {
-            case "simhei":
-                return BaseFont.createFont("classpath:fonts/simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
-            case "simsun":
-                return BaseFont.createFont("classpath:fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
-            default:
-                return BaseFont.createFont("classpath:fonts/msyhbd.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
+            case "simhei" -> filePath = "fonts/simhei.ttf";
+            case "simsun" -> filePath = "fonts/simsun.ttf";
+            default -> filePath = "fonts/yahei.ttf";
+        }
+        try (InputStream in = FontUtil.class.getClassLoader().getResourceAsStream(filePath)) {
+            if (in == null) throw new FileNotFoundException(filePath);
+            File temp = File.createTempFile("font_", ".ttf");
+            temp.deleteOnExit();
+            IOUtils.copy(in, new FileOutputStream(temp));
+            return BaseFont.createFont(temp.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
         }
     }
 }

TEMPAT SAMPAH
ruoyi-modules/ruoyi-game-event/src/main/resources/fonts/msyh.ttc


TEMPAT SAMPAH
ruoyi-modules/ruoyi-game-event/src/main/resources/fonts/simsun.ttc


TEMPAT SAMPAH
ruoyi-modules/ruoyi-game-event/src/main/resources/fonts/msyhl.ttc → ruoyi-modules/ruoyi-game-event/src/main/resources/fonts/simsun.ttf


TEMPAT SAMPAH
ruoyi-modules/ruoyi-game-event/src/main/resources/fonts/msyhbd.ttc → ruoyi-modules/ruoyi-game-event/src/main/resources/fonts/yahei.ttf


+ 14 - 6
本周改动.md

@@ -1,7 +1,5 @@
 <h1>本周改动</h1>
 
-<h2>8.18</h2>
-
 <li>完成赛事与菜单的关联</li>
 <li>完成部分App端查询接口</li>
 <li>完成App端用户建议相关接口</li>
@@ -10,10 +8,6 @@
 <li>完善活动菜单管理的搜索条件区域功能</li>
 <li>增加全局默认赛事显示功能</li>
 <li>美化赛事操作列样式</li>
-
-
-<h2>8.19</h2>
-
 <li>完成用户反馈</li>
 <li>完成app端赛事相关的富文本编辑</li>
 <li>完善app端部分接口</li>
@@ -23,6 +17,20 @@
 <li>补充数据测试功能</li>
 <li>修改各模块列表项映射格式,方便后期维护</li>
 <li>修复成绩模块显示逻辑bug</li>
+<li>完善运动员模块与队伍的关联</li>
+<li>优化赛事界面布局和操作流程</li>
+<li>添加组别详细信息,如人数、组数、道数等</li>
+<li>实现分组自动计算和时间验证功能</li>
+<li>增加报名表导入校验-仅允许无报名数据的赛事进行导入</li>
+<li>号码对照表生成</li>
+<li>号码布开发</li>
+<li>优化成绩编辑界面,适配不同项目类型</li>
+<li>重构个人和团体项目的排名和积分计算方法</li>
+<li>生成二维码</li>
+<li>完成号码布开发导出zip</li>
+<li>增加权限校验</li>
+<li>修复部分bug</li>
+<li>增加字体</li>