ソースを参照

贷款编号UUID生成逻辑、日志监控注解名称修改、新增无认证标签体系列表、标签树查询接口

2643616413 10 時間 前
コミット
90d08bf153

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

@@ -113,6 +113,8 @@ public class AitagTagCategoryController {
         }
     }
 
+
+
     @ApiOperationType("标签体系详情")
     @GetMapping("/detail/{id}")
     public Result<AitagTagCategoryVo> getCategoryDetail(@PathVariable String id) {
@@ -123,4 +125,23 @@ public class AitagTagCategoryController {
             return Result.error("500", "查询标签体系详情失败:" + e.getMessage());
         }
     }
+
+
+    /**
+     * 外部页面获取已启用的标签体系列表,无需token
+     *
+     * @return ResultDto
+     */
+    @ApiOperationType("外部标签体系")
+    @GetMapping("/enablelistnoauth")
+    public Result<List<AitagTagCategoryVo>> listEnabledCategoriesNoAuth(
+            @RequestParam(defaultValue = "1") int page,
+            @RequestParam(defaultValue = "5") int size) {
+        try {
+            Page<AitagTagCategoryVo> pageResult = aiTagCategoryService.listEnabledCategories(page, size);
+            return Result.pageSuccess(pageResult.getRecords(), pageResult.getTotal());
+        } catch (Exception e) {
+            return Result.error("500", "分页查询失败:" + e.getMessage());
+        }
+    }
 }

+ 29 - 11
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/controller/AitagTagInfoController.java

@@ -1,5 +1,6 @@
 package cn.com.yusys.yusp.controller;
 
+import cn.com.yusys.yusp.annotation.ApiOperationType;
 import cn.com.yusys.yusp.commons.exception.BizException;
 import cn.com.yusys.yusp.commons.module.adapter.web.rest.ResultDto;
 import cn.com.yusys.yusp.util.SessionCommonUtil;
