Commit 77dd2305 authored by hongguangwu's avatar hongguangwu

MVP1.7.16-法大大

parent d73818dd
...@@ -88,6 +88,7 @@ public class TEmployeeContractPre extends BaseEntity { ...@@ -88,6 +88,7 @@ public class TEmployeeContractPre extends BaseEntity {
@Schema(description = "法大大模版名称") @Schema(description = "法大大模版名称")
private String fadadaTemplate; private String fadadaTemplate;
@Schema(description = "数据来源1客户端 2客服端") @Schema(description = "数据来源1客户端 2客服端")
private String dataSource; private String dataSource;
...@@ -288,4 +289,15 @@ public class TEmployeeContractPre extends BaseEntity { ...@@ -288,4 +289,15 @@ public class TEmployeeContractPre extends BaseEntity {
@TableField(exist = false) @TableField(exist = false)
private List<TAttaInfo> attaList; private List<TAttaInfo> attaList;
@Schema(description = "法大大模版ID")
private String fadadaTemplateId;
// 1待发起、5发起失败、7签署失败,可以发起电子签 2025-10-14 18:25:16倩倩
// processStatus = "状态,0待确认,1待发起,2线下签待审核,3线下签审核不通过4线下签待归档5发起失败6签署中7签署失败8电子待归档9已完结10撤销签署")
@Schema(description = "任务ID")
private String requestId;
@Schema(description = "任务信息")
private String requestMsg;
} }
...@@ -56,6 +56,14 @@ public class TFascTemplateDetail extends BaseEntity { ...@@ -56,6 +56,14 @@ public class TFascTemplateDetail extends BaseEntity {
@ExcelProperty("模板ID") @ExcelProperty("模板ID")
@Schema(description = "模板ID") @Schema(description = "模板ID")
private String signTemplateId; private String signTemplateId;
/**
* 法大大文档ID
*/
@ExcelAttribute(name = "法大大文档ID", maxLength = 100)
@Length(max = 100, message = "法大大文档ID不能超过100个字符")
@ExcelProperty("法大大文档ID")
@Schema(description = "法大大文档ID")
private String fascDocId;
/** /**
* 法大大字段 * 法大大字段
*/ */
......
...@@ -565,4 +565,13 @@ public class TEmployeeContractPreVo extends RowIndex implements Serializable { ...@@ -565,4 +565,13 @@ public class TEmployeeContractPreVo extends RowIndex implements Serializable {
private String revokeReason; private String revokeReason;
/**
* 法大大模版ID
*/
@Length(max = 50, message = "法大大模版ID 不能超过50 个字符")
@ExcelAttribute(name = "法大大模版ID", maxLength = 50)
@Schema(description = "法大大模版ID")
@ExcelProperty("法大大模版ID")
private String fadadaTemplateId;
} }
package com.yifu.cloud.plus.v1.yifu.archives.controller; package com.yifu.cloud.plus.v1.yifu.archives.controller;
import com.alibaba.fastjson.JSON;
import com.fasc.open.api.exception.ApiException; import com.fasc.open.api.exception.ApiException;
import com.yifu.cloud.plus.v1.yifu.archives.entity.FddReqLog; import com.yifu.cloud.plus.v1.yifu.archives.service.FascService;
import com.yifu.cloud.plus.v1.yifu.archives.service.*;
import com.yifu.cloud.plus.v1.yifu.common.core.exception.CheckedException;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.dapr.config.DaprUpmsProperties;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
/** /**
* @auther huyc * @auther huyc
* @date 2022/6/29 * @date 2022/6/29
*/ */
@EnableConfigurationProperties({DaprUpmsProperties.class})
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/fasc") @RequestMapping("/fasc")
@Tag(name = "法大大专业版接口") @Tag(name = "法大大专业版接口")
public class FascController { public class FascController {
@Autowired @Autowired
private FascService fascService; private FascService fascService;
@Autowired
private FddReqLogService reqLogService;
@Autowired
private FddPersonAccountService fddPersonAccountService;
@Autowired
private FddContractInfoService fddContractInfoService;
@Autowired
private FddCompanyInfoService fddCompanyInfoService;
@Autowired
private FddContractAttachInfoService fddContractAttachInfoService;
@Autowired
private TEmployeeContractInfoService employeeContractInfoService;
/** /**
* @param templateName 签署任务模板名称,如果传了该参数,会根据名称模糊匹配查询,长度最大100个字符。 * @param templateName 签署任务模板名称,如果传了该参数,会根据名称模糊匹配查询,长度最大100个字符。
...@@ -51,50 +33,48 @@ public class FascController { ...@@ -51,50 +33,48 @@ public class FascController {
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String> * @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
**/ **/
@Operation(description = "获取模板") @Operation(description = "获取模板")
@GetMapping("/getTemplate" ) @GetMapping("/getTemplate")
public R<String> getTemplate(@RequestParam(required = false) String templateName) throws ApiException { public R<String> getTemplate(@RequestParam(required = false) String templateName) throws ApiException {
return fascService.getTemplate(templateName); return fascService.getTemplate(templateName);
} }
/** /**
* 保存请求参数日志 * @param id 合同待签订任务记录表TEmployeeContractPre:id
* * @Description: 发起电子签署
* @param request * @Author: hgw
*/ * @Date: 2025/10/13 17:24
private void saveReqLog(HttpServletRequest request) { * @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
Map<String, String[]> parameterMap = request.getParameterMap(); **/
FddReqLog fddReqLog = new FddReqLog(); @Operation(description = "发起电子签署")
fddReqLog.setResData(JSON.toJSONString(parameterMap)); @GetMapping("/submitContract")
fddReqLog.setMethodName(Thread.currentThread().getStackTrace()[1].getMethodName()); public R<String> submitContract(@RequestParam String id) throws ApiException {
fddReqLog.setClassName(Thread.currentThread().getStackTrace()[1].getClassName()); return fascService.submitContract(id);
reqLogService.save(fddReqLog);
} }
//验证签名 /**
public void checkSign(HttpServletRequest request) throws Exception { * @param id 合同待签订任务记录表TEmployeeContractPre:id
/* Map<String, String> paraMap = new HashMap<>(8); * @Description: 撤销签署
paraMap.put(GlobalConstants.FDD_APPID, request.getHeader(GlobalConstants.FDD_APPID)); * @Author: hgw
paraMap.put(GlobalConstants.FDD_SIGN_TYPE, request.getHeader(GlobalConstants.FDD_SIGN_TYPE)); * @Date: 2025/10/13 17:24
paraMap.put(GlobalConstants.FDD_TIMESTAMP, request.getHeader(GlobalConstants.FDD_TIMESTAMP)); * @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
paraMap.put(GlobalConstants.FDD_NONCE, request.getHeader(GlobalConstants.FDD_NONCE)); **/
paraMap.put(FDD_EVENT, request.getHeader(FDD_EVENT)); @Operation(description = "撤销签署")
String fddBizContent = request.getParameter(FDD_BIZ_CONTENT); @GetMapping("/cancelTask")
paraMap.put(FDD_BIZ_CONTENT, fddBizContent); public R<String> cancelTask(@RequestParam String id) throws ApiException {
//得到排序后的字符串,FddCryptUtil为法大大提供得签名工具类 return fascService.cancelTask(id);
String sortParam = FddCryptUtil.sortParameters(paraMap); }
//计算之后得到签名 该签名需要放到请求头
String signature = FddCryptUtil.sign(sortParam, request.getHeader(GlobalConstants.FDD_TIMESTAMP), fddConfigProperties.getAppKey()); /**
if (StringUtils.equals(signature, request.getHeader(GlobalConstants.FDD_API_SIGN))) { * @param id 合同待签订任务记录表TEmployeeContractPre:id
FddReqLog fddReqLog = new FddReqLog(); * @Description: 催办
paraMap.put(GlobalConstants.FDD_TIMESTAMP, request.getHeader(GlobalConstants.FDD_TIMESTAMP)); * @Author: hgw
fddReqLog.setReqData(signature); * @Date: 2025/10/13 17:24
fddReqLog.setResData(JSON.toJSONString(paraMap)); * @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
fddReqLog.setMethodName(Thread.currentThread().getStackTrace()[1].getMethodName()); **/
fddReqLog.setClassName(Thread.currentThread().getStackTrace()[1].getClassName()); @Operation(description = "催办")
reqLogService.save(fddReqLog); @GetMapping("/urgeTask")
return; public R<String> urgeTask(@RequestParam String id) throws ApiException {
}*/ return fascService.urgeTask(id);
throw new CheckedException("签名异常"); }
}
} }
...@@ -32,4 +32,14 @@ public interface FascService extends IService<FddContractInfo> { ...@@ -32,4 +32,14 @@ public interface FascService extends IService<FddContractInfo> {
// 获取模板 // 获取模板
R<String> getTemplate(String templateName) throws ApiException; R<String> getTemplate(String templateName) throws ApiException;
// 推送法大大任务
R<String> submitContract(String id) throws ApiException;
// 撤销签署任务
R<String> cancelTask(String id) throws ApiException;
// 催办签署任务
R<String> urgeTask(String id) throws ApiException;
} }
...@@ -19,23 +19,18 @@ package com.yifu.cloud.plus.v1.yifu.archives.service.impl; ...@@ -19,23 +19,18 @@ package com.yifu.cloud.plus.v1.yifu.archives.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasc.open.api.exception.ApiException; import com.fasc.open.api.exception.ApiException;
import com.fasc.open.api.v5_1.res.template.SignTemplateListInfo; import com.fasc.open.api.v5_1.res.template.SignTemplateListInfo;
import com.yifu.cloud.plus.v1.yifu.archives.entity.FddContractInfo; import com.yifu.cloud.plus.v1.yifu.archives.entity.*;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascEditLog;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplate;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplateDetail;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.FddContractInfoMapper; import com.yifu.cloud.plus.v1.yifu.archives.mapper.FddContractInfoMapper;
import com.yifu.cloud.plus.v1.yifu.archives.service.*; import com.yifu.cloud.plus.v1.yifu.archives.service.*;
import com.yifu.cloud.plus.v1.yifu.archives.utils.FascUtil; import com.yifu.cloud.plus.v1.yifu.archives.utils.FascUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* 法大大专业版 * 法大大专业版
...@@ -54,6 +49,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr ...@@ -54,6 +49,7 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
private final TFascPushLogService tFascPushLogService; private final TFascPushLogService tFascPushLogService;
private final TFascTemplateService tFascTemplateService; private final TFascTemplateService tFascTemplateService;
private final TFascTemplateDetailService tFascTemplateDetailService; private final TFascTemplateDetailService tFascTemplateDetailService;
private final TEmployeeContractPreService tEmployeeContractPreService;
@Override @Override
public R<String> getTemplate(String templateName) throws ApiException { public R<String> getTemplate(String templateName) throws ApiException {
...@@ -95,10 +91,14 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr ...@@ -95,10 +91,14 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
} }
// 主表: // 主表:
TFascTemplate oldMain; TFascTemplate oldMain;
String logId;
for (TFascTemplate t : tList) { for (TFascTemplate t : tList) {
oldMain = oldMainMap.get(t.getSignTemplateId()); oldMain = oldMainMap.get(t.getSignTemplateId());
if (oldMain != null) { if (oldMain != null) {
t.setId(oldMain.getId()); t.setId(oldMain.getId());
} else {
logId = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
t.setId(logId);
} }
this.addFascLogToList(t.getId(), CommonConstants.ONE_STRING, editContent1, logList); this.addFascLogToList(t.getId(), CommonConstants.ONE_STRING, editContent1, logList);
updateMain.add(t); updateMain.add(t);
...@@ -115,6 +115,9 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr ...@@ -115,6 +115,9 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
oldDetail = oldDetailMap.get(t.getSignTemplateId() + CommonConstants.DOWN_LINE_STRING + t.getFascFieldId()); oldDetail = oldDetailMap.get(t.getSignTemplateId() + CommonConstants.DOWN_LINE_STRING + t.getFascFieldId());
if (oldDetail != null) { if (oldDetail != null) {
t.setId(oldDetail.getId()); t.setId(oldDetail.getId());
} else {
logId = String.valueOf(UUID.randomUUID()).replaceAll("-", "");
t.setId(logId);
} }
this.addFascLogToList(t.getId(), CommonConstants.TWO_STRING, editContent1, logList); this.addFascLogToList(t.getId(), CommonConstants.TWO_STRING, editContent1, logList);
updateDetail.add(t); updateDetail.add(t);
...@@ -157,4 +160,90 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr ...@@ -157,4 +160,90 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
} }
/**
* @param id TEmployeeContractPre主键
* @Description: 推送法大大任务
* @Author: hgw
* @Date: 2025/10/15 16:40
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
**/
@Override
public R<String> submitContract(String id) throws ApiException {
// templateName 签署任务模板名称
TEmployeeContractPre contract = tEmployeeContractPreService.getById(id);
if (contract == null) {
return R.failed("未找到合同");
}
if (Common.isEmpty(contract.getFadadaTemplateId())) {
return R.failed("未找到合同模板ID,请联系管理员");
}
if (Common.isEmpty(contract.getSignType())) {
return R.failed("签署方式为空,请联系管理员");
} else if (!CommonConstants.ONE_STRING.equals(contract.getSignType())) {
return R.failed("签署方式不是电子签,不可发起电子签署");
}
if (Common.isEmpty(contract.getProcessStatus())) {
return R.failed("合同无状态,请联系管理员");
} else if (!CommonConstants.dingleDigitStrArray[1].equals(contract.getProcessStatus())
&& !CommonConstants.dingleDigitStrArray[5].equals(contract.getProcessStatus())
&& !CommonConstants.dingleDigitStrArray[7].equals(contract.getProcessStatus())) {
return R.failed("合同状态不是待发起、发起失败、签署失败,不可发起电子签署!");
}
if (Common.isNotNull(contract.getRequestId())) {
return R.failed("合同已发起,请勿重复发起!");
}
// TODO - 判断是否入职超过1个月
R<String> requestInfo = fascUtil.submitContract(contract, tFascPushLogService, tEmployeeContractPreService);
return requestInfo;
}
/**
* @param id TEmployeeContractPre主键
* @Description: 撤销签署任务
* @Author: hgw
* @Date: 2025/10/15 16:40
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
**/
@Override
public R<String> cancelTask(String id) throws ApiException {
// templateName 签署任务模板名称
TEmployeeContractPre contract = tEmployeeContractPreService.getById(id);
if (contract == null) {
return R.failed("未找到合同");
}
if (Common.isEmpty(contract.getRequestId())) {
return R.failed("无requestId,请检查数据");
}
// TODO - 判断什么状态撤销等,需要产品定
return fascUtil.cancelTask(contract, tFascPushLogService, tEmployeeContractPreService);
}
/**
* @param id TEmployeeContractPre主键
* @Description: 催办签署任务
* @Author: hgw
* @Date: 2025/10/15 17:56
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
**/
@Override
public R<String> urgeTask(String id) throws ApiException {
// templateName 签署任务模板名称
TEmployeeContractPre contract = tEmployeeContractPreService.getById(id);
if (contract == null) {
return R.failed("未找到合同");
}
if (Common.isEmpty(contract.getRequestId())) {
return R.failed("无requestId,请检查数据");
}
// TODO - 判断什么状态催办等,需要产品定
return fascUtil.urgeTask(contract, tFascPushLogService, tEmployeeContractPreService);
}
} }
...@@ -36,5 +36,10 @@ public interface FascConstants { ...@@ -36,5 +36,10 @@ public interface FascConstants {
// 控件类型是印章 // 控件类型是印章
String FIELD_ZHANG_TYPE = "corp_seal,corp_seal_cross_page"; String FIELD_ZHANG_TYPE = "corp_seal,corp_seal_cross_page";
// 撤销签署失败原因为 已完成签署(处理的同时员工完成签署公司免验证签完成),则更新为签署完成的“待归档”状态。
String FIELD_REASON = "已完成签署";
// 超时未签署自行变更为线下签
String TIME_OUT_REASON = "超时未签署自行变更为线下签";
//String FIELD_TYPE = "text_single_line,text_multi_line,number,id_card,fill_date,multi_radio,multi_checkbox,picture,select_box,table,verification_code,business_code"; //String FIELD_TYPE = "text_single_line,text_multi_line,number,id_card,fill_date,multi_radio,multi_checkbox,picture,select_box,table,verification_code,business_code";
} }
package com.yifu.cloud.plus.v1.yifu.archives.utils; package com.yifu.cloud.plus.v1.yifu.archives.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasc.open.api.bean.base.BaseRes; import com.fasc.open.api.bean.base.BaseRes;
import com.fasc.open.api.bean.common.Actor;
import com.fasc.open.api.bean.common.OpenId; import com.fasc.open.api.bean.common.OpenId;
import com.fasc.open.api.bean.common.TemplateField; import com.fasc.open.api.bean.common.TemplateField;
import com.fasc.open.api.exception.ApiException; import com.fasc.open.api.exception.ApiException;
import com.fasc.open.api.v5_1.client.OpenApiClient; import com.fasc.open.api.v5_1.client.OpenApiClient;
import com.fasc.open.api.v5_1.client.ServiceClient; import com.fasc.open.api.v5_1.client.ServiceClient;
import com.fasc.open.api.v5_1.client.SignTaskClient;
import com.fasc.open.api.v5_1.client.TemplateClient; import com.fasc.open.api.v5_1.client.TemplateClient;
import com.fasc.open.api.v5_1.req.signtask.*;
import com.fasc.open.api.v5_1.req.template.GetSignTemplateListReq; import com.fasc.open.api.v5_1.req.template.GetSignTemplateListReq;
import com.fasc.open.api.v5_1.req.template.SignTemplateDetailReq; import com.fasc.open.api.v5_1.req.template.SignTemplateDetailReq;
import com.fasc.open.api.v5_1.req.template.SignTemplateListFilterInfo; import com.fasc.open.api.v5_1.req.template.SignTemplateListFilterInfo;
import com.fasc.open.api.v5_1.res.service.AccessTokenRes; import com.fasc.open.api.v5_1.res.service.AccessTokenRes;
import com.fasc.open.api.v5_1.res.signtask.CreateSignTaskRes;
import com.fasc.open.api.v5_1.res.template.DocumentInfo; import com.fasc.open.api.v5_1.res.template.DocumentInfo;
import com.fasc.open.api.v5_1.res.template.SignTemplateDetailRes; import com.fasc.open.api.v5_1.res.template.SignTemplateDetailRes;
import com.fasc.open.api.v5_1.res.template.SignTemplateListInfo; import com.fasc.open.api.v5_1.res.template.SignTemplateListInfo;
import com.fasc.open.api.v5_1.res.template.SignTemplateListRes; import com.fasc.open.api.v5_1.res.template.SignTemplateListRes;
import com.yifu.cloud.plus.v1.yifu.archives.config.FascConfig; import com.yifu.cloud.plus.v1.yifu.archives.config.FascConfig;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeContractPre;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascPushLog; import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascPushLog;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplate; import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplate;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplateDetail; import com.yifu.cloud.plus.v1.yifu.archives.entity.TFascTemplateDetail;
import com.yifu.cloud.plus.v1.yifu.archives.service.TEmployeeContractPreService;
import com.yifu.cloud.plus.v1.yifu.archives.service.TFascPushLogService; import com.yifu.cloud.plus.v1.yifu.archives.service.TFascPushLogService;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.exception.CheckedException; import com.yifu.cloud.plus.v1.yifu.common.core.exception.CheckedException;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.LocalDateTimeUtils; import com.yifu.cloud.plus.v1.yifu.common.core.util.LocalDateTimeUtils;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static com.alibaba.fastjson.serializer.SerializerFeature.*;
/** /**
* @Author: hgw * @Author: hgw
* @Date: 2025-9-25 14:24:53 * @Date: 2025-9-25 14:24:53
...@@ -46,6 +59,11 @@ public class FascUtil { ...@@ -46,6 +59,11 @@ public class FascUtil {
@Autowired @Autowired
private FascConfig fascConfig; private FascConfig fascConfig;
private static final SerializerFeature[] features = new SerializerFeature[]{
WriteMapNullValue, WriteNullNumberAsZero, WriteNullListAsEmpty,
WriteNullStringAsEmpty, WriteDateUseDateFormat
};
/** /**
* @Description: 获取token * @Description: 获取token
* @Author: huyc * @Author: huyc
...@@ -107,7 +125,7 @@ public class FascUtil { ...@@ -107,7 +125,7 @@ public class FascUtil {
// 新增推送日志 // 新增推送日志
TFascPushLog pushLog = new TFascPushLog(); TFascPushLog pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId()); pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setPushData(getSignTemplateListReq.toString()); pushLog.setPushData(JSON.toJSONString(getSignTemplateListReq, features));
pushLog.setTaskStatus(CommonConstants.ZERO_STRING); pushLog.setTaskStatus(CommonConstants.ZERO_STRING);
pushLog.setTypeKey("获取所有模板"); pushLog.setTypeKey("获取所有模板");
pushLog.setTypeName("获取模板"); pushLog.setTypeName("获取模板");
...@@ -117,7 +135,7 @@ public class FascUtil { ...@@ -117,7 +135,7 @@ public class FascUtil {
List<SignTemplateListInfo> list = null; List<SignTemplateListInfo> list = null;
if (res != null) { if (res != null) {
// 更新日志 // 更新日志
pushLog.setReturnData(res.toString()); pushLog.setReturnData(JSON.toJSONString(res, features));
pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING); pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING);
tFascPushLogService.updateById(pushLog); tFascPushLogService.updateById(pushLog);
...@@ -133,7 +151,7 @@ public class FascUtil { ...@@ -133,7 +151,7 @@ public class FascUtil {
pushLog = new TFascPushLog(); pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId()); pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setPushData(getSignTemplateListReq.toString()); pushLog.setPushData(JSON.toJSONString(getSignTemplateListReq, features));
pushLog.setTaskStatus(CommonConstants.ZERO_STRING); pushLog.setTaskStatus(CommonConstants.ZERO_STRING);
pushLog.setTypeKey(pushLog.getId() + "获取所有模板" + i); pushLog.setTypeKey(pushLog.getId() + "获取所有模板" + i);
pushLog.setTypeName("分页循环获取模板"); pushLog.setTypeName("分页循环获取模板");
...@@ -142,7 +160,7 @@ public class FascUtil { ...@@ -142,7 +160,7 @@ public class FascUtil {
res = templateClient.getSignTemplateList(getSignTemplateListReq); res = templateClient.getSignTemplateList(getSignTemplateListReq);
if (res != null) { if (res != null) {
// 更新日志 // 更新日志
pushLog.setReturnData(res.toString()); pushLog.setReturnData(JSON.toJSONString(res, features));
pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING); pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING);
tFascPushLogService.updateById(pushLog); tFascPushLogService.updateById(pushLog);
...@@ -184,6 +202,7 @@ public class FascUtil { ...@@ -184,6 +202,7 @@ public class FascUtil {
String fieldType; String fieldType;
String isMust; String isMust;
StringBuilder zhangName; StringBuilder zhangName;
String docId;
for (SignTemplateListInfo mainInfo : templateList) { for (SignTemplateListInfo mainInfo : templateList) {
if (mainInfo != null && mainInfo.getSignTemplateId() != null) { if (mainInfo != null && mainInfo.getSignTemplateId() != null) {
zhangName = new StringBuilder(); zhangName = new StringBuilder();
...@@ -208,7 +227,7 @@ public class FascUtil { ...@@ -208,7 +227,7 @@ public class FascUtil {
// 新增推送日志 // 新增推送日志
TFascPushLog pushLog = new TFascPushLog(); TFascPushLog pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId()); pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setPushData(signTemplateDetailReq.toString()); pushLog.setPushData(JSON.toJSONString(signTemplateDetailReq, features));
pushLog.setTaskStatus(CommonConstants.ZERO_STRING); pushLog.setTaskStatus(CommonConstants.ZERO_STRING);
pushLog.setTypeKey("获取所有明细映射"); pushLog.setTypeKey("获取所有明细映射");
pushLog.setTypeName("获取明细映射"); pushLog.setTypeName("获取明细映射");
...@@ -218,7 +237,7 @@ public class FascUtil { ...@@ -218,7 +237,7 @@ public class FascUtil {
if (res != null) { if (res != null) {
// 更新日志 // 更新日志
pushLog.setReturnData(res.toString()); pushLog.setReturnData(JSON.toJSONString(res, features));
pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING); pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING);
tFascPushLogService.updateById(pushLog); tFascPushLogService.updateById(pushLog);
...@@ -229,7 +248,8 @@ public class FascUtil { ...@@ -229,7 +248,8 @@ public class FascUtil {
} }
// 循环文档(1,2,3) // 循环文档(1,2,3)
for (DocumentInfo doc : res.getData().getDocs()) { for (DocumentInfo doc : res.getData().getDocs()) {
if (doc.getDocFields() != null) { if (doc.getDocFields() != null && Common.isNotNull(doc.getDocId())) {
docId = String.valueOf(doc.getDocId());
// 循环文档里的字段 // 循环文档里的字段
for (TemplateField fields : doc.getDocFields()) { for (TemplateField fields : doc.getDocFields()) {
fieldType = fields.getFieldType(); fieldType = fields.getFieldType();
...@@ -238,6 +258,7 @@ public class FascUtil { ...@@ -238,6 +258,7 @@ public class FascUtil {
// 文本数字等控件 // 文本数字等控件
detail = new TFascTemplateDetail(); detail = new TFascTemplateDetail();
detail.setSignTemplateId(signTemplateId); detail.setSignTemplateId(signTemplateId);
detail.setFascDocId(docId);
detail.setFascField(fields.getFieldName()); detail.setFascField(fields.getFieldName());
detail.setFascFieldId(fields.getFieldId()); detail.setFascFieldId(fields.getFieldId());
isMust = CommonConstants.ONE_STRING; isMust = CommonConstants.ONE_STRING;
...@@ -291,4 +312,299 @@ public class FascUtil { ...@@ -291,4 +312,299 @@ public class FascUtil {
} }
} }
public R<String> submitContract(TEmployeeContractPre contract, TFascPushLogService tFascPushLogService
, TEmployeeContractPreService tEmployeeContractPreService) throws ApiException {
OpenApiClient openApiClient = new OpenApiClient(fascConfig.getAppId(), fascConfig.getAppSecret(), fascConfig.getAppUrl());
String accessToken = this.getFascToken(openApiClient);
OpenId openId = new OpenId();
openId.setIdType(CacheConstants.FASC_ID_TYPE);
openId.setOpenId(fascConfig.getOpenId());
SignTaskClient signTaskClient = new SignTaskClient(openApiClient);
CreateWithTemplateReq createWithTemplateReq = new CreateWithTemplateReq();
createWithTemplateReq.setAccessToken(accessToken);
createWithTemplateReq.setInitiator(openId);
createWithTemplateReq.setSignTaskSubject("签署合同-" + contract.getEmpIdcard() + CommonConstants.DOWN_LINE_STRING + DateUtil.getThisTime());
createWithTemplateReq.setAutoStart(false);// 不要自动提交
createWithTemplateReq.setAutoFillFinalize(true);// 自动定稿
createWithTemplateReq.setAutoFinish(true);// 签署完成后自动结束
createWithTemplateReq.setCertCAOrg("CFCA");// 签署参与方使用的签章证书颁发机构,默认无要求。CFCA:要求使用CFCA(中国金融认证中心);EZCA:要求使用东方中讯CA
createWithTemplateReq.setSignTemplateId(contract.getFadadaTemplateId());
// 核心代码:设置参与方列表
createWithTemplateReq.setActors(this.buildActors(contract));
// 新增推送日志
TFascPushLog pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setPushData(JSON.toJSONString(createWithTemplateReq, features));
pushLog.setTaskStatus(CommonConstants.ZERO_STRING);
String empIdCard = contract.getEmpIdcard();
pushLog.setTypeKey("发起合同签署任务,身份证:" + empIdCard);
pushLog.setTypeName("发起合同签署任务");
pushLog.setContractId(contract.getId());
tFascPushLogService.save(pushLog);
BaseRes<CreateSignTaskRes> res = signTaskClient.createWithTemplate(createWithTemplateReq);
String requestId = null;
String msg = "法大大第一步创建签署任务失败!";
if (res != null) {
// 更新日志
pushLog.setReturnData(JSON.toJSONString(res, features));
pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING);
if (res.isSuccess() && res.getData() != null && res.getData().getSignTaskId() != null) {
requestId = res.getData().getSignTaskId();
pushLog.setSignTaskId(requestId);
}
tFascPushLogService.updateById(pushLog);
if (Common.isNotNull(requestId)) {
// 第二步:填写控件
R<String> sendValue = buildDocFieldValue(contract, requestId, openApiClient, accessToken);
if (R.isSuccess(sendValue)) {
// 第三步:提交任务
sendValue = submitTask(requestId, openApiClient, accessToken);
if (R.isSuccess(sendValue)) {
// 电子签签署中
this.doSuccessContract(contract, tEmployeeContractPreService, requestId);
return R.ok();
} else {
msg = "第三步失败:提交任务失败:" + sendValue.getMsg();
}
} else {
msg = "第二步失败:填写控件失败:" + sendValue.getMsg();
}
} else {
msg = "第一步失败:" + res.getMsg();
}
}
this.doFailContract(contract, tEmployeeContractPreService, msg);
return R.failed(msg);
}
// 发起失败,更新合同状态
private void doFailContract(TEmployeeContractPre contract, TEmployeeContractPreService tEmployeeContractPreService, String msg) {
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[7]);
contract.setRequestMsg(msg);
tEmployeeContractPreService.updateById(contract);
}
// 发起成功,更新合同状态
private void doSuccessContract(TEmployeeContractPre contract, TEmployeeContractPreService tEmployeeContractPreService, String requestId) {
// 电子签签署中
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[6]);
contract.setRequestId(requestId);
contract.setRequestMsg("");
tEmployeeContractPreService.updateById(contract);
}
// 第二步:填写控件
private R<String> buildDocFieldValue(TEmployeeContractPre contract, String requestId
, OpenApiClient openApiClient, String accessToken) throws ApiException {
SignTaskClient signTaskClient = new SignTaskClient(openApiClient);
FillFieldValuesReq fillFieldValuesReq = new FillFieldValuesReq();
fillFieldValuesReq.setSignTaskId(requestId);
List<DocFieldValueInfo> docFieldValues = new ArrayList<>();
DocFieldValueInfo dfv = new DocFieldValueInfo();
dfv.setDocId("78112332");
dfv.setFieldId("9738851979");
dfv.setFieldValue(contract.getEmployeeName());
docFieldValues.add(dfv);
dfv = new DocFieldValueInfo();
dfv.setDocId("78112332");
dfv.setFieldId("2324432163");
dfv.setFieldValue(contract.getEmpIdcard());
docFieldValues.add(dfv);
fillFieldValuesReq.setDocFieldValues(docFieldValues);
fillFieldValuesReq.setAccessToken(accessToken);
BaseRes<Void> res = signTaskClient.fillFieldValues(fillFieldValuesReq);
if (res != null) {
if (res.isSuccess()) {
return R.ok();
}
return R.failed(res.getMsg());
}
return R.failed("res无返回");
}
// 第三步:提交任务
private R<String> submitTask(String requestId, OpenApiClient openApiClient, String accessToken) throws ApiException {
SignTaskClient signTaskClient = new SignTaskClient(openApiClient);
SignTaskBaseReq signTaskBaseReq = new SignTaskBaseReq();
signTaskBaseReq.setSignTaskId(requestId);
signTaskBaseReq.setAccessToken(accessToken);
BaseRes<Void> res = signTaskClient.start(signTaskBaseReq);
if (res != null) {
if (res.isSuccess()) {
return R.ok();
}
return R.failed(res.getMsg());
}
return R.failed("res无返回");
}
/**
* 构建参与方列表
*/
private List<AddActorsTempInfo> buildActors(TEmployeeContractPre contract) {
List<AddActorsTempInfo> actors = new ArrayList<>();
// 添加企业方(甲方)
actors.add(buildCompanyActor(contract));
// 核心代码:添加员工方(乙方)
actors.add(buildEmployeeActor(contract));
return actors;
}
/**
* 构建企业方参与方
*/
private AddActorsTempInfo buildCompanyActor(TEmployeeContractPre contract) {
AddActorsTempInfo companyActor = new AddActorsTempInfo();
Actor actor = new Actor();
// TODO - 改造签署openID到mysql表里配置
// TODO - 参与方1 在模板详情接口返回
actor.setActorId("发起企业"); // 与模板中的参与方标识一致
actor.setActorType(CacheConstants.FASC_ID_TYPE);
actor.setActorName("安徽皖信人力资源管理有限公司");
// 权限设置
actor.setPermissions(Collections.singletonList("sign"));
// 企业OpenId
actor.setActorOpenId(fascConfig.getOpenId());
// 通知设置
actor.setSendNotification(true);
// 通知地址:注:如参与方已传actorOpenId、acterFDDId或accountName,该字段会被忽略
/*if Common.isNotNull(contract.getEmpPhone()))
actor.setNotifyAddress(contract.getEmpPhone()
}*/
actor.setNotifyType(Collections.singletonList("start"));
companyActor.setActor(actor);
return companyActor;
}
/**
* 构建员工方参与方
*/
private AddActorsTempInfo buildEmployeeActor(TEmployeeContractPre contract) {
AddActorsTempInfo employeeActor = new AddActorsTempInfo();
Actor actor = new Actor();
// TODO - 改造签署openID到mysql表里配置
// TODO - 参与方1 在模板详情接口返回
actor.setActorId("个人签署"); // 与模板中的参与方标识一致
actor.setActorType(CacheConstants.FASC_ID_TYPE_PERSON);
actor.setActorName(contract.getEmployeeName());
// 权限设置
actor.setPermissions(Collections.singletonList("sign"));
// 通知设置
actor.setSendNotification(true);
if (Common.isNotNull(contract.getEmpPhone())) {
actor.setNotifyAddress(contract.getEmpPhone());
}
actor.setNotifyType(Collections.singletonList("start"));
employeeActor.setActor(actor);
return employeeActor;
}
// 撤销签署
public R<String> cancelTask(TEmployeeContractPre contract, TFascPushLogService tFascPushLogService
, TEmployeeContractPreService tEmployeeContractPreService) throws ApiException {
OpenApiClient openApiClient = new OpenApiClient(fascConfig.getAppId(), fascConfig.getAppSecret(), fascConfig.getAppUrl());
String accessToken = this.getFascToken(openApiClient);
SignTaskClient signTaskClient = new SignTaskClient(openApiClient);
SignTaskCancelReq signTaskCancelReq = new SignTaskCancelReq();
signTaskCancelReq.setSignTaskId(contract.getRequestId());
signTaskCancelReq.setAccessToken(accessToken);
// 新增推送日志
TFascPushLog pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setPushData(JSON.toJSONString(signTaskCancelReq, features));
pushLog.setTaskStatus(CommonConstants.ZERO_STRING);
String empIdCard = contract.getEmpIdcard();
pushLog.setTypeKey("发起撤销签署任务,身份证:" + empIdCard);
pushLog.setTypeName("发起撤销签署任务");
pushLog.setContractId(contract.getId());
tFascPushLogService.save(pushLog);
BaseRes<Void> res = signTaskClient.cancel(signTaskCancelReq);
if (res != null) {
pushLog.setReturnData(JSON.toJSONString(res, features));
pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING);
tFascPushLogService.updateById(pushLog);
if (res.isSuccess()) {
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[1]);
contract.setSignType(CommonConstants.dingleDigitStrArray[1]);
contract.setRequestMsg("");
tEmployeeContractPreService.updateById(contract);
return R.ok();
} else {
// 撤销签署失败原因为 已完成签署(处理的同时员工完成签署公司免验证签完成),则更新为签署完成的“待归档”状态。
if (Common.isNotNull(res.getMsg()) && FascConstants.FIELD_REASON.equals(res.getMsg())) {
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[8]);
contract.setRevokeReason(FascConstants.TIME_OUT_REASON);
}
contract.setRequestMsg(res.getMsg());
tEmployeeContractPreService.updateById(contract);
return R.failed(res.getMsg());
}
}
return R.failed("res无返回");
}
// 催办
public R<String> urgeTask(TEmployeeContractPre contract, TFascPushLogService tFascPushLogService
, TEmployeeContractPreService tEmployeeContractPreService) throws ApiException {
OpenApiClient openApiClient = new OpenApiClient(fascConfig.getAppId(), fascConfig.getAppSecret(), fascConfig.getAppUrl());
String accessToken = this.getFascToken(openApiClient);
SignTaskClient signTaskClient = new SignTaskClient(openApiClient);
SignTaskBaseReq signTaskBaseReq = new SignTaskBaseReq();
signTaskBaseReq.setSignTaskId(contract.getRequestId());
signTaskBaseReq.setAccessToken(accessToken);
// 新增推送日志
TFascPushLog pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setPushData(JSON.toJSONString(signTaskClient, features));
pushLog.setTaskStatus(CommonConstants.ZERO_STRING);
String empIdCard = contract.getEmpIdcard();
pushLog.setTypeKey("发起催办任务,身份证:" + empIdCard);
pushLog.setTypeName("发起催办任务");
pushLog.setContractId(contract.getId());
tFascPushLogService.save(pushLog);
BaseRes<Void> res = signTaskClient.signTaskUrge(signTaskBaseReq);
if (res != null) {
pushLog.setReturnData(JSON.toJSONString(res, features));
pushLog.setTaskStatus(res.isSuccess() ? CommonConstants.ONE_STRING : CommonConstants.TWO_STRING);
tFascPushLogService.updateById(pushLog);
if (res.isSuccess()) {
return R.ok();
} else {
contract.setRequestMsg(res.getMsg());
tEmployeeContractPreService.updateById(contract);
return R.failed(res.getMsg());
}
}
return R.failed("res无返回");
}
} }
...@@ -8,6 +8,7 @@ spring: ...@@ -8,6 +8,7 @@ spring:
redis: redis:
host: 127.0.0.1 host: 127.0.0.1
port: 6379 port: 6379
password: '@yf_2017'
datasource: datasource:
type: com.zaxxer.hikari.HikariDataSource type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
<result property="errorInfo" column="error_info"/> <result property="errorInfo" column="error_info"/>
<result property="errorTime" column="error_time"/> <result property="errorTime" column="error_time"/>
<result property="fadadaTemplate" column="fadada_template"/> <result property="fadadaTemplate" column="fadada_template"/>
<result property="fadadaTemplateId" column="fadada_template_id"/>
<result property="dataSource" column="data_source"/> <result property="dataSource" column="data_source"/>
<result property="expectedCollectionTime" column="expected_collection_time"/> <result property="expectedCollectionTime" column="expected_collection_time"/>
<result property="contractStart" column="contract_start"/> <result property="contractStart" column="contract_start"/>
...@@ -84,7 +85,9 @@ ...@@ -84,7 +85,9 @@
<result property="createName" column="create_name"/> <result property="createName" column="create_name"/>
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/> <result property="updateBy" column="update_by"/>
<result property="contractSubName" column="CONTRACT_SUB_NAME,"/> <result property="contractSubName" column="CONTRACT_SUB_NAME"/>
<result property="requestId" column="request_id"/>
<result property="requestMsg" column="request_msg"/>
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id id
...@@ -103,6 +106,7 @@ ...@@ -103,6 +106,7 @@
,customer_user_loginname ,customer_user_loginname
,sign_type ,sign_type
,fadada_template ,fadada_template
,fadada_template_id
,data_source ,data_source
,expected_confirm_time ,expected_confirm_time
,expected_collection_time ,expected_collection_time
...@@ -165,6 +169,8 @@ ...@@ -165,6 +169,8 @@
,TASK ,TASK
,TASK_TYPE ,TASK_TYPE
,TASK_END_STANDARD,contract_flag,a.CONTRACT_SUB_NAME ,TASK_END_STANDARD,contract_flag,a.CONTRACT_SUB_NAME
,a.request_id
,a.request_msg
</sql> </sql>
<sql id="tEmployeeContractPre_where"> <sql id="tEmployeeContractPre_where">
<if test="tEmployeeContractPre != null"> <if test="tEmployeeContractPre != null">
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
<result property="signTemplateName" column="sign_template_name"/> <result property="signTemplateName" column="sign_template_name"/>
<result property="signTemplateStatus" column="sign_template_status"/> <result property="signTemplateStatus" column="sign_template_status"/>
<result property="contractType" column="contract_type"/> <result property="contractType" column="contract_type"/>
<result property="fascDocId" column="fasc_doc_id"/>
</resultMap> </resultMap>
<resultMap id="tFascTemplateDetailExportMap" type="com.yifu.cloud.plus.v1.yifu.archives.vo.TFascTemplateDetailExportVo"> <resultMap id="tFascTemplateDetailExportMap" type="com.yifu.cloud.plus.v1.yifu.archives.vo.TFascTemplateDetailExportVo">
...@@ -59,6 +60,7 @@ ...@@ -59,6 +60,7 @@
<sql id="Base_Column_List"> <sql id="Base_Column_List">
a.id, a.id,
a.sign_template_id, a.sign_template_id,
a.fasc_doc_id,
a.fasc_field, a.fasc_field,
a.fasc_field_id, a.fasc_field_id,
a.is_must, a.is_must,
......
...@@ -202,6 +202,7 @@ public interface CacheConstants { ...@@ -202,6 +202,7 @@ public interface CacheConstants {
String FASC_ACCOSS_TOKEN = "FASC_ACCOSS_TOKEN"; String FASC_ACCOSS_TOKEN = "FASC_ACCOSS_TOKEN";
// 如果idType为corp:代表应用系统上的企业用户,主体方是openCorpId所指定的企业 // 如果idType为corp:代表应用系统上的企业用户,主体方是openCorpId所指定的企业
String FASC_ID_TYPE = "corp"; String FASC_ID_TYPE = "corp";
String FASC_ID_TYPE_PERSON = "person";
/** /**
* 登录用户最近一次选择的收入证明单位名称 * 登录用户最近一次选择的收入证明单位名称
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment