|
|
@@ -82,6 +82,7 @@ public class SealServiceImpl implements SealService {
|
|
|
static final String APPROVER_IMAGE_FIELD = "imageField_mubc5ugk";
|
|
|
static final String APPROVAL_TABLE = "tableField_mv7h9ypq";
|
|
|
static final String NODE_FIELD = "textField_mv7h9yps";
|
|
|
+ static final String APPROVER_NAME_FIELD = "textField_mvafdu7s";
|
|
|
static final String STAMP_FIELD = "imageField_mv7h9ypr";
|
|
|
|
|
|
@Autowired
|
|
|
@@ -160,9 +161,9 @@ public class SealServiceImpl implements SealService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 按实际审批记录生成个人时间戳印章,全部成功后统一替换指定子表。
|
|
|
+ * 按创建时间生成发起人印章,并按实际审批记录生成个人印章,全部成功后统一替换指定子表。
|
|
|
* @param formInstanceId 业务表单的宜搭数据 ID
|
|
|
- * @return 按审批时间排序的印章列表
|
|
|
+ * @return 发起人印章在首行,其后为按审批时间排序的印章列表
|
|
|
*/
|
|
|
@Override
|
|
|
public List<SealApprovalRecordResult> generateApprovalRecordsAndWrite(String formInstanceId) {
|
|
|
@@ -189,12 +190,14 @@ public class SealServiceImpl implements SealService {
|
|
|
validateApprovalResponse(operations == null ? null : operations.getStatusCode(), "查询审批记录");
|
|
|
JSONObject operationBody = unwrapContent(operations.getBody());
|
|
|
List<ApprovalRecordParser.ApprovalRecord> records = ApprovalRecordParser.parse(
|
|
|
- operationBody == null ? null : operationBody.getJSONArray("result"), zone);
|
|
|
- if (records.isEmpty()) throw new IllegalStateException("尚无已执行的人工审批记录,不回写审批印章子表");
|
|
|
+ operationBody == null ? null : operationBody.getJSONArray("result"), zone,
|
|
|
+ properties.isApprovalRecordUtcTextLocal());
|
|
|
+ records.add(0, ApprovalRecordParser.originator(instance, zone, properties.isApprovalRecordUtcTextLocal()));
|
|
|
|
|
|
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);
|
|
|
for (ApprovalRecordParser.ApprovalRecord record : records) {
|
|
|
byte[] template = templateCache.get(record.getUserId());
|
|
|
if (template == null) {
|
|
|
@@ -203,8 +206,8 @@ public class SealServiceImpl implements SealService {
|
|
|
templateCache.put(record.getUserId(), template);
|
|
|
}
|
|
|
String approvalTime = timestamp.format(record.getTime());
|
|
|
- // 日期和时分秒分两行绘制,避免完整时间在个人印章上被截断。
|
|
|
- byte[] stamped = renderSeal(template, approvalTime.replace(' ', '\n'));
|
|
|
+ // 印章仅显示数字日期,返回值仍保留完整审批时间。
|
|
|
+ byte[] stamped = renderSeal(template, stampDate.format(record.getTime()));
|
|
|
StoredFile file = store(stamped, instanceId, approvalTime);
|
|
|
results.add(new SealApprovalRecordResult(record.getUserId(), record.getName(), approvalTime,
|
|
|
record.getAction(), record.getNodeName(), file.url, Collections.singletonList(imageValue(file))));
|
|
|
@@ -290,6 +293,7 @@ public class SealServiceImpl implements SealService {
|
|
|
for (SealApprovalRecordResult result : results) {
|
|
|
Map<String, Object> row = new LinkedHashMap<>();
|
|
|
row.put(NODE_FIELD, result.getNodeName());
|
|
|
+ row.put(APPROVER_NAME_FIELD, result.getApproverName());
|
|
|
row.put(STAMP_FIELD, result.getSealImages());
|
|
|
rows.add(row);
|
|
|
}
|