| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package com.hr.externelSystem;
- import com.alibaba.fastjson.JSONObject;
- import com.alibaba.fastjson2.JSON;
- import com.hr.dto.AggregateQueryDTO;
- import com.hr.dto.ApiLogDto;
- import com.hr.param.AggregateRequest;
- import com.hr.repository.domain.*;
- import com.hr.repository.jpa.IpLogRepository;
- import com.hr.repository.jpa.IpOrderRepository;
- import com.hr.util.SnowflakeIdWorker;
- import com.hr.vo.CallbackResponseVO;
- import com.timevale.esign.paas.tech.util.AesUtil;
- import com.yy.basedevelop.common.data.BaseReturnDto;
- import com.yy.basedevelop.common.util.ruoyi.exception.ServiceException;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.http.HttpStatus;
- import org.apache.poi.ss.formula.functions.T;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.time.LocalDateTime;
- import java.util.List;
- @Component
- @Slf4j
- public class BizHandlerFactory {
- @Autowired
- private List<BizHandler> handlers;
- @Autowired
- private IpOrderRepository ipOrderRepository;
- @Autowired
- private IpLogRepository ipLogRepository;
- public BizHandler getHandler(String interfaceCode){
- for (BizHandler handler : handlers) {
- if (handler.getType().getServiceCode().equals(interfaceCode)){
- return handler;
- }
- }
- throw new ServiceException("找不到接口服务:" + interfaceCode);
- }
- /**
- * 接口平台分发数据
- * @param req
- * @param dto
- * @return
- */
- public BaseReturnDto<Object> dispatch(AggregateRequest req, AggregateQueryDTO dto) {
- IpInterfacePO ipInterfacePO = dto.getIpInterfacePO();
- BizHandler handler = getHandler(ipInterfacePO.getInterfaceNo());
- IpOrderPO ipOrderPO = new IpOrderPO();
- IpLogPO ipLogPO = new IpLogPO();
- String data = req.getData();
- try {
- ApiLogDto logDto = new ApiLogDto();
- IpTokenPO ipTokenPO = dto.getIpTokenPO();
- String decrypt = AesUtil.decrypt(data, ipTokenPO.getSecret());
- Class requestClass = handler.getRequestClass();
- Object o = JSON.parseObject(decrypt, requestClass);
- wrapOrder(req, dto, ipOrderPO, ipInterfacePO,ipLogPO);
- ipOrderPO.setStatus("handle");
- ipOrderRepository.save(ipOrderPO);
- ipLogRepository.save(ipLogPO);
- Object handle = handler.handle(o, ipInterfacePO,logDto);
- ipLogPO.setSystemResponse(JSON.toJSONString(handle));
- String errorMessage = logDto.getErrorMessage();
- if(StringUtils.isEmpty(errorMessage)){
- ipOrderPO.setStatus("success");
- ipLogPO.setStatus("success");
- }else{
- ipOrderPO.setStatus("fail");
- ipLogPO.setStatus("fail");
- }
- ipOrderPO.setInterfaceId(ipInterfacePO.getId());
- ipOrderPO.setUpdateTime(LocalDateTime.now());
- ipOrderPO.setBusinessNo(logDto.getBusinessNo());
- ipLogPO.setUrl(logDto.getUrl());
- ipLogPO.setRequestParam(logDto.getRequestParam());
- ipLogPO.setUpdateTime(LocalDateTime.now());
- ipLogPO.setResponseResult(logDto.getResponseParam());
- ipLogPO.setHttpStatus(logDto.getHttpStatus());
- ipLogPO.setMsg(logDto.getErrorMessage());
- ipOrderRepository.save(ipOrderPO);
- ipLogRepository.save(ipLogPO);
- return BaseReturnDto.success(handle);
- } catch (Exception e) {
- log.error("数据解密失败",JSON.toJSONString(req),e);
- }
- return BaseReturnDto.error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "数据处理失败");
- }
- private void wrapOrder(AggregateRequest req, AggregateQueryDTO dto, IpOrderPO ipOrderPO, IpInterfacePO ipInterfacePO, IpLogPO ipLogPO) {
- IpTokenInterfacePO ipTokenInterfacePO = dto.getIpTokenInterfacePO();
- ipOrderPO.setId(SnowflakeIdWorker.nextId());
- ipOrderPO.setInterfaceName(ipInterfacePO.getInterfaceName());
- ipOrderPO.setAccNo(req.getAccountNo());
- ipOrderPO.setToken(req.getToken());
- ipOrderPO.setRefId(0L);
- ipOrderPO.setIsCallback(ipTokenInterfacePO.getIsCallback());
- ipOrderPO.setCallbackNum(ipTokenInterfacePO.getCallbackNum());
- ipOrderPO.setCallbackUrl(ipTokenInterfacePO.getCallbackUrl());
- ipOrderPO.setAddTime(LocalDateTime.now());
- ipOrderPO.setManufacturer(ipInterfacePO.getManufacturer());
- ipLogPO.setId(SnowflakeIdWorker.nextId());
- ipLogPO.setOid(ipOrderPO.getId());
- ipLogPO.setAddTime(LocalDateTime.now());
- ipLogPO.setExecuteType("request");
- ipLogPO.setStatus("handle");
- }
- private void wrapCallBackOrder(IpOrderPO ipOrder, CallbackResponseVO callback, LocalDateTime callDateTime, JSONObject json) {
- IpLogPO ipLog = new IpLogPO();
- IpOrderPO ipOrderPO = new IpOrderPO();
- ipOrderPO.setId(SnowflakeIdWorker.nextId());
- ipOrderPO.setInterfaceName(ipOrder.getInterfaceName());
- ipOrderPO.setAccNo(ipOrder.getAccNo());
- ipOrderPO.setInterfaceId(ipOrder.getInterfaceId());
- ipOrderPO.setRefId(ipOrder.getId());
- ipOrderPO.setCallbackUrl(ipOrder.getCallbackUrl());
- ipOrderPO.setAddTime(callDateTime);
- ipOrderPO.setUpdateTime(LocalDateTime.now());
- ipOrderPO.setManufacturer(ipOrder.getManufacturer());
- ipOrderPO.setStatus(callback.getStatus() ? "success" : "fail");
- ipOrderPO.setCallbackStatus(callback.getStatus() ? "success" : "fail");
- ipLog.setId(SnowflakeIdWorker.nextId());
- ipLog.setOid(ipOrderPO.getId());
- ipLog.setAddTime(callDateTime);
- ipLog.setRequestParam(json.toJSONString());
- ipLog.setExecuteType("callback");
- ipLog.setStatus(callback.getStatus() ? "success" : "fail");
- ipLog.setUpdateTime(LocalDateTime.now());
- ipLog.setResponseResult(callback.getResponseParam());
- ipOrderRepository.save(ipOrderPO);
- ipLogRepository.save(ipLog);
- }
- public Boolean doCallBack(String interfaceNo, String businessNo, JSONObject json) {
- IpOrderPO ipOrderPO = ipOrderRepository.findByBusinessNo(businessNo);
- if(ipOrderPO == null){
- log.error("找不到对应的业务编码");
- return false;
- }
- String callbackStatus = ipOrderPO.getCallbackStatus();
- if("success".equals(callbackStatus)){
- log.info("当前业务回调已处理,已忽略");
- return true;
- }
- Boolean isCallback = ipOrderPO.getIsCallback();
- if(!isCallback){
- log.info("当前业务未设置回调,已忽略");
- return true;
- }
- BizHandler handler = getHandler(interfaceNo);
- Boolean callbackResult = false;
- ipOrderPO.setCallbackStatus("handle");
- for (int i = 0; i < ipOrderPO.getCallbackNum(); i++) {
- LocalDateTime callDateTime = LocalDateTime.now();
- CallbackResponseVO result = handler.doCallBack(ipOrderPO, json);
- // 记录调用记录
- wrapCallBackOrder(ipOrderPO,result,callDateTime,json);
- if(result.getStatus()){
- callbackResult = true;
- break;
- }
- }
- ipOrderPO.setCallbackStatus(callbackResult ? "success" : "fail");
- return callbackResult;
- }
- }
|