|
@@ -1,23 +1,29 @@
|
|
|
package com.qunzhixinxi.hnqz.admin.controller;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.ArrayUtil;
|
|
|
import cn.hutool.core.util.NumberUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONObject;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.constant.CacheConstants;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.dto.OladingCommonRequest;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.HuiqiyunInputRecord;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.LingcaiaiInputRecord;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.OladingInputRecord;
|
|
|
+import com.qunzhixinxi.hnqz.admin.entity.SysDeptSub;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.XinbadaInputRecord;
|
|
|
+import com.qunzhixinxi.hnqz.admin.entity.ZhongyiyunInputRecord;
|
|
|
+import com.qunzhixinxi.hnqz.admin.enums.SubjectLocation;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.HuiqiyunInputRecordService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.LingcaiaiInputRecordService;
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.SysDeptSubService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.XinbadaInputRecordService;
|
|
|
+import com.qunzhixinxi.hnqz.admin.service.ZhongyiyunInputRecordService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.gig.GigThirdApiService;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.gig.OladingInputRecordService;
|
|
|
-import com.qunzhixinxi.hnqz.admin.util.HMACSignProvider;
|
|
|
+import com.qunzhixinxi.hnqz.admin.util.ZhongyiyunUtil;
|
|
|
import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
|
|
|
import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
|
|
|
import lombok.AllArgsConstructor;
|
|
@@ -34,9 +40,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.Enumeration;
|
|
|
import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -63,20 +67,12 @@ public class GigThirdApiController {
|
|
|
|
|
|
private final HuiqiyunInputRecordService huiqiyunInputRecordService;
|
|
|
|
|
|
+ private final ZhongyiyunInputRecordService zhongyiyunInputRecordService;
|
|
|
+
|
|
|
+ private final SysDeptSubService sysDeptSubService;
|
|
|
+
|
|
|
private final RedisTemplate redisTemplate;
|
|
|
|
|
|
-// 阿拉钉签名验签
|
|
|
-// private static final HMACSignProvider hMACSignProvide = new HMACSignProvider();
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 公钥
|
|
|
-// */
|
|
|
-// private static final String PUBLIC_KEY = "123123123";
|
|
|
-//
|
|
|
-// /**
|
|
|
-// * 算法类型
|
|
|
-// */
|
|
|
-// private static final String ALGORITHM_TYPE = "HmacSHA256";
|
|
|
|
|
|
/**
|
|
|
* 众蚁云异步通知回调
|
|
@@ -86,12 +82,67 @@ public class GigThirdApiController {
|
|
|
* @return
|
|
|
*/
|
|
|
@Inner(value = false)
|
|
|
- @SysLog("众蚁云异步通知回调")
|
|
|
+ @SysLog("众蚁云签约异步通知回调")
|
|
|
@PostMapping("/zhongyiyun/sign-notify")
|
|
|
- public String zhongYiYunRequest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
|
|
|
+ public String zhongYiYunSignNotifyRequest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
|
|
|
log.info("众蚁云请求方法参数:body={}, headers={}", body, headers);
|
|
|
|
|
|
-// return "fail";
|
|
|
+ // 请求body json
|
|
|
+ JSONObject bodyJson = JSONUtil.parseObj(body);
|
|
|
+
|
|
|
+ // 请求序号
|
|
|
+ String reqId = bodyJson.getStr("reqId");
|
|
|
+
|
|
|
+ String redisKey = String.format("%s_%s", CacheConstants.ZHONG_YI_YUN_NOTIFY_KEY, reqId);
|
|
|
+ Boolean absent = redisTemplate.opsForValue().setIfAbsent(redisKey, reqId, 30, TimeUnit.MINUTES);
|
|
|
+ if (Boolean.FALSE.equals(absent)) {
|
|
|
+ log.warn("存在在途操作reqId={}", reqId);
|
|
|
+ return "fail";
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONObject newBodyJson = null;
|
|
|
+ try {
|
|
|
+ String merId = bodyJson.getStr("merId");
|
|
|
+ String bankCard = bodyJson.getStr("bankCard");
|
|
|
+ String idCard = bodyJson.getStr("idCard");
|
|
|
+ String mobile = bodyJson.getStr("mobile");
|
|
|
+ String name = bodyJson.getStr("name");
|
|
|
+ String remark3 = bodyJson.getStr("remark3");
|
|
|
+
|
|
|
+ // 查询deptSub获取desKey
|
|
|
+ SysDeptSub deptSub = sysDeptSubService.getOne(Wrappers.<SysDeptSub>lambdaQuery()
|
|
|
+ .likeRight(SysDeptSub::getAppId, merId)
|
|
|
+ .eq(SysDeptSub::getEnableFlag, "1")
|
|
|
+ .eq(SysDeptSub::getSubjectLocation, SubjectLocation.ZHONG_YI_YUN));
|
|
|
+ if (deptSub == null || StrUtil.isBlank(deptSub.getAppId())) {
|
|
|
+ log.warn("未配置众蚁云deptSub merId={}", merId);
|
|
|
+ return "fail";
|
|
|
+ }
|
|
|
+
|
|
|
+ String desKey = StrUtil.split(deptSub.getAppId(), "|").get(2);
|
|
|
+
|
|
|
+ newBodyJson = BeanUtil.copyProperties(bodyJson, JSONObject.class);
|
|
|
+ newBodyJson.set("bankCard", ZhongyiyunUtil.decrypt(bankCard, desKey));
|
|
|
+ newBodyJson.set("idCard", ZhongyiyunUtil.decrypt(idCard, desKey));
|
|
|
+ newBodyJson.set("mobile", ZhongyiyunUtil.decrypt(mobile, desKey));
|
|
|
+ newBodyJson.set("name", ZhongyiyunUtil.decrypt(name, desKey));
|
|
|
+ newBodyJson.set("remark3", ZhongyiyunUtil.decrypt(remark3, desKey));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("众蚁云签约回调参数异常", e);
|
|
|
+ return "fail";
|
|
|
+ } finally {
|
|
|
+ // 请求记录到数据库
|
|
|
+ ZhongyiyunInputRecord inputRecord = new ZhongyiyunInputRecord();
|
|
|
+ inputRecord.setReqId(reqId);
|
|
|
+ inputRecord.setReqType(ZhongyiyunInputRecord.ReqType.SIGN_NOTIFY.getType());
|
|
|
+ inputRecord.setReqBody(body);
|
|
|
+ inputRecord.setDecryptBody(JSONUtil.toJsonStr(newBodyJson));
|
|
|
+ zhongyiyunInputRecordService.save(inputRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 业务处理
|
|
|
+ gigThirdApiService.zhongYiYunSignNotify(newBodyJson);
|
|
|
+
|
|
|
return "success";
|
|
|
}
|
|
|
|