Bläddra i källkod

禀议书子表赋值时间戳修改

CRK 2 veckor sedan
förälder
incheckning
c4107e60c1

+ 3 - 3
SEAL_DEPLOYMENT.md

@@ -44,13 +44,13 @@ GET  /api/changguchuan/seal/health
 `approvalAction`。抄送、转交和待审批记录不会盖章。同一人在不同节点或重新审批时
 分别保留,只有完全相同的任务、人员、时间、节点和动作才去重;发起人之后的审批行按实际审批时间升序排列。
 
-图片使用该审批人的模板,仅绘制一行数字日期(`yyyy-MM-dd`),例如 `2026-10-16`,不显示时分秒。
+图片使用对应人员的模板,仅绘制一行数字日期(`yy.MM.dd`),例如 `26.10.20`,不显示时分秒。
 接口返回的 `approvalTime` 仍为
 `yyyy-MM-dd HH:mm:ss`。默认时区
 `Asia/Shanghai`。Unix 时间戳和明确的非零偏移时间(如 `+08:00`)转换至配置时区;无偏移
 文本按配置时区解读。针对当前组织反馈的审批时间多加 8 小时,默认启用
 `seal.approval-records.utc-text-is-local=true`:将审批记录中带 `Z` / `+00:00` / `+0000` 的
-文本按已是本地时间处理,例如 `2026-10-16T09:33:00Z` 盖为 `2026-10-16`。
+文本按已是本地时间处理,例如 `2026-10-16T09:33:00Z` 盖为 `26.10.16`。
 发起人的 `createTimeGMT` 复用同一时间解析和兼容规则。
 该兼容基于线上时差现象,需用原始 `operateTimeGMT` 与宜搭页面时间核实。如果数据源返回的是
 真正的 UTC 时间,应配置 `seal.approval-records.utc-text-is-local=false`,恢复标准时区转换
@@ -184,7 +184,7 @@ location /api/changguchuan/ {
 - `processInstanceId`:当前审批流程实例 ID(必填)
 - `approvalTime`:审批通过时间(可选)
 
-在“禀议书”流程自动化中选择“审批通过”作为触发条件,再调用该连接器动作即可。接口会读取底图、叠加 `yyyy-MM-dd` 日期、保存图片,并把 URL 写入 `imageField_mubc0xwk`。
+在“禀议书”流程自动化中选择“审批通过”作为触发条件,再调用该连接器动作即可。接口会读取底图、叠加 `yy.MM.dd` 日期(例如 `26.10.20`)、保存图片,并把 URL 写入 `imageField_mubc0xwk`。
 
 当前已创建并发布自动化逻辑流:
 

+ 5 - 3
src/main/java/com/muzhi/changguchuan/seal/service/impl/SealServiceImpl.java

@@ -90,8 +90,10 @@ public class SealServiceImpl implements SealService {
 
     /** 文件夹按年/月/日分层,便于长期运行时管理文件。 */
     private static final DateTimeFormatter DIRECTORY_DATE = DateTimeFormatter.ofPattern("yyyy/MM/dd");
-    /** 图片中显示的审批日期格式。 */
+    /** 接口返回的审批日期格式。 */
     private static final DateTimeFormatter FILE_DATE = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    /** 印章上显示的日期,例如 26.10.20。 */
+    private static final DateTimeFormatter STAMP_DATE = DateTimeFormatter.ofPattern("yy.MM.dd");
 
     @Autowired
     private AccessTokenService accessTokenService;
@@ -151,7 +153,7 @@ public class SealServiceImpl implements SealService {
         // 获取底图、叠加日期、保存文件,最后把文件 URL 写回宜搭。
         byte[] templateBytes = loadTemplateBytes(request.getTemplateImageUrl(), appType, accessToken);
         log.info("[seal] 印章底图读取完成,bytes={}", templateBytes.length);
-        byte[] stampedBytes = renderSeal(templateBytes, approvalDate);
+        byte[] stampedBytes = renderSeal(templateBytes, LocalDate.parse(approvalDate).format(STAMP_DATE));
         log.info("[seal] 日期绘制完成,approvalDate={}, outputBytes={}", approvalDate, stampedBytes.length);
         StoredFile storedFile = store(stampedBytes, instanceId, approvalDate);
         log.info("[seal] 印章文件保存完成,path={}, url={}", storedFile.path, storedFile.url);
@@ -197,7 +199,7 @@ public class SealServiceImpl implements SealService {
             Map<String, byte[]> templateCache = new HashMap<>();
             List<SealApprovalRecordResult> results = new ArrayList<>();
             DateTimeFormatter timestamp = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(zone);
-            DateTimeFormatter stampDate = FILE_DATE.withZone(zone);
+            DateTimeFormatter stampDate = STAMP_DATE.withZone(zone);
             for (ApprovalRecordParser.ApprovalRecord record : records) {
                 byte[] template = templateCache.get(record.getUserId());
                 if (template == null) {