From 9edf5fedb40166a552bb3b35dd059166f770effd Mon Sep 17 00:00:00 2001
From: RuicyWu <1063154311@qq.com>
Date: Wed, 15 Apr 2026 11:58:05 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
WEB-INF/src_signtask/spring/spring.xml | 1 +
.../callback/EsignCallbackFormBizService.java | 3 +-
.../constants/SignTaskConstants.java | 1 +
.../apps/src_signtask/job/SignTaskJob.java | 1 +
.../service/FormCreateService.java | 53 ++++++++++++-------
.../service/SignStatusQueryService.java | 50 +++++++++++++++++
.../rest/resources/SignTaskSaveResource.java | 34 ------------
.../{ => signtask}/FileTransportResource.java | 3 +-
.../resources/signtask/SignTaskResource.java | 51 ++++++++++++++++++
9 files changed, 141 insertions(+), 56 deletions(-)
create mode 100644 src/main/java/com/seeyon/apps/src_signtask/service/SignStatusQueryService.java
delete mode 100644 src/main/java/com/seeyon/ctp/rest/resources/SignTaskSaveResource.java
rename src/main/java/com/seeyon/ctp/rest/resources/{ => signtask}/FileTransportResource.java (91%)
create mode 100644 src/main/java/com/seeyon/ctp/rest/resources/signtask/SignTaskResource.java
diff --git a/WEB-INF/src_signtask/spring/spring.xml b/WEB-INF/src_signtask/spring/spring.xml
index a5394d3..77bc01e 100644
--- a/WEB-INF/src_signtask/spring/spring.xml
+++ b/WEB-INF/src_signtask/spring/spring.xml
@@ -8,6 +8,7 @@
+
\ No newline at end of file
diff --git a/src/main/java/com/seeyon/apps/src_signtask/callback/EsignCallbackFormBizService.java b/src/main/java/com/seeyon/apps/src_signtask/callback/EsignCallbackFormBizService.java
index 094bd94..cd59098 100644
--- a/src/main/java/com/seeyon/apps/src_signtask/callback/EsignCallbackFormBizService.java
+++ b/src/main/java/com/seeyon/apps/src_signtask/callback/EsignCallbackFormBizService.java
@@ -49,9 +49,10 @@ public class EsignCallbackFormBizService implements EsignCallbackBizService {
FormColumn formColumn = FormTableExecutor.queryOne(master, conditions, true);
Map fieldsMap = formColumn.getFieldsMap();
String callbackUrl = (String) fieldsMap.get("签署任务第三方系统回调地址");
+ String taskId = (String) fieldsMap.get("签署任务编号");
List fileUrls = attachmentManager.getBySubReference(Long.parseLong(refId));
String fileList = fileUrls.stream().map(f -> f + "").collect(Collectors.joining(","));
- String paramString = "?taskId=" + formId + "&task_finished=true" + "&signFiles=" + fileList;
+ String paramString = "?taskId=" + taskId + "&task_finished=true" + "&signFiles=" + fileList;
HttpClient.httpGet(callbackUrl + paramString,null,null);
}
diff --git a/src/main/java/com/seeyon/apps/src_signtask/constants/SignTaskConstants.java b/src/main/java/com/seeyon/apps/src_signtask/constants/SignTaskConstants.java
index 779ef37..f3676f4 100644
--- a/src/main/java/com/seeyon/apps/src_signtask/constants/SignTaskConstants.java
+++ b/src/main/java/com/seeyon/apps/src_signtask/constants/SignTaskConstants.java
@@ -5,6 +5,7 @@ public enum SignTaskConstants {
SIGNTASK_FORMNO("","签署任务档案底表"),
LOGINNAME("",""),
updateAccountName("",""),
+ DEAFULTTASKCREATOR("demo1","签署任务默认创建者"),
;
SignTaskConstants(String defaultValue, String description) {
diff --git a/src/main/java/com/seeyon/apps/src_signtask/job/SignTaskJob.java b/src/main/java/com/seeyon/apps/src_signtask/job/SignTaskJob.java
index 4d4f4db..d761230 100644
--- a/src/main/java/com/seeyon/apps/src_signtask/job/SignTaskJob.java
+++ b/src/main/java/com/seeyon/apps/src_signtask/job/SignTaskJob.java
@@ -38,6 +38,7 @@ public class SignTaskJob extends AbstractQuartzTask {
TableContext tableContext = FormTableExecutor.master(signTaskConfigProvider.getBizConfigByKey(SignTaskConstants.SIGNTASK_FORMNO));
List conditionList = new ArrayList<>();
conditionList.add(FormWhereCondition.build().display("签署状态").value(EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"签署状态","未签署")));
+ conditionList.add(FormWhereCondition.build().display("签署失败原因").clauseFactor(ClauseFactor.NULL));
conditionList.add(FormWhereCondition.build().display("E签宝流程编号").clauseFactor(ClauseFactor.NULL).startWithBracket(true).concatFactor(ClauseFactor.OR));
conditionList.add(FormWhereCondition.build().display("E签宝流程编号").value("0").endWithBracket(true));
List formColumns = FormTableExecutor.pageQuery(tableContext, null, conditionList, pageNum, pageSize, true);
diff --git a/src/main/java/com/seeyon/apps/src_signtask/service/FormCreateService.java b/src/main/java/com/seeyon/apps/src_signtask/service/FormCreateService.java
index 80a0db7..8066834 100644
--- a/src/main/java/com/seeyon/apps/src_signtask/service/FormCreateService.java
+++ b/src/main/java/com/seeyon/apps/src_signtask/service/FormCreateService.java
@@ -51,7 +51,7 @@ public class FormCreateService {
mainFormData.put("签署状态", EnumMapUtils.getEnumItemValueByDisplayValue(tableContext.getTableBean(),"签署状态","未签署"));
List conditions = new ArrayList<>();
conditions.add(FormWhereCondition.build().value(taskId).display("签署任务编号"));
- long count = FormTableExecutor.count(tableContext, new ArrayList<>(), conditions);
+ Long count = FormTableExecutor.count(tableContext, new ArrayList<>(), conditions);
if(count > 0) {
throw new RuntimeException("该签署任务ID的签署任务已存在");
}
@@ -62,40 +62,53 @@ public class FormCreateService {
V3xOrgMember creator = orgManager.getMemberByLoginName(params.getString("taskCreator"));
if(creator != null) {
mainFormData.put("签署任务创建者", creator.getId());
+ }else {
+ creator = orgManager.getMemberByLoginName(signTaskConfigProvider.getBizConfigByKey(SignTaskConstants.DEAFULTTASKCREATOR));
+ mainFormData.put("签署任务创建者", creator.getId());
}
+ String loginName = creator.getLoginName();
mainFormData.put("签署任务第三方系统回调地址", params.getString("callbackUrl"));
mainFormData.put("第三方系统唯一标识", params.getString("thirdSysFlag"));
// 将 signers 转成 JSON 字符串存入
if (params.containsKey("signers")) {
mainFormData.put("签署方配置", params.getJSONArray("signers").toString());
}
- String loginName = creator.getLoginName();
// 导入业务表单
- FormSaveUtil.formSave(loginName,formNo,formFactory,mainFormData,null);
-
List updateFields = new ArrayList<>();
+ List filePaths = null;
+ List fileNames = new ArrayList<>();
+ try {
+ if("LINK".equals(linkType)) {
+ for (int i = 0; i < urls.size(); i++) {
+ String savePath = TEMP_DIR + File.separator;
+ String fileName = HttpClient.httpDownloadFile((String)urls.get(i),null,savePath,"UTF-8");
+ fileNames.add(savePath + fileName);
+ }
+ }else if("REFID".equals(linkType)) {
+ FileUtil fileUtil = new FileUtil();
+ filePaths = fileUtil.fieldFileDownload(Long.parseLong((String) urls.get(0)), TEMP_DIR + File.separator);
+ }
+ }catch (Exception e) {
+ log.error(e.getMessage(),e);
+ throw new Exception("未获取到签署任务文件");
+ }
+ if(fileNames.size() == 0 && filePaths == null) {
+ throw new Exception("未获取到签署任务文件");
+ }
+ FormSaveUtil.formSave(loginName,formNo,formFactory,mainFormData,null);
FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions, true);
if(formColumn == null) {
return;
}
String formId = formColumn.getId();
- if("LINK".equals(linkType)) {
- List fileNames = new ArrayList<>();
- for (int i = 0; i < urls.size(); i++) {
- String savePath = TEMP_DIR + File.separator + i +".pdf";
- HttpClient.httpDownloadFile((String)urls.get(i),null,savePath,"UTF-8");
- fileNames.add(savePath);
- }
- String refId = uploadSignTaskFileToOA(fileNames, formId, loginName, updateAccountName);
+ String refId = null;
+ if(fileNames.size() > 0) {
+ refId = uploadSignTaskFileToOA(fileNames, formId, loginName, updateAccountName);
+ }else {
+ refId = uploadSignTaskFileToOA(filePaths, formId, loginName, updateAccountName);
+ }
+ if(refId != null) {
updateFields.add(FormUpdateField.build().display("签署任务文件").value(refId));
- }else if("REFID".equals(linkType)) {
- FileUtil fileUtil = new FileUtil();
- for (int i = 0; i < urls.size(); i++) {
- List filePaths = fileUtil.fieldFileDownload(Long.parseLong((String) urls.get(i)), TEMP_DIR + File.separator);
- String refId = uploadSignTaskFileToOA(filePaths, formId, loginName, updateAccountName);
- updateFields.add(FormUpdateField.build().display("签署任务文件").value(refId));
- break;
- }
}
if(updateFields.size() > 0){
FormTableExecutor.update(tableContext,updateFields,conditions);
diff --git a/src/main/java/com/seeyon/apps/src_signtask/service/SignStatusQueryService.java b/src/main/java/com/seeyon/apps/src_signtask/service/SignStatusQueryService.java
new file mode 100644
index 0000000..f72856b
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/src_signtask/service/SignStatusQueryService.java
@@ -0,0 +1,50 @@
+package com.seeyon.apps.src_signtask.service;
+
+import com.seeyon.apps.esign.service.EsignFlowQueryService;
+import com.seeyon.apps.src_signtask.config.SignTaskConfigProvider;
+import com.seeyon.apps.src_signtask.constants.SignTaskConstants;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.common.exceptions.BusinessException;
+import com.seeyon.utils.form.FormColumn;
+import com.seeyon.utils.form.FormTableExecutor;
+import com.seeyon.utils.form.FormWhereCondition;
+import com.seeyon.utils.form.TableContext;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class SignStatusQueryService {
+
+ private EsignFlowQueryService esignFlowQueryService = (EsignFlowQueryService) AppContext.getBean("esignFlowQueryService");
+ private SignTaskConfigProvider signTaskConfigProvider = (SignTaskConfigProvider) AppContext.getBean("signTaskConfigProvider");
+
+ public String querySignStatus(String taskId) throws BusinessException {
+ String formNo = signTaskConfigProvider.getBizConfigByKey(SignTaskConstants.SIGNTASK_FORMNO);
+ TableContext tableContext = FormTableExecutor.master(formNo);
+ List conditions = new ArrayList<>();
+ conditions.add(FormWhereCondition.build().value(taskId).display("签署任务编号"));
+ FormColumn formColumn = FormTableExecutor.queryOne(tableContext, conditions, true);
+ if(formColumn == null) {
+ return null;
+ }
+ Map fieldsMap = formColumn.getFieldsMap();
+ String eFlowId = (String)fieldsMap.get("E签宝流程编号");
+ Integer eFlowStatus = esignFlowQueryService.queryFlow(eFlowId);
+ //0 - 草稿 1 - 签署中 2 - 完成 3 - 撤销 5 - 过期(签署截至日期到期后触发)7 - 拒签
+ if(eFlowStatus == 0){
+ return "草稿";
+ }else if(1 == eFlowStatus) {
+ return "签署中";
+ }else if(2 == eFlowStatus) {
+ return "完成";
+ }else if(3 == eFlowStatus) {
+ return "撤销";
+ }else if(5 == eFlowStatus) {
+ return "过期";
+ } else if(7 == eFlowStatus) {
+ return "拒签";
+ }
+ return "查询错误";
+ }
+}
diff --git a/src/main/java/com/seeyon/ctp/rest/resources/SignTaskSaveResource.java b/src/main/java/com/seeyon/ctp/rest/resources/SignTaskSaveResource.java
deleted file mode 100644
index a62a4f4..0000000
--- a/src/main/java/com/seeyon/ctp/rest/resources/SignTaskSaveResource.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.seeyon.ctp.rest.resources;
-
-import cn.hutool.log.Log;
-import com.alibaba.fastjson.JSONObject;
-import com.seeyon.apps.src_signtask.service.FormCreateService;
-import com.seeyon.ctp.common.AppContext;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Response;
-
-@Path("/signtask")
-@Produces({"application/json", "application/xml"})
-public class SignTaskSaveResource extends BaseResource{
-
- private static final Log log = Log.get(SignTaskSaveResource.class);
- private FormCreateService formCreateService = (FormCreateService) AppContext.getBean("formCreateService");
-
- @POST
- @Path("/save")
- @Produces({"application/json"})
- @Consumes({"application/json"})
- public Response saveSignTask(JSONObject params){
- try {
- formCreateService.formCreate(params);
- return success("创建成功");
- }catch (Exception e) {
- log.error(e.getMessage(),e);
- }
- return fail("创建失败");
- }
-}
diff --git a/src/main/java/com/seeyon/ctp/rest/resources/FileTransportResource.java b/src/main/java/com/seeyon/ctp/rest/resources/signtask/FileTransportResource.java
similarity index 91%
rename from src/main/java/com/seeyon/ctp/rest/resources/FileTransportResource.java
rename to src/main/java/com/seeyon/ctp/rest/resources/signtask/FileTransportResource.java
index e77cec4..82029b3 100644
--- a/src/main/java/com/seeyon/ctp/rest/resources/FileTransportResource.java
+++ b/src/main/java/com/seeyon/ctp/rest/resources/signtask/FileTransportResource.java
@@ -1,8 +1,9 @@
-package com.seeyon.ctp.rest.resources;
+package com.seeyon.ctp.rest.resources.signtask;
import cn.hutool.log.Log;
import com.seeyon.apps.src_signtask.service.FileHandlerService;
import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.rest.resources.BaseResource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
diff --git a/src/main/java/com/seeyon/ctp/rest/resources/signtask/SignTaskResource.java b/src/main/java/com/seeyon/ctp/rest/resources/signtask/SignTaskResource.java
new file mode 100644
index 0000000..8d49c3f
--- /dev/null
+++ b/src/main/java/com/seeyon/ctp/rest/resources/signtask/SignTaskResource.java
@@ -0,0 +1,51 @@
+package com.seeyon.ctp.rest.resources.signtask;
+
+import cn.hutool.log.Log;
+import com.alibaba.fastjson.JSONObject;
+import com.seeyon.apps.src_signtask.service.FormCreateService;
+import com.seeyon.apps.src_signtask.service.SignStatusQueryService;
+import com.seeyon.ctp.common.AppContext;
+import com.seeyon.ctp.rest.resources.BaseResource;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+
+@Path("/signtask")
+@Produces({"application/json", "application/xml"})
+public class SignTaskResource extends BaseResource {
+
+ private static final Log log = Log.get(SignTaskResource.class);
+ private FormCreateService formCreateService = (FormCreateService) AppContext.getBean("formCreateService");
+ private SignStatusQueryService signStatusQueryService = (SignStatusQueryService) AppContext.getBean("signStatusQueryService");
+
+
+ @POST
+ @Path("/save")
+ @Produces({"application/json"})
+ @Consumes({"application/json"})
+ public Response saveSignTask(JSONObject params){
+ try {
+ formCreateService.formCreate(params);
+ return success("创建成功");
+ }catch (Exception e) {
+ log.error(e.getMessage(),e);
+ return fail("创建失败:" + e.getMessage());
+ }
+ }
+
+ @POST
+ @Path("/querySignStatus")
+ @Produces({"application/json"})
+ @Consumes({"application/json"})
+ public Response querySignStatus(JSONObject params){
+ try {
+ return success(signStatusQueryService.querySignStatus(params.getString("taskId")));
+ }catch (Exception e) {
+ log.error(e.getMessage(),e);
+ return fail("查询失败:" + e.getMessage());
+ }
+ }
+}