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()); + } + } +}