Browse Source

对接ESB

2507040827 4 weeks ago
parent
commit
da21ee3780

+ 11 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/config/DataDictionary.java

@@ -59,4 +59,15 @@ public class DataDictionary {
 
     public static final String PROD_DATA = "0";
 
+    /**
+     *    画像系统 打标结果
+     *        1:确认打标;
+     *        0确认不打标
+     *
+     */
+    public static final String CONFIRM_TAGGING = "1";
+
+    public static final String CONFIRM_NOT_TAGGING = "0";
+
+
 }

+ 6 - 5
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/controller/AitagTagLogController.java

@@ -3,6 +3,7 @@ package cn.com.yusys.yusp.controller;
 import cn.com.yusys.yusp.annotation.ApiOperationType;
 import cn.com.yusys.yusp.commons.module.adapter.web.rest.ResultDto;
 import cn.com.yusys.yusp.domain.dto.TagLogDto;
+import cn.com.yusys.yusp.domain.dto.TagResultDto;
 import cn.com.yusys.yusp.domain.entity.AitagTagLogEntity;
 import cn.com.yusys.yusp.domain.vo.*;
 import cn.com.yusys.yusp.service.AitagTagLogService;
@@ -151,13 +152,13 @@ public class AitagTagLogController {
             return "";
         }
         result = result.replace("\\", "");
-        List<Map> results = JSONArray.parseArray(result, Map.class);
+        List<TagResultDto> tagResultDtos = JSONArray.parseArray(result, TagResultDto.class);
         StringBuilder stringBuilder = new StringBuilder();