@@ -60,7 +61,7 @@ public class AitagTagInfoController {
      * @param aitagTagInfoQueryVo
      * @return ResultDto
      */
-    @ApiOperation("列表标签分页信息")
+    @ApiOperationType("列表标签分页信息")
     @GetMapping("/page")
     public ResultDto<List<AitagTagInfoEntity>> page(AitagTagInfoQueryVo aitagTagInfoQueryVo) {
         IPage<AitagTagInfoEntity> page = aitagTagInfoService.queryPage(aitagTagInfoQueryVo);
@@ -74,7 +75,7 @@ public class AitagTagInfoController {
      * @param aitagTagInfoQueryVo
      * @return ResultDto
      */
-    @ApiOperation("标签列表查询")
+    @ApiOperationType("标签列表查询")
     @GetMapping("/list")
     public ResultDto<List<AitagTagInfoEntity>> list(AitagTagInfoQueryVo aitagTagInfoQueryVo) {
         List<AitagTagInfoEntity> page = aitagTagInfoService.queryList(aitagTagInfoQueryVo);
@@ -87,7 +88,7 @@ public class AitagTagInfoController {
      * @param aitagTagInfoQueryVo
      * @return ResultDto
      */
-    @ApiOperation("查询标签树")
+    @ApiOperationType("查询标签树")
     @PostMapping("/queryTagTree")
     public ResultDto<List<TagNodeVo>> queryTagTree(@RequestBody AitagTagInfoQueryVo aitagTagInfoQueryVo) {
         if(StringUtils.isBlank(aitagTagInfoQueryVo.getCategoryId())){
@@ -97,13 +98,14 @@ public class AitagTagInfoController {
         return ResultDto.success(tagNodeVos);
     }
 
+
     /**
      * 详细
      *
      * @param id
      * @return ResultDto
      */
-    @ApiOperation("详细")
+    @ApiOperationType("标签详细")
     @GetMapping("/info/{id}")
     public ResultDto<TagInfoDto> info(@PathVariable("id") String id) {
         TagInfoDto aitagTagInfo = aitagTagInfoService.getTagInfo(id);
@@ -116,7 +118,7 @@ public class AitagTagInfoController {
      * @param aitagTagInfoEntity
      * @return ResultDto
      */
-    @ApiOperation("保存")
+    @ApiOperationType("标签保存")
     @PostMapping("/save")
     public ResultDto save(@RequestBody AitagTagInfoEntity aitagTagInfoEntity) {
         String id = aitagTagInfoService.saveTag(aitagTagInfoEntity);
@@ -133,7 +135,7 @@ public class AitagTagInfoController {
      * @param aitagTagInfoEntity
      * @return ResultDto
      */
-    @ApiOperation("修改")
+    @ApiOperationType("标签修改")
     @PostMapping("/update")
     public ResultDto update(@RequestBody AitagTagInfoEntity aitagTagInfoEntity) {
         aitagTagInfoService.updateTag(aitagTagInfoEntity);
@@ -150,7 +152,7 @@ public class AitagTagInfoController {
      * @param versionRollbackVo
      * @return ResultDto
      */
-    @ApiOperation("版本回溯")
+    @ApiOperationType("版本回溯")
     @PostMapping("/versionRollback")
     public ResultDto versionRollback(@RequestBody VersionRollbackVo versionRollbackVo) {
         String id = aitagTagInfoService.versionRollback(versionRollbackVo);
@@ -170,7 +172,7 @@ public class AitagTagInfoController {
      * @param ids
      * @return ResultDto
      */
-    @ApiOperation("删除")
+    @ApiOperationType("删除标签")
     @PostMapping("/delete")
     public ResultDto delete(@RequestBody Map<String,List> ids) {
         List<String> idsList = ids.get("ids");
@@ -187,7 +189,7 @@ public class AitagTagInfoController {
      * @param file
      * @return ResultDto
      */
-    @ApiOperation("批量导入")
+    @ApiOperationType("批量导入")
     @PostMapping("/batchImport")
     public ResultDto batchImport( @RequestParam("file") MultipartFile file,
                                   @RequestParam("reviser") String reviser,
@@ -217,7 +219,7 @@ public class AitagTagInfoController {
      * @param regexVo
      * @return ResultDto
      */
-    @ApiOperation("生成正则表达式")
+    @ApiOperationType("生成正则表达式")
     @PostMapping("/generateRegex")
     public ResultDto<String> generateRegex( @RequestBody GenerateRegexVo regexVo) throws IOException {
         Map body = JSONObject.parseObject(JSONObject.toJSONString(regexVo), Map.class);
@@ -236,7 +238,7 @@ public class AitagTagInfoController {
      *
      * @return ResultDto
      */
-    @ApiOperation("批量导入模板下载")
+    @ApiOperationType("批量导入模板下载")
     @GetMapping("/downloadFile")
     public ResponseEntity<Resource> downloadFile( ) throws IOException {
 
@@ -263,4 +265,20 @@ public class AitagTagInfoController {
         }
     }
 
+
+    /**
+     * 外部页面查询标签树,无需token
+     *
+     * @param aitagTagInfoQueryVo
+     * @return ResultDto
+     */
+    @ApiOperationType("外部查询标签树")
+    @PostMapping("/queryTagTreeNoAuth")
+    public ResultDto<List<TagNodeVo>> queryTagTreeNoAuth(@RequestBody AitagTagInfoQueryVo aitagTagInfoQueryVo) {
+        if(StringUtils.isBlank(aitagTagInfoQueryVo.getCategoryId())){
+            throw BizException.of("E001");
+        }
+        List<TagNodeVo> tagNodeVos = aitagTagInfoService.queryTagTree(aitagTagInfoQueryVo);
+        return ResultDto.success(tagNodeVos);
+    }
 }

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

@@ -1,5 +1,6 @@
 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.entity.AitagTagInfoVersionEntity;
 import cn.com.yusys.yusp.domain.vo.AitagTagInfoVersionQueryVo;
@@ -41,7 +42,7 @@ public class AitagTagInfoVersionController {
      * @param aitagTagInfoVersionQueryVo
      * @return ResultDto
      */
-    @ApiOperation("列表查询")
+    @ApiOperationType("列表查询")
     @GetMapping("/list")
     public ResultDto<List<AitagTagInfoVersionEntity>> list(AitagTagInfoVersionQueryVo aitagTagInfoVersionQueryVo) {
         IPage<AitagTagInfoVersionEntity> page = aitagTagInfoVersionService.queryPage(aitagTagInfoVersionQueryVo);
@@ -55,7 +56,7 @@ public class AitagTagInfoVersionController {
      * @param id
      * @return ResultDto
      */
-    @ApiOperation("详细")
+    @ApiOperationType("详细")
     @GetMapping("/info/{id}")
     public ResultDto<AitagTagInfoVersionEntity> info(@PathVariable("id") String id) {
         AitagTagInfoVersionEntity aitagTagInfoVersion = aitagTagInfoVersionService.getById(id);
@@ -69,7 +70,7 @@ public class AitagTagInfoVersionController {
      * @param aitagTagInfoVersionEntity
      * @return ResultDto
      */
-    @ApiOperation("保存")
+    @ApiOperationType("保存")
     @PostMapping("/save")
     public ResultDto save(@RequestBody AitagTagInfoVersionEntity aitagTagInfoVersionEntity) {
         aitagTagInfoVersionService.save(aitagTagInfoVersionEntity);
@@ -82,7 +83,7 @@ public class AitagTagInfoVersionController {
      * @param aitagTagInfoVersionEntity
      * @return ResultDto
      */
-    @ApiOperation("修改")
+    @ApiOperationType("修改")
     @PostMapping("/update")
     public ResultDto update(@RequestBody AitagTagInfoVersionEntity aitagTagInfoVersionEntity) {
         aitagTagInfoVersionService.updateById(aitagTagInfoVersionEntity);
@@ -96,7 +97,7 @@ public class AitagTagInfoVersionController {
      * @param ids
      * @return ResultDto
      */
-    @ApiOperation("删除")
+    @ApiOperationType("删除")
     @PostMapping("/delete")
     public ResultDto delete(@RequestBody String[] ids) {
         aitagTagInfoVersionService.removeByIds(Arrays.asList(ids));

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

@@ -1,5 +1,6 @@
 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.entity.AitagTagLogEntity;
 import cn.com.yusys.yusp.domain.vo.*;
@@ -47,7 +48,7 @@ public class AitagTagLogController {
      * @param taggingResult 智能打标结果
      * @return ResultDto
      */
-    @ApiOperation("我的配置")
+    @ApiOperationType("我的配置")
     @PostMapping("/dataOverview")
     public ResultDto<DataOverviewVo> dataOverview(@RequestBody SmartTaggingResultVo taggingResult) {
         DataOverviewVo dataOverviewDTO = aitagTagLogService.dataOverview(taggingResult);
@@ -62,7 +63,7 @@ public class AitagTagLogController {
      * @param taggingTrendReq 打标趋势
      * @return ResultDto
      */
-    @ApiOperation("打标趋势")
+    @ApiOperationType("打标趋势")
     @PostMapping("/taggingTrend")
     public ResultDto<List<IconResVo>> taggingTrend(@RequestBody TaggingTrendReqVo taggingTrendReq) {
         List<IconResVo> taggingTrendRes = aitagTagLogService.taggingTrend(taggingTrendReq);
@@ -75,7 +76,7 @@ public class AitagTagLogController {
      * @param resultDTO 智能打标结果
      * @return ResultDto
      */
-    @ApiOperation("标签分布统计")
+    @ApiOperationType("标签分布统计")
     @PostMapping("/tagDistStats")
     public ResultDto<List<IconResVo>> tagDistStats(@RequestBody TagDistStatsReqVo resultDTO) {
         List<IconResVo> taggingTrendRes = aitagTagLogService.tagDistStats(resultDTO);
@@ -89,7 +90,7 @@ public class AitagTagLogController {
      * @param transactionReqVo
      * @return ResultDto
      */
-    @ApiOperation("打标明细")
+    @ApiOperationType("打标明细")
     @PostMapping("/taggingTransaction")
     public ResultDto<IPage<AitagTagLogEntity>> taggingTransaction(@RequestBody TaggingTransactionReqVo transactionReqVo) {
         IPage<AitagTagLogEntity> page = aitagTagLogService.taggingDetails(transactionReqVo);
@@ -102,7 +103,7 @@ public class AitagTagLogController {
      * @param id
      * @return ResultDto
      */
-    @ApiOperation("打标结果详情")
+    @ApiOperationType("打标结果详情")
     @GetMapping("/show/{id}")
     public ResultDto<AitagTagLogEntity> show(@PathVariable("id") String id) {
         AitagTagLogEntity taggingDetailsResDTO = aitagTagLogService.show(id);
@@ -115,7 +116,7 @@ public class AitagTagLogController {
      * @param transactionReqVo
      * @return ResultDto
      */
-    @ApiOperation("导出数据")
+    @ApiOperationType("导出数据")
     @PostMapping("/exportData")
     public void exportData(@RequestBody TaggingTransactionReqVo transactionReqVo,HttpServletResponse response) throws IOException {
         List<AitagTagLogEntity> aitagTagLogEntities = aitagTagLogService.queryList(transactionReqVo);

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

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.UUID;
 
 @Slf4j
 @Api(tags = "AI打标接口")
@@ -25,16 +26,23 @@ public class FastApiController {
     @Autowired
     private FastApiService fastApiService;
 
-    @ApiOperationType("AI打标")
+    @ApiOperationType("AI 打标")
     @PostMapping("/tagging")
     public Result<AiTaggingResponseVo> tagging(@RequestBody AiTaggingRequestDto request) {
         try {
-            log.info("收到AI打标请求: appId={}, businessAttr={}", request.getAppId(), request.getBusinessAttr());
+            // 如果未传入 businessAttr,则自动生成 UUID
+            if (request.getBusinessAttr() == null || request.getBusinessAttr().isEmpty()) {
+                String uuid = UUID.randomUUID().toString();
+                request.setBusinessAttr(uuid);
+                log.info("自动生成 businessAttr: {}", uuid);
+            }
+
+            log.info("收到 AI 打标请求:appId={}, businessAttr={}", request.getAppId(), request.getBusinessAttr());
             AiTaggingResponseVo response = fastApiService.tagging(request);
             return Result.success(response);
         } catch (Exception e) {
-            log.error("AI打标接口调用失败", e);
-            return Result.error("500", "AI打标接口调用失败: " + e.getMessage());
+            log.error("AI 打标接口调用失败", e);
+            return Result.error("500", "AI 打标接口调用失败:" + e.getMessage());
         }
     }
 

+ 1 - 2
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/dto/fastapidto/AiTaggingRequestDto.java

@@ -22,8 +22,7 @@ public class AiTaggingRequestDto {
     @ApiModelProperty(value = "签名", required = true)
     private String sign;
 
-    @NotBlank(message = "业务属性不能为空")
-    @ApiModelProperty(value = "业务属性", required = true)
+    @ApiModelProperty(value = "业务属性", required = false)
     private String businessAttr;
 
     @NotBlank(message = "投向+用途+职业不能为空")

+ 3 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/vo/fastapivo/AiTaggingResponseVo.java

@@ -16,4 +16,7 @@ public class AiTaggingResponseVo {
 
     @ApiModelProperty(value = "返回数据")
     private String data;
+
+    @ApiModelProperty(value = "贷款编号(UUID),用于后续查询")
+    private String businessAttr;
 }

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

@@ -27,6 +27,7 @@ import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.UUID;
 
 @Slf4j
 @Service
@@ -41,8 +42,15 @@ public class FastApiServiceImpl implements FastApiService {
 
     @Override
     public AiTaggingResponseVo tagging(AiTaggingRequestDto request) {
+        // 如果 businessAttr 为空,生成 UUID
+        if (!StringUtils.hasText(request.getBusinessAttr())) {
+            String uuid = UUID.randomUUID().toString();
+            request.setBusinessAttr(uuid);
+            log.info("服务层自动生成 businessAttr: {}", uuid);
+        }
+
         String url = fastApiConfig.getUrl() + TAGGING_PATH;
-        log.info("调用AI打标接口: {}", url);
+        log.info("调用 AI 打标接口:{}", url);
 
         try (CloseableHttpClient httpClient = createHttpClient()) {
             HttpPost httpPost = new HttpPost(url);
@@ -54,15 +62,20 @@ public class FastApiServiceImpl implements FastApiService {
 
             try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                 String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
-                log.info("AI打标接口响应: {}", responseBody);
+                log.info("AI 打标接口响应:{}", responseBody);
 
-                return JSON.parseObject(responseBody, AiTaggingResponseVo.class);
+                AiTaggingResponseVo resultVo = JSON.parseObject(responseBody, AiTaggingResponseVo.class);
+                // 将生成的 UUID 返回给前端
+                resultVo.setBusinessAttr(request.getBusinessAttr());
+                return resultVo;
             }
         } catch (Exception e) {
-            log.error("调用AI打标接口失败", e);
+            log.error("调用 AI 打标接口失败", e);
             AiTaggingResponseVo errorResponse = new AiTaggingResponseVo();
             errorResponse.setCode("500");
-            errorResponse.setMessage("调用AI打标接口失败: " + e.getMessage());
+            errorResponse.setMessage("调用 AI 打标接口失败:" + e.getMessage());
+            // 错误时也要返回 UUID
+            errorResponse.setBusinessAttr(request.getBusinessAttr());
             return errorResponse;
         }
     }