Bladeren bron

智能打标结果相关功能-增加下载功能,和打标未确认

2507040827 5 dagen geleden
bovenliggende
commit
3df18336fd

+ 6 - 0
server/yusp-tagging-core/pom.xml

@@ -164,6 +164,12 @@
             <version>3.4.5</version> <!-- 最后一个支持 Java 8 的版本 -->
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel-core</artifactId>
+            <version>3.3.4</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

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

@@ -4,17 +4,25 @@ 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.*;
 import cn.com.yusys.yusp.service.AitagTagLogService;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+
+import static cn.com.yusys.yusp.config.DataDictionary.FEEDBACK_RESULT_REJECT;
 
 /**
  * 
@@ -34,12 +42,12 @@ public class AitagTagLogController {
 
 
     /**
-     * 数据概览
+     * 我的配置
      *
      * @param taggingResult 智能打标结果
      * @return ResultDto
      */
-    @ApiOperation("数据概览")
+    @ApiOperation("我的配置")
     @PostMapping("/dataOverview")
     public ResultDto<DataOverviewVo> dataOverview(@RequestBody SmartTaggingResultVo taggingResult) {
         DataOverviewVo dataOverviewDTO = aitagTagLogService.dataOverview(taggingResult);
@@ -102,17 +110,55 @@ public class AitagTagLogController {
     }
 
     /**
-     * 删除
+     * 导出数据
      *
-     * @param ids
+     * @param transactionReqVo
      * @return ResultDto
      */
-    @ApiOperation("删除")
-    @PostMapping("/delete")
-    public ResultDto delete(@RequestBody String[] ids) {
-        aitagTagLogService.removeByIds(Arrays.asList(ids));
+    @ApiOperation("导出数据")
+    @PostMapping("/exportData")
+    public void exportData(@RequestBody TaggingTransactionReqVo transactionReqVo,HttpServletResponse response) throws IOException {
+        List<AitagTagLogEntity> aitagTagLogEntities = aitagTagLogService.queryList(transactionReqVo);
+        List<ExportDataVo> exportDataVos = new ArrayList<>();
+        for (AitagTagLogEntity aitagTagLog:aitagTagLogEntities) {
+            ExportDataVo exportDataVo = JSONObject.parseObject(JSONObject.toJSONString(aitagTagLog), ExportDataVo.class);
+            if(FEEDBACK_RESULT_REJECT.equals(aitagTagLog.getFeedback())){
+                String feedbackResult = aitagTagLog.getFeedbackResult();
+                exportDataVo.setResult(getTags(feedbackResult));
+            }else{
+                String result = aitagTagLog.getResult();
+                exportDataVo.setResult(getTags(result));
+            }
+            exportDataVos.add(exportDataVo);
+        }
+        // 2. 设置响应头(防止中文乱码)
+        response.reset();
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        String fileName = URLEncoder.encode("导出标签", "UTF-8").replaceAll("\\+", "%20");
+        response.setHeader("Content-Disposition", "attachment; filename*=utf-8''" + fileName + ".xlsx");
+        EasyExcel.write(response.getOutputStream(), ExportDataVo.class)
+                .sheet("标签数据")
+                .doWrite(exportDataVos);
+    }
 
-        return ResultDto.success();
+
+    private String getTags(String result) {
+        if(StringUtils.isBlank(result)){
+            return "";
+        }
+        List<Map> results = JSONArray.parseArray(result, Map.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();
+            stringBuilder.append(tagName);
+            if(i < (results.size()-1) ){
+                stringBuilder.append(",");
+            }
+        }
+        return stringBuilder.toString();
     }
 
+
 }

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

@@ -1,20 +0,0 @@
-package cn.com.yusys.yusp.domain.dto;
-
-
-import lombok.Data;
-
-@Data
-public class TagSumDto {
-
-
-    /**
-     * 总打标数
-     */
-    private Integer totalCount;
-
-
-    /**
-     * 总时长
-     */
-    private Integer totalDuration = 0;
-}

+ 25 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/entity/AitagTagLogEntity.java

@@ -132,4 +132,29 @@ passr: true/false
     @ApiModelProperty(value = "标签类别")
     private String categoryCode;
 
+    /**
+     * 合同编号
+     **/
+    @ApiModelProperty(value = "合同编号")
+    private String contractNo;
+
+
+
+    /**
+     * 正则过滤结果
+     **/
+    @ApiModelProperty(value = "正则过滤结果")
+    private String regResult;
+
+    /**
+     * 法人机构
+     **/
+    @ApiModelProperty(value = "法人机构")
+    private String feedbackUserOrg;
+
+    /**
+     * 网点
+     **/
+    @ApiModelProperty(value = "网点")
+    private String feedbackUserEndpoint;
 }

+ 2 - 2
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/vo/DataOverviewVo.java

@@ -38,7 +38,7 @@ public class DataOverviewVo {
 
 
     /**
-     * 评估处理时长
+     * 打标未确认
      */
-    private String avgProcessingDuration;
+    private Integer taggedUnconfirmed;
 }

+ 58 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/domain/vo/ExportDataVo.java

@@ -0,0 +1,58 @@
+package cn.com.yusys.yusp.domain.vo;
+
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ExportDataVo {
+
+
+    /**
+     * 合同编号
+     **/
+    @ExcelProperty(value = "合同编号" ,index = 0)
+    private String contractNo;
+
+
+    /**
+     * 客户经理
+     **/
+    @ExcelProperty(value = "客户经理" ,index = 1)
+    private String feedbackUserNm;
+
+
+    /**
+     * 客户经理
+     **/
+    @ExcelProperty(value = "法人机构" ,index = 2)
+    private String feedbackUserOrg;
+
+
+    /**
+     * 客户经理
+     **/
+    @ExcelProperty(value = "网点" ,index = 3)
+    private String feedbackUserEndpoint;
+
+
+
+    /**
+     * 打标结果,JSON
+     **/
+    @ExcelProperty(value = "智能标签" ,index = 4)
+    private String result;
+
+
+    /**
+     * 发起时间
+     **/
+    @ExcelProperty(value = "标注时间" ,index = 5)
+    private String insertTime;
+
+    public void setInsertTime(LocalDateTime insertTime) {
+        this.insertTime = insertTime.toString();
+    }
+}

+ 1 - 2
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/mapper/AitagTagLogDao.java

@@ -3,7 +3,6 @@ package cn.com.yusys.yusp.mapper;
 import cn.com.yusys.yusp.commons.mybatisplus.mapper.BaseMapper;
 import cn.com.yusys.yusp.domain.vo.IconResVo;
 import cn.com.yusys.yusp.domain.vo.SmartTaggingResultVo;