-        for (int i = 0 ;i<results.size();i++){
-            Map resultMap = results.get(i);
-            String tagName = resultMap.getOrDefault("tag_name","").toString();
+        for (int i = 0 ;i<tagResultDtos.size();i++){
+            TagResultDto resultMap = tagResultDtos.get(i);
+            String tagName = resultMap.getTag_name();
             stringBuilder.append(tagName);
-            if(i < (results.size()-1) ){
+            if(i < (tagResultDtos.size()-1) ){
                 stringBuilder.append(",");
             }
         }

+ 3 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/controller/FastApiController.java

@@ -4,10 +4,12 @@ import cn.com.yusys.yusp.annotation.ApiOperationType;
 import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingFeedbackRequestDto;
 import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingQueryRequestDto;
 import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingRequestDto;
+import cn.com.yusys.yusp.domain.vo.EsbVo.CustomerProfileReqVo;
 import cn.com.yusys.yusp.domain.vo.fastapivo.AiTaggingQueryResponseVo;
 import cn.com.yusys.yusp.domain.vo.fastapivo.AiTaggingResponseVo;
 import cn.com.yusys.yusp.model.Result;
 import cn.com.yusys.yusp.service.FastApiService;
+import cn.com.yusys.yusp.service.esb.ESBService;
 import cn.com.yusys.yusp.util.AuthContextUtil;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
@@ -25,6 +27,7 @@ public class FastApiController {
     @Autowired
     private FastApiService fastApiService;
 
+
     @ApiOperationType("AI 打标")
     @PostMapping("/tagging")
     public Result<AiTaggingResponseVo> tagging(@RequestBody AiTaggingRequestDto request) {

+ 51 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/dto/TagResultDto.java

@@ -0,0 +1,51 @@
+package cn.com.yusys.yusp.domain.dto;
+
+
+import lombok.Data;
+
+
+/**
+ * 标签结果 实体类
+ *
+ * @author zky
+ */
+@Data
+public class TagResultDto {
+
+    /**
+     * 唯一标识ID
+     */
+    private String id;
+
+    /**
+     * 标签命中描述
+     */
+    private String desc;
+
+    /**
+     * 打标结果(是否命中)
+     */
+    private Boolean passr;
+
+    /**
+     * 标签编码
+     */
+    private String tag_code;
+
+    /**
+     * 标签名称
+     */
+    private String tag_name;
+
+    /**
+     * 标签路径
+     */
+    private String tag_path;
+
+    /**
+     * 标签类别ID
+     */
+    private String category_id;
+
+
+}

+ 36 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/vo/EsbVo/CustomerProfileNode.java

@@ -0,0 +1,36 @@
+package cn.com.yusys.yusp.domain.vo.EsbVo;
+
+
+import lombok.Data;
+import lombok.Getter;
+
+
+/**
+ * ESB 客户画像信息 数据节点
+ * @author zky
+ */
+@Getter
+public class CustomerProfileNode {
+
+    /** 对象编号(必输,长度32) */
+    private String OBJECT_ID;
+
+    /** 标签编号(必输,长度20) */
+    private String LABEL_ID;
+
+    /** 标签名称(必输,长度18) */
+    private String LABEL_NAME;
+
+
+    /**
+     *
+     * @param OBJECT_ID 合同Id
+     * @param LABEL_ID 标签编号
+     * @param LABEL_NAME 标签名称
+     */
+    public CustomerProfileNode(String OBJECT_ID, String LABEL_ID, String LABEL_NAME) {
+        this.OBJECT_ID = OBJECT_ID;
+        this.LABEL_ID = LABEL_ID;
+        this.LABEL_NAME = LABEL_NAME;
+    }
+}

+ 26 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/vo/EsbVo/CustomerProfileReqVo.java

@@ -0,0 +1,26 @@
+package cn.com.yusys.yusp.domain.vo.EsbVo;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * ESB 客户画像信息 请求参数
+ *
+ * @author zky
+ */
+
+
+@Data
+public class CustomerProfileReqVo {
+
+    /** 对象信息(必输,数组) */
+    private List<CustomerProfileNode> DATA;
+
+    /** 操作人编号(必输,长度10) */
+    private String USER_ID;
+
+    /** 打标结果(必输,长度1:0-不确认/1-确认) */
+    private String LABEL_RESULT;
+}

+ 24 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/vo/EsbVo/CustomerProfileResVo.java

@@ -0,0 +1,24 @@
+package cn.com.yusys.yusp.domain.vo.EsbVo;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * ESB 客户画像信息 请求参数
+ *
+ * @author zky
+ */
+
+
+@Data
+public class CustomerProfileResVo {
+
+    /** 结果状态(必输,长度1:1-失败/2-成功) */
+    private String RESULT;
+
+    /** 返回信息(必输,长度10) */
+    private String MSG;
+
+}

+ 5 - 4
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/DistributedScheduledTask.java

@@ -2,6 +2,7 @@ package cn.com.yusys.yusp.service;
 
 
 import cn.com.yusys.yusp.commons.util.StringUtils;
+import cn.com.yusys.yusp.domain.dto.TagResultDto;
 import cn.com.yusys.yusp.domain.entity.AitagTagDailyAggEntity;
 import cn.com.yusys.yusp.domain.entity.AitagTagLogEntity;
 import cn.com.yusys.yusp.mapper.AitagTagDailyAggDao;
@@ -103,11 +104,11 @@ public class DistributedScheduledTask {
     }
 
     private static void duCount(String result, Map<String, Integer> count) {
-        List<Map> results = JSONArray.parseArray(result, Map.class);
+        List<TagResultDto> results = JSONArray.parseArray(result, TagResultDto.class);
         for (int i = 0 ;i<results.size();i++){
-            Map resultMap = results.get(i);
-            String labe = resultMap.getOrDefault("tag_name","").toString()+":"
-                    + resultMap.getOrDefault("category_id","").toString();
+            TagResultDto resultMap = results.get(i);
+            String labe = resultMap.getTag_name()+":"
+                    + resultMap.getCategory_id();
             if(count.containsKey(labe)){
                 Integer integer = count.get(labe);
                 count.put(labe,integer+1);

+ 21 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/esb/ESBService.java

@@ -0,0 +1,21 @@
+package cn.com.yusys.yusp.service.esb;
+
+import cn.com.yusys.yusp.domain.vo.EsbVo.CustomerProfileReqVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+
+@Service
+@Slf4j
+public class ESBService {
+
+
+    /**
+     * 打标结果同步
+     * @param customerProfileReqVo 客户画像系统请求参数
+     */
+    public void taggingResultSync(CustomerProfileReqVo customerProfileReqVo){
+       log.info("准备调用ESB,访问客户画像接口同步打标结果");
+
+    }
+}

+ 1 - 17
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/impl/AitagTagLogServiceImpl.java

@@ -4,6 +4,7 @@ import cn.com.yusys.yusp.commons.exception.BizException;
 import cn.com.yusys.yusp.commons.util.date.DateUtils;
 import cn.com.yusys.yusp.config.DataDictionary;
 import cn.com.yusys.yusp.domain.dto.TagLogDto;
+import cn.com.yusys.yusp.domain.dto.TagResultDto;
 import cn.com.yusys.yusp.domain.entity.AitagTagInfoEntity;
 import cn.com.yusys.yusp.domain.vo.*;
 import cn.com.yusys.yusp.mapper.AitagTagDailyAggDao;
@@ -144,32 +145,15 @@ public class AitagTagLogServiceImpl extends ServiceImpl<AitagTagLogDao, AitagTag
             String feedback = aitagTagLog.getFeedback();
             if(FEEDBACK_RESULT_REJECT.equals(feedback)){
                 result = aitagTagLog.getFeedbackResult();
-                result = this.getTagPath(result);
                 aitagTagLog.setFeedbackResult(result);
             }else{
                 result = aitagTagLog.getResult();
-                result = getTagPath(result);
                 aitagTagLog.setResult(result);
             }
         }
         return JSONObject.parseObject(JSONObject.toJSONString(aitagTagLog), TagLogDto.class);
     }
 
-    private String getTagPath(String result) {
-        if(result == null){
-            return "";
-        }
-        result = result.replace("\\", "");
-        List<Map> results = JSONArray.parseArray(result, Map.class);
-        for (Map resultMap: results){
-            String tagId = resultMap.getOrDefault("id","").toString();
-            AitagTagInfoEntity aitagTagInfoEntity = tagInfoDao.selectById(tagId);
-            if(aitagTagInfoEntity!=null){
-                resultMap.put("tag_path",aitagTagInfoEntity.getTagPath());
-            }
-        }
-        return JSONArray.toJSONString(results);
-    }
 
     @Override
     public List<IconResVo> tagDistStats(TagDistStatsReqVo resultVo) {

+ 50 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/impl/FastApiServiceImpl.java

@@ -1,13 +1,24 @@
 package cn.com.yusys.yusp.service.impl;
 
+import cn.com.yusys.yusp.commons.util.StringUtils;
 import cn.com.yusys.yusp.config.FastApiConfig;
+import cn.com.yusys.yusp.domain.dto.TagResultDto;
 import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingFeedbackRequestDto;
 import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingQueryRequestDto;
 import cn.com.yusys.yusp.domain.dto.fastapidto.AiTaggingRequestDto;
+import cn.com.yusys.yusp.domain.entity.AitagTagLogEntity;
+import cn.com.yusys.yusp.domain.vo.EsbVo.CustomerProfileNode;
+import cn.com.yusys.yusp.domain.vo.EsbVo.CustomerProfileReqVo;
 import cn.com.yusys.yusp.domain.vo.fastapivo.AiTaggingQueryResponseVo;
 import cn.com.yusys.yusp.domain.vo.fastapivo.AiTaggingResponseVo;
+import cn.com.yusys.yusp.mapper.AitagTagLogDao;
+import cn.com.yusys.yusp.service.AitagTagLogService;
 import cn.com.yusys.yusp.service.FastApiService;
+import cn.com.yusys.yusp.service.esb.ESBService;
+import cn.com.yusys.yusp.util.SessionCommonUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.config.RequestConfig;
@@ -23,6 +34,11 @@ import org.springframework.stereotype.Service;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+
+import static cn.com.yusys.yusp.config.DataDictionary.CONFIRM_TAGGING;
+import static cn.com.yusys.yusp.config.DataDictionary.FEEDBACK_RESULT_AGREE;
 
 @Slf4j
 @Service
@@ -35,6 +51,12 @@ public class FastApiServiceImpl implements FastApiService {
     private static final String QUERY_PATH = "/api/aitag/v1/query";
     private static final String FEEDBACK_PATH = "/api/aitag/v1/feedback";
 
+    @Autowired
+    private ESBService esbService;
+
+    @Autowired
+    private AitagTagLogDao aitagTagLogDao;
+
     @Override
     public AiTaggingResponseVo tagging(AiTaggingRequestDto request) {
         String url = fastApiConfig.getUrl() + TAGGING_PATH;
@@ -144,6 +166,34 @@ public class FastApiServiceImpl implements FastApiService {
                     errorResponse.setMessage("AI 打标反馈接口调用失败:" + (responseBody.isEmpty() ? "服务器内部错误" : responseBody));
                     return errorResponse;
                 }
+                List<CustomerProfileNode> customerProfileNodes = new ArrayList<>();
+                if(StringUtils.equals(request.getFeedback(),FEEDBACK_RESULT_AGREE)){
+                    LambdaQueryWrapper<AitagTagLogEntity> queryWrapper = new LambdaQueryWrapper<>();
+                    queryWrapper.eq(AitagTagLogEntity::getBusinessAttr,request.getBusinessAttr());
+                    List<AitagTagLogEntity> aitagTagLogEntities = aitagTagLogDao.selectList(queryWrapper);
+                    AitagTagLogEntity aitagTagLog = aitagTagLogEntities.get(0);
+                    String result = aitagTagLog.getResult();
+                    List<TagResultDto> tagResultDtos = JSONArray.parseArray(result, TagResultDto.class);
+                    for(TagResultDto tagResult: tagResultDtos){
+                        if(tagResult.getPassr()){
+                            customerProfileNodes.add(new CustomerProfileNode(request.getContractNo()
+                            ,tagResult.getTag_code(),tagResult.getTag_name()));
+                        }
+                    }
+                }else{
+                    List<TagResultDto> tagResultDtos = JSONArray.parseArray(request.getFeedbackResult(), TagResultDto.class);
+                    for(TagResultDto tagResult: tagResultDtos){
+                        if(tagResult.getPassr()){
+                            customerProfileNodes.add(new CustomerProfileNode(request.getContractNo()
+                                    ,tagResult.getTag_code(),tagResult.getTag_name()));
+                        }
+                    }
+                }
+                CustomerProfileReqVo customerProfileReqVo = new CustomerProfileReqVo();
+                customerProfileReqVo.setLABEL_RESULT(CONFIRM_TAGGING);
+                customerProfileReqVo.setUSER_ID(SessionCommonUtil.getUserId());
+                customerProfileReqVo.setDATA(customerProfileNodes);
+                esbService.taggingResultSync(customerProfileReqVo);
 
                 return JSON.parseObject(responseBody, AiTaggingResponseVo.class);
             }

+ 26 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/util/SessionCommonUtil.java

@@ -49,5 +49,31 @@ public class SessionCommonUtil {
         }
         throw BizException.of("E009");
     }
+    public static String getUserId() {
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        if (requestAttributes != null) {
+            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
+            String authorization = request.getHeader("Authorization");
+            if (authorization != null) {
+                String jwtToken = authorization.startsWith("Bearer ") ? authorization.substring(7) : authorization;
+                String jsonStr = (String) redisTemplate.opsForValue().get("access:"+jwtToken);
+                if (jsonStr != null) {
+                    // 解析JSON数组
+                    JSONArray objects = JSONArray.parseArray(jsonStr);
+                    if (objects.size() >= 2) {
+                        String map = objects.get(1).toString();
+                        JSONObject jsonObject = JSONObject.parseObject(map);
+                        String userInfo = jsonObject.getString("userInfo");
+                        JSONObject userInfoMap = JSONObject.parseObject(userInfo);
+                        return userInfoMap.getString("userId");
+                    }
+                }
+            }else{
+                throw BizException.of("E009");
+            }
+        }
+        throw BizException.of("E009");
+    }
+
 
 }