Procházet zdrojové kódy

refactor(app): 重构签署回调接口并优化相关逻辑

- 新增 SignCallbackDTO 类用于封装回调数据
- 修改 ESignApi 控制器中的 signCallback 方法参数类型
- 更新 ESignServiceImpl 中的 signCallback 方法实现
- 优化回调处理逻辑,增加对签章完成情况的判断和更新
SheepHy před 2 měsíci
rodič
revize
cd6b482821

+ 4 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/ESignApi.java

@@ -1,18 +1,18 @@
 package org.jeecg.modules.app.controller;
 
-import com.google.gson.JsonObject;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.media.Schema;
-import io.swagger.v3.oas.annotations.parameters.RequestBody;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.app.dto.SignCallbackDTO;
 import org.jeecg.modules.app.esign.exception.EsignDemoException;
 import org.jeecg.modules.app.service.IESignService;
 import org.jeecg.modules.system.app.entity.AppContractSign;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
 @Slf4j
@@ -84,8 +84,8 @@ public class ESignApi {
      **/
     @PostMapping("/signCallback")
     @Operation(summary = "签署回调处理")
-    public Result<Boolean> signCallback(@RequestBody JsonObject jsonObject){
-        return Result.OK(iESignService.signCallback(jsonObject));
+    public Result<Boolean> signCallback(@RequestBody SignCallbackDTO rawBody, HttpServletRequest request) {
+        return Result.OK(iESignService.signCallback(rawBody));
     }
 
     /**

+ 26 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/SignCallbackDTO.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.app.dto;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class SignCallbackDTO {
+    private String action;
+    private Long timestamp;
+    private String signFlowId;
+    private String customBizNum;
+    private Integer signOrder;
+    private Long operateTime;
+    private Integer signResult;
+    private String resultDescription;
+    private OrganizationDTO organization;
+
+    @Data
+    public static class OrganizationDTO {
+        private String orgId;
+        private String orgName;
+    }
+}

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IESignService.java

@@ -1,7 +1,7 @@
 package org.jeecg.modules.app.service;
 
-import com.google.gson.JsonObject;
 import org.jeecg.modules.app.dto.SealInfoDTO;
+import org.jeecg.modules.app.dto.SignCallbackDTO;
 import org.jeecg.modules.app.esign.exception.EsignDemoException;
 import org.jeecg.modules.system.app.dto.AppContractInfoDTO;
 import org.jeecg.modules.system.app.entity.AppContractInfo;
@@ -147,7 +147,7 @@ public interface IESignService {
      * @Param
      * @return
      **/
-    Boolean signCallback(JsonObject jsonObject);
+    Boolean signCallback(SignCallbackDTO jsonObject);
 
     /**
      * @Author SheepHy

+ 12 - 13
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/ESignServiceImpl.java

@@ -166,7 +166,8 @@ public class ESignServiceImpl implements IESignService {
         AppOrder appOrder = orderMapper.selectOne(Wrappers.<AppOrder>lambdaQuery()
                 .eq(AppOrder::getOrderCode, orderCode));
 
-        AppContractInfo contractInfo = appAccountMapper.selectById(appOrder.getContractNo());
+        AppContractInfo contractInfo = appAccountMapper.selectOne(Wrappers.<AppContractInfo>lambdaQuery()
+                .eq(AppContractInfo::getOrgCode, appOrder.getOrgCode()).eq(AppContractInfo::getDelFlag, 0));
         SysDepart sysDepart = sysDepartMapper.selectOne(Wrappers.<SysDepart>lambdaQuery()
                 .eq(SysDepart::getOrgCode, appOrder.getOrgCode()));
 
@@ -433,10 +434,11 @@ public class ESignServiceImpl implements IESignService {
     @Override
     public String getSignUrl(String signFlowId) throws EsignDemoException {
         AppContractSign appContractSign = appContractSignMapper.selectOne(Wrappers.<AppContractSign>lambdaQuery().eq(AppContractSign::getSignFlowId, signFlowId));
+        if(null == appContractSign) throw new JeecgBootException("未找到该签署流程,请先发起签署");
         FamilyMembers familyMembers = familyMembersMapper.selectById(appContractSign.getFamilyId());
         SysDepart sysDepart = sysDepartMapper.selectOne(Wrappers.<SysDepart>lambdaQuery().eq(SysDepart::getOrgCode, appContractSign.getOrgCode()));
         JSONObject signUrl = JSONObject.parseObject(SignDemo.signUrl(signFlowId,familyMembers.getPhone(),sysDepart.getDepartName()).getBody());
-        return signUrl.getJSONObject("data").getString("url");
+        return signUrl.getJSONObject("data").getString("shortUrl");
     }
 
     @Override
@@ -644,24 +646,21 @@ public class ESignServiceImpl implements IESignService {
     }
 
     @Override
-    public Boolean signCallback(JsonObject jsonObject) {
+    public Boolean signCallback(SignCallbackDTO jsonObject) {
         try {
-            // 提取字段并验证
-            String action = jsonObject.get("action").getAsString();
-            String statusDesc = jsonObject.get("statusDescription").getAsString();
-            if("SIGN_FLOW_COMPLETE".equals(action) && "完成".equals(statusDesc)){
-                String signFlowId = jsonObject.get("signFlowId").getAsString();
+            if(jsonObject.getSignResult().equals(2)){
                 AppContractSign appContractSign = appContractSignMapper.selectOne(Wrappers.<AppContractSign>lambdaQuery()
-                        .eq(AppContractSign::getSignFlowId, signFlowId));
-                appContractSign.setIsSign(1).setSignTime(new Date());
-                return appContractSignMapper.updateById(appContractSign) > 0;
-            }else {
-                return false;
+                        .eq(AppContractSign::getSignFlowId, jsonObject.getSignFlowId()));
+                if(null != appContractSign){
+                    appContractSign.setIsSign(1).setSignTime(new Date());
+                    return appContractSignMapper.updateById(appContractSign) > 0;
+                }
             }
         } catch (Exception e) {
             log.error( e.getMessage());
             return false;
         }
+        return true;
     }
 
     @Override