-import cn.com.yusys.yusp.domain.dto.TagSumDto;
 import cn.com.yusys.yusp.domain.entity.AitagTagLogEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -20,7 +19,7 @@ import java.util.List;
 @Mapper
 public interface AitagTagLogDao extends BaseMapper<AitagTagLogEntity> {
 
-    TagSumDto selectTagCount(SmartTaggingResultVo taggingResult);
+    Integer selectTagCount(SmartTaggingResultVo taggingResult);
 
 
     List<IconResVo> selectTagReportByDay(SmartTaggingResultVo taggingResult);

+ 2 - 0
server/yusp-tagging-core/src/main/java/cn/com/yusys/yusp/service/AitagTagLogService.java

@@ -25,5 +25,7 @@ public interface AitagTagLogService extends IService<AitagTagLogEntity> {
     AitagTagLogEntity show(String id);
 
     List<IconResVo> tagDistStats(TagDistStatsReqVo resultDTO);
+
+    List<AitagTagLogEntity> queryList(TaggingTransactionReqVo transactionReqVo);
 }
 

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

@@ -2,7 +2,6 @@ package cn.com.yusys.yusp.service.impl;
 
 import cn.com.yusys.yusp.commons.exception.BizException;
 import cn.com.yusys.yusp.config.DataDictionary;
-import cn.com.yusys.yusp.domain.dto.TagSumDto;
 import cn.com.yusys.yusp.domain.entity.AitagTagInfoEntity;
 import cn.com.yusys.yusp.domain.vo.*;
 import cn.com.yusys.yusp.mapper.AitagTagDailyAggDao;
@@ -11,17 +10,18 @@ import cn.com.yusys.yusp.mapper.AitagTagLogDao;
 import cn.com.yusys.yusp.domain.entity.AitagTagLogEntity;
 import cn.com.yusys.yusp.service.AitagTagLogService;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.net.URL;
 import java.util.List;
 import java.util.Map;
 
@@ -46,49 +46,42 @@ public class AitagTagLogServiceImpl extends ServiceImpl<AitagTagLogDao, AitagTag
     @Override
     public DataOverviewVo dataOverview(SmartTaggingResultVo taggingResult) {
         DataOverviewVo dataOverview = new DataOverviewVo();
-        TagSumDto tagSumVo = this.baseMapper.selectTagCount(taggingResult);
-        dataOverview.setCountNum(tagSumVo.getTotalCount());
-        if(tagSumVo.getTotalDuration() !=0){
-            BigDecimal result = new BigDecimal(tagSumVo.getTotalDuration())
-                    .divide(new BigDecimal(tagSumVo.getTotalCount()), 10, RoundingMode.HALF_UP);
-            dataOverview.setAvgProcessingDuration(result.toString());
-        }else{
-            dataOverview.setAvgProcessingDuration("0");
-        }
+        Integer totalCnt = this.baseMapper.selectTagCount(taggingResult);
+        dataOverview.setCountNum(totalCnt);
 
         LambdaQueryWrapper<AitagTagLogEntity> queryCount = new LambdaQueryWrapper<>();
-        LambdaQueryWrapper<AitagTagLogEntity> queryAccurateMarks = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<AitagTagLogEntity> queryAgreeTags = new LambdaQueryWrapper<>();
         if (StringUtils.isNotBlank(taggingResult.getCategoryCode())) {
             queryCount.eq(AitagTagLogEntity::getCategoryCode, taggingResult.getCategoryCode());
-            queryAccurateMarks.eq(AitagTagLogEntity::getCategoryCode, taggingResult.getCategoryCode());
+            queryAgreeTags.eq(AitagTagLogEntity::getCategoryCode, taggingResult.getCategoryCode());
         }
         if (StringUtils.isNotBlank(taggingResult.getStartTaggingTime())){
             queryCount.ge(AitagTagLogEntity::getInsertTime, taggingResult.getStartTaggingTime());
-            queryAccurateMarks.ge(AitagTagLogEntity::getInsertTime, taggingResult.getStartTaggingTime());
+            queryAgreeTags.ge(AitagTagLogEntity::getInsertTime, taggingResult.getStartTaggingTime());
         }
         if (StringUtils.isNotBlank(taggingResult.getEndTaggingTime())){
             queryCount.le(AitagTagLogEntity::getInsertTime, taggingResult.getEndTaggingTime());
-            queryAccurateMarks.le(AitagTagLogEntity::getInsertTime, taggingResult.getEndTaggingTime());
+            queryAgreeTags.le(AitagTagLogEntity::getInsertTime, taggingResult.getEndTaggingTime());
         }
         queryCount.in(AitagTagLogEntity::getState, DataDictionary.RESULT_PUSHED,DataDictionary.MANAGER_CONFIRMED);
-        queryAccurateMarks.in(AitagTagLogEntity::getState, DataDictionary.RESULT_PUSHED,DataDictionary.MANAGER_CONFIRMED);
+        queryAgreeTags.in(AitagTagLogEntity::getState, DataDictionary.RESULT_PUSHED,DataDictionary.MANAGER_CONFIRMED);
 
-        Integer countNum = this.baseMapper.selectCount(queryCount);
+        Integer totalConfirmedCnt = this.baseMapper.selectCount(queryCount);
 
-        queryAccurateMarks.eq(AitagTagLogEntity::getFeedback,FEEDBACK_RESULT_AGREE);
-        Integer accurateMarksNum = this.baseMapper.selectCount(queryAccurateMarks);
-        BigDecimal accurateRate = calculateAccuracy(accurateMarksNum, countNum);
+        queryAgreeTags.eq(AitagTagLogEntity::getFeedback,FEEDBACK_RESULT_AGREE);
+        Integer agreeTagNum = this.baseMapper.selectCount(queryAgreeTags);
+        BigDecimal accurateRate = calculateAccuracy(agreeTagNum, totalConfirmedCnt);
 
-        dataOverview.setAccurateNum(countNum);
+        dataOverview.setAccurateNum(totalConfirmedCnt);
         dataOverview.setAccurateRate(accurateRate+"%");
-        if(countNum == 0){
+        if(totalConfirmedCnt == 0){
             dataOverview.setManualAdjustRate("0%");
         }else{
             dataOverview.setManualAdjustRate(BigDecimal.valueOf(100).subtract(accurateRate)
                     .setScale(2, RoundingMode.HALF_UP)+"%");
         }
-        dataOverview.setManualAdjustCount(countNum-accurateMarksNum);
-
+        dataOverview.setManualAdjustCount(totalConfirmedCnt-agreeTagNum);
+        dataOverview.setTaggedUnconfirmed(totalCnt-totalConfirmedCnt);
         return dataOverview;
     }
 
@@ -110,22 +103,22 @@ public class AitagTagLogServiceImpl extends ServiceImpl<AitagTagLogDao, AitagTag
     }
 
     @Override
-    public IPage<AitagTagLogEntity> taggingDetails(TaggingTransactionReqVo aitagTagLogEntity) {
-        LambdaQueryWrapper<AitagTagLogEntity> queryCount = new LambdaQueryWrapper<>();
-        if (StringUtils.isNotBlank(aitagTagLogEntity.getCategoryCode())) {
-            queryCount.eq(AitagTagLogEntity::getCategoryCode, aitagTagLogEntity.getCategoryCode());
+    public IPage<AitagTagLogEntity> taggingDetails(TaggingTransactionReqVo transactionReqVo) {
+        LambdaQueryWrapper<AitagTagLogEntity> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(transactionReqVo.getCategoryCode())) {
+            queryWrapper.eq(AitagTagLogEntity::getCategoryCode, transactionReqVo.getCategoryCode());
         }
-        if (StringUtils.isNotBlank(aitagTagLogEntity.getStartTaggingTime())){
-            queryCount.ge(AitagTagLogEntity::getInsertTime, aitagTagLogEntity.getStartTaggingTime());
+        if (StringUtils.isNotBlank(transactionReqVo.getStartTaggingTime())){
+            queryWrapper.ge(AitagTagLogEntity::getInsertTime, transactionReqVo.getStartTaggingTime());
         }
-        if (StringUtils.isNotBlank(aitagTagLogEntity.getEndTaggingTime())){
-            queryCount.le(AitagTagLogEntity::getInsertTime, aitagTagLogEntity.getEndTaggingTime());
+        if (StringUtils.isNotBlank(transactionReqVo.getEndTaggingTime())){
+            queryWrapper.le(AitagTagLogEntity::getInsertTime, transactionReqVo.getEndTaggingTime());
         }
-        if (StringUtils.isNotBlank(aitagTagLogEntity.getLoanApplicationNo())){
-            queryCount.le(AitagTagLogEntity::getBusinessAttr, aitagTagLogEntity.getLoanApplicationNo());
+        if (StringUtils.isNotBlank(transactionReqVo.getLoanApplicationNo())){
+            queryWrapper.le(AitagTagLogEntity::getBusinessAttr, transactionReqVo.getLoanApplicationNo());
         }
-        return this.baseMapper.selectPage(new Page<>(aitagTagLogEntity.getPage(),
-                aitagTagLogEntity.getSize()),queryCount);
+        return this.baseMapper.selectPage(new Page<>(transactionReqVo.getPage(),
+                transactionReqVo.getSize()),queryWrapper);
     }
 
     @Override
@@ -167,6 +160,25 @@ public class AitagTagLogServiceImpl extends ServiceImpl<AitagTagLogDao, AitagTag
         return aggDao.selectTagDistStats(resultVo);
     }
 
+    @Override
+    public List<AitagTagLogEntity> queryList(TaggingTransactionReqVo transactionReqVo) {
+        LambdaQueryWrapper<AitagTagLogEntity> queryCount = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(transactionReqVo.getCategoryCode())) {
+            queryCount.eq(AitagTagLogEntity::getCategoryCode, transactionReqVo.getCategoryCode());
+        }
+        if (StringUtils.isNotBlank(transactionReqVo.getStartTaggingTime())){
+            queryCount.ge(AitagTagLogEntity::getInsertTime, transactionReqVo.getStartTaggingTime());
+        }
+        if (StringUtils.isNotBlank(transactionReqVo.getEndTaggingTime())){
+            queryCount.le(AitagTagLogEntity::getInsertTime, transactionReqVo.getEndTaggingTime());
+        }
+        if (StringUtils.isNotBlank(transactionReqVo.getLoanApplicationNo())){
+            queryCount.le(AitagTagLogEntity::getBusinessAttr, transactionReqVo.getLoanApplicationNo());
+        }
+        return this.baseMapper.selectList(queryCount);
+    }
+
+
 
     /**
      * 计算准确率

+ 5 - 3
server/yusp-tagging-core/src/main/resources/mapper/AitagTagLogMapper.xml

@@ -18,13 +18,15 @@
         <result column="state" jdbcType="INTEGER" property="state"/>
         <result column="consuming_time" jdbcType="LONGVARCHAR" property="consumingTime"/>
         <result column="category_code" jdbcType="VARCHAR" property="categoryCode"/>
+        <result column="reg_result" jdbcType="VARCHAR" property="regResult"/>
+        <result column="feedback_user_org" jdbcType="VARCHAR" property="feedbackUserOrg"/>
+        <result column="feedback_user_endpoint" jdbcType="VARCHAR" property="feedbackUserEndpoint"/>
     </resultMap>
 
 
-    <select id="selectTagCount" resultType="cn.com.yusys.yusp.domain.dto.TagSumDto" parameterType="cn.com.yusys.yusp.domain.vo.SmartTaggingResultVo">
+    <select id="selectTagCount" parameterType="cn.com.yusys.yusp.domain.vo.SmartTaggingResultVo">
         SELECT
-        COUNT(1) as totalCount,
-        SUM(consuming_time) as totalDuration
+        COUNT(1) as totalCount
         FROM aitag_tag_log
         <where>
             <if test="startTaggingTime != null and startTaggingTime != ''">

+ 7 - 0
server/yusp-tagging-starter/pom.xml

@@ -210,6 +210,13 @@
             <version>5.3.33</version>
         </dependency>
 
+    <!-- EasyExcel 依赖 -->
+    <dependency>
+        <groupId>com.alibaba</groupId>
+        <artifactId>easyexcel</artifactId>
+        <version>3.3.4</version>
+    </dependency>
+
     </dependencies>
 
     <build>

+ 4 - 0
server/yusp-tagging-starter/src/main/java/cn/com/yusys/yusp/detail/App.java

@@ -1,12 +1,15 @@
 package cn.com.yusys.yusp.detail;
 
 
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
+import java.net.URL;
+
 @EnableDiscoveryClient
 @SpringBootApplication(scanBasePackages = {"cn.com.yusys.yusp"})
 @MapperScan("cn.com.yusys.yusp.mapper")
@@ -15,4 +18,5 @@ public class App {
     public static void main(String[] args) {
         SpringApplication.run(App.class, args);
     }
+
 }