Commit 017b5d76 authored by fangxinjiang's avatar fangxinjiang

Merge remote-tracking branch 'origin/MVP1.7.16' into MVP1.7.16

parents 655cc466 66b6fe4b
...@@ -99,41 +99,19 @@ public class FascController { ...@@ -99,41 +99,19 @@ public class FascController {
return fascService.urgeTask(id); return fascService.urgeTask(id);
} }
/**
* @param id 合同待签订任务记录表TEmployeeContractPre:id
* @Description: 获取附件
* @Author: hgw
* @Date: 2025/10/13 17:24
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
**/
@Operation(description = "获取附件")
@GetMapping("/getFileByRequestId")
public R<String> getFileByRequestId(@RequestParam String id) throws ApiException {
return fascService.getFileByRequestId(id);
}
// 法大大回调
/*@ResponseBody
@PostMapping(value = "/api/fascCallback")
public String fddEventCallback(@RequestHeader HttpHeaders headers,
@RequestParam("bizContent") String bizContent) throws Exception {
//appSecret,由开发者登陆到法大大官网,在应用管理管理中点击应用详情里面获取
String appSecret = "xxxx";
//获取请求头参数
String appId = headers.getFirst("X-FASC-App-Id");
String signType = headers.getFirst("X-FASC-Sign-Type");
String sign = headers.getFirst("X-FASC-Sign");
String timestamp = headers.getFirst("X-FASC-Timestamp");
//事件名称,开发者可以根据不同事件名称去解析bizContent的值,实现不同的逻辑
String event = headers.getFirst("X-FASC-Event");
String nonce = headers.getFirst("X-FASC-Nonce");
//验签
Map<String, String> paramMap = new HashMap<>();
paramMap.put("X-FASC-App-Id", appId);
paramMap.put("X-FASC-Sign-Type", "HMAC-SHA256");
paramMap.put("X-FASC-Timestamp", timestamp);
paramMap.put("X-FASC-Nonce", nonce);
paramMap.put("X-FASC-Event", event);
paramMap.put("bizContent", bizContent);
//参数排序,ascii码排序
String sortParam = FddCryptUtil.sortParameters(paramMap);
//生成签名后可以进行校验
String signature = FddCryptUtil.sign(sortParam, timestamp, appSecret);
if(!signature.equals(sign)) {
//log.error("日志记录,签名失败");
//为了不重复接收该请求,建议这里返回success,返回success后这条消息法大大将中断重试回调机制
return "{\"code\":\"200\";\"msg\":\"success\"}";
}
return "{\"code\":\"200\";\"msg\":\"success\"}";
}*/
@Operation(summary = "异步通知", description = "异步通知") @Operation(summary = "异步通知", description = "异步通知")
@RequestMapping(value = "/api/fascCallback") @RequestMapping(value = "/api/fascCallback")
...@@ -141,15 +119,17 @@ public class FascController { ...@@ -141,15 +119,17 @@ public class FascController {
// 新增推送日志 // 新增推送日志
TFascPushLog pushLog = new TFascPushLog(); TFascPushLog pushLog = new TFascPushLog();
pushLog.setTransReferenceId(fascConfig.getOpenId()); pushLog.setTransReferenceId(fascConfig.getOpenId());
pushLog.setReturnData(JSON.toJSONString(request));
pushLog.setTaskStatus(CommonConstants.ONE_STRING); pushLog.setTaskStatus(CommonConstants.ONE_STRING);
pushLog.setTypeKey("签署任务事件,异步通知"); pushLog.setTypeKey("签署任务事件,异步通知");
pushLog.setTypeName("签署任务事件,异步通知"); pushLog.setTypeName("签署任务事件,异步通知");
tFascPushLogService.save(pushLog); tFascPushLogService.save(pushLog);
if (checkSign(request)) { if (checkSign(request, pushLog)) {
pushLog.setTaskStatus(CommonConstants.TWO_STRING);
tFascPushLogService.updateById(pushLog);
return R.failed("验签失败"); return R.failed("验签失败");
} }
tFascPushLogService.updateById(pushLog);
String fddEvent = request.getHeader(FASC_EVENT); String fddEvent = request.getHeader(FASC_EVENT);
String fddBizContent = request.getParameter(FASC_BIZ_CONTENT); String fddBizContent = request.getParameter(FASC_BIZ_CONTENT);
if (Common.isNotNull(fddEvent)) { if (Common.isNotNull(fddEvent)) {
...@@ -173,25 +153,32 @@ public class FascController { ...@@ -173,25 +153,32 @@ public class FascController {
pushLog.setReturnData("签署任务作废事件:fddEvent:" + fddEvent + ";fddBizContent:" + fddBizContent); pushLog.setReturnData("签署任务作废事件:fddEvent:" + fddEvent + ";fddBizContent:" + fddBizContent);
return R.ok(null, "success"); return R.ok(null, "success");
} }
tFascPushLogService.updateById(pushLog);
} }
tFascPushLogService.updateById(pushLog);
return R.ok(null, "success"); return R.ok(null, "success");
} }
//验证签名,返回true表示失败 //验证签名,返回true表示失败
public boolean checkSign(HttpServletRequest request) throws Exception { public boolean checkSign(HttpServletRequest request, TFascPushLog pushLog) throws Exception {
Map<String, String> paraMap = new HashMap<>(); Map<String, String> paraMap = new HashMap<>();
paraMap.put(RequestConstants.APP_ID, request.getHeader(RequestConstants.APP_ID)); paraMap.put(RequestConstants.APP_ID, request.getHeader(RequestConstants.APP_ID));
paraMap.put(RequestConstants.SIGN_TYPE, request.getHeader(RequestConstants.SIGN_TYPE)); paraMap.put(RequestConstants.SIGN_TYPE, request.getHeader(RequestConstants.SIGN_TYPE));
paraMap.put(RequestConstants.TIMESTAMP, request.getHeader(RequestConstants.TIMESTAMP));
String timeStamp = request.getHeader(RequestConstants.TIMESTAMP);
paraMap.put(RequestConstants.TIMESTAMP, timeStamp);
paraMap.put(RequestConstants.NONCE, request.getHeader(RequestConstants.NONCE)); paraMap.put(RequestConstants.NONCE, request.getHeader(RequestConstants.NONCE));
paraMap.put(FASC_EVENT, request.getHeader(FASC_EVENT)); paraMap.put(FASC_EVENT, request.getHeader(FASC_EVENT));
paraMap.put(FASC_BIZ_CONTENT, request.getParameter(FASC_BIZ_CONTENT)); paraMap.put(FASC_BIZ_CONTENT, request.getParameter(FASC_BIZ_CONTENT));
//参数排序,ascii码排序 //参数排序,ascii码排序
String sortParam = FddCryptUtil.sortParameters(paraMap); String sortParam = FddCryptUtil.sortParameters(paraMap);
pushLog.setPushData(sortParam);
//计算之后得到签名 该签名需要放到请求头 //计算之后得到签名 该签名需要放到请求头
String signature = FddCryptUtil.sign(sortParam, request.getHeader(RequestConstants.TIMESTAMP), fascConfig.getAppSecret()); if (Common.isEmpty(sortParam) || Common.isEmpty(timeStamp)) {
return true;
}
String signature = FddCryptUtil.sign(sortParam, timeStamp, fascConfig.getAppSecret());
if (StringUtils.equals(signature, request.getHeader(RequestConstants.SIGN))) { if (StringUtils.equals(signature, request.getHeader(RequestConstants.SIGN))) {
return false; return false;
} }
......
...@@ -41,5 +41,7 @@ public interface FascService extends IService<FddContractInfo> { ...@@ -41,5 +41,7 @@ public interface FascService extends IService<FddContractInfo> {
// 催办签署任务 // 催办签署任务
R<String> urgeTask(String id) throws ApiException; R<String> urgeTask(String id) throws ApiException;
// 获取附件
R<String> getFileByRequestId(String id) throws ApiException;
} }
...@@ -245,6 +245,29 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr ...@@ -245,6 +245,29 @@ public class FascServiceImpl extends ServiceImpl<FddContractInfoMapper, FddContr
return fascUtil.urgeTask(contract, tFascPushLogService, tEmployeeContractPreMapper); return fascUtil.urgeTask(contract, tFascPushLogService, tEmployeeContractPreMapper);
} }
/**
* @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> getFileByRequestId(String id) throws ApiException {
// templateName 签署任务模板名称
TEmployeeContractPre contract = tEmployeeContractPreMapper.selectById(id);
if (contract == null) {
return R.failed("未找到合同");
}
if (Common.isEmpty(contract.getRequestId())) {
return R.failed("无requestId,请检查数据");
}
// TODO - 判断什么状态催办等,需要产品定
return fascUtil.getFileByRequestId(contract, tFascPushLogService, tEmployeeContractPreMapper);
}
} }
...@@ -17,6 +17,7 @@ import com.fasc.open.api.v5_1.req.template.SignTemplateDetailReq; ...@@ -17,6 +17,7 @@ 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.signtask.CreateSignTaskRes;
import com.fasc.open.api.v5_1.res.signtask.SignTaskGetFileRes;
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;
...@@ -35,6 +36,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.Common; ...@@ -35,6 +36,7 @@ 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.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 com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import org.checkerframework.checker.units.qual.C;
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;
...@@ -606,5 +608,56 @@ public class FascUtil { ...@@ -606,5 +608,56 @@ public class FascUtil {
return R.failed("res无返回"); return R.failed("res无返回");
} }
// 获取附件
public R<String> getFileByRequestId(TEmployeeContractPre contract, TFascPushLogService tFascPushLogService
, TEmployeeContractPreMapper tEmployeeContractPreMapper) throws ApiException {
OpenApiClient openApiClient = new OpenApiClient(fascConfig.getAppId(), fascConfig.getAppSecret(), fascConfig.getAppUrl());
String accessToken = this.getFascToken(openApiClient);
SignTaskClient signTaskClient = new SignTaskClient(openApiClient) ;
SignTaskGetFileReq signTaskGetFileReq = new SignTaskGetFileReq() ;
signTaskGetFileReq.setSignTaskId(contract.getRequestId()) ;
signTaskGetFileReq.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<SignTaskGetFileRes> res = signTaskClient.signTaskGetFile(signTaskGetFileReq) ;
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()) {
if (Common.isNotNull(res.getData()) && Common.isNotNull(res.getData().getDocs())) {
for (SignTaskGetFileRes.DocFileInfo doc : res.getData().getDocs()) {
if (Common.isNotNull(doc.getFddFileUrl())) {
// TODO-存储文档
//contract.setFileId(doc.getFileId());
}
}
}
contract.setProcessStatus(CommonConstants.dingleDigitStrArray[9]);
tEmployeeContractPreMapper.updateById(contract);
return R.ok();
} else {
contract.setRequestMsg(res.getMsg());
tEmployeeContractPreMapper.updateById(contract);
return R.failed(res.getMsg());
}
}
return R.failed("res无返回");
}
} }
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