Prechádzať zdrojové kódy

智能打标结果相关功能开发

2507040827 5 dní pred
rodič
commit
58476a8a17

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

@@ -0,0 +1,49 @@
+package cn.com.yusys.yusp.config;
+
+
+/**
+ * 数据字典
+ */
+public class DataDictionary {
+
+    /**
+     * 打标执行中
+     */
+    public static final Integer MARKING_EXECUTING = 0;
+
+    /**
+     * 打标完成
+     */
+    public static final Integer MARKING_COMPLETED = 1;
+
+    /**
+     * 客户经理已经确认
+     */
+    public static final Integer MANAGER_CONFIRMED = 2;
+
+    /**
+     * 结果已推送
+     */
+    public static final Integer RESULT_PUSHED = 3;
+
+    /**
+     * 反馈结果  状态值 agree:同意;reject:拒绝
+     */
+    public static final String FEEDBACK_RESULT_AGREE = "agree";
+
+    public static final String FEEDBACK_RESULT_REJECT = "reject";
+
+
+    /**
+     *    统计值
+     *        day:日
+     *        week:周
+     *        month:月
+     */
+    public static final String DAY = "day";
+
+    public static final String WEEK = "week";
+
+    public static final String MONTH = "month";
+
+}

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

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

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

@@ -0,0 +1,44 @@
+package cn.com.yusys.yusp.domain.vo;
+
+
+import lombok.Data;
+
+/**
+ * 准确标签数返回对象
+ */
+
+@Data
+public class DataOverviewVo {
+
+    /**
+     * 总打标数
+     */
+    private Integer countNum;
+
+
+    /**
+     * 准确的标签数
+     */
+    private Integer accurateNum;
+
+    /**
+     * 准确率
+     */
+    private String accurateRate;
+
+    /**
+     * 人工调整数
+     */
+    private Integer manualAdjustCount;
+
+    /**
+     * 调整率
+     */
+    private String manualAdjustRate;
+
+
+    /**
+     * 评估处理时长
+     */
+    private String avgProcessingDuration;
+}

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

@@ -0,0 +1,24 @@
+package cn.com.yusys.yusp.domain.vo;
+
+
+import lombok.Data;
+
+/**
+ * 打标趋势 返回参数
+ */
+
+@Data
+public class IconResVo {
+
+    /**
+     * 字段stat值
+     */
+    private String stat;
+
+    /**
+     * 字段Value值
+     */
+    private String val;
+
+
+}

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

@@ -0,0 +1,32 @@
+package cn.com.yusys.yusp.domain.vo;
+
+
+import cn.com.yusys.yusp.commons.module.adapter.query.PageQuery;
+import lombok.Data;
+
+/**
+ * 智能打标结果
+ * @author zhangkeyu
+ */
+
+@Data
+public class SmartTaggingResultVo extends PageQuery {
+
+
+    /**
+     * 打标开始时间
+     */
+    private String startTaggingTime;
+
+
+    /**
+     * 打标结束时间
+     */
+    private String endTaggingTime;
+
+
+    /**
+     * 标签类别
+     */
+    private String categoryCode;
+}

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

@@ -0,0 +1,10 @@
+package cn.com.yusys.yusp.domain.vo;
+
+
+import lombok.Data;
+
+@Data
+public class TagDistStatsReqVo extends SmartTaggingResultVo {
+
+    private String sort = "desc";
+}

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

@@ -0,0 +1,23 @@
+package cn.com.yusys.yusp.domain.vo;
+
+
+import lombok.Data;
+
+/**
+ * 打标明细请求对象
+ */
+
+@Data
+public class TaggingTransactionReqVo extends SmartTaggingResultVo {
+
+    /**
+     * 贷款申请编号
+     */
+    private String loanApplicationNo;
+
+    /**
+     * 合同编号
+     */
+    private String contractNo;
+
+}

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

@@ -0,0 +1,21 @@
+package cn.com.yusys.yusp.domain.vo;
+
+
+import lombok.Data;
+
+
+/**
+ * 打标趋势 请求参数
+ */
+@Data
+public class TaggingTrendReqVo extends SmartTaggingResultVo {
+
+
+    /**
+     *     统计值
+     *     day:日
+     *     week:周
+     *     month:月
+     */
+    private String statisticalPeriod;
+}

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

@@ -0,0 +1,113 @@
+package cn.com.yusys.yusp.service;
+
+
+import cn.com.yusys.yusp.commons.util.StringUtils;
+import cn.com.yusys.yusp.domain.entity.AitagTagDailyAggEntity;
+import cn.com.yusys.yusp.domain.entity.AitagTagLogEntity;
+import cn.com.yusys.yusp.mapper.AitagTagDailyAggDao;
+import cn.com.yusys.yusp.mapper.AitagTagLogDao;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+import static cn.com.yusys.yusp.config.DataDictionary.FEEDBACK_RESULT_AGREE;
+
+@Component
+@Slf4j
+public class DistributedScheduledTask {
+
+
+    private static final String TASK_LOCK_KEY = "scheduled_task:sync_data";
+
+
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
+
+    @Autowired
+    private AitagTagLogDao aitagTagLogDao;
+
+    @Autowired
+    private AitagTagDailyAggDao aitagTagDailyAggDao;
+
+    /**
+     * 每天凌晨统计昨天打标数据
+     */
+    @Scheduled(cron = "#{@environment.getProperty('application.scheduled.task-cron')}")
+    public void syncDataTask() {
+        log.info("智能标签统计,准备获取redis锁");
+        Boolean taskCron = redisTemplate.opsForValue().setIfAbsent("taskCron", "1", 4, TimeUnit.HOURS);
+        if(Boolean.TRUE.equals(taskCron)){
+            try{
+                log.info("获取redis锁成功,智能标签开始统计");
+                LambdaQueryWrapper<AitagTagDailyAggEntity> queryWrapper = new LambdaQueryWrapper<>();
+                String yesterday = LocalDate.now().minusDays(1).toString();
+                queryWrapper.eq(AitagTagDailyAggEntity::getAggDate,yesterday);
+                int count = aitagTagDailyAggDao.selectCount(queryWrapper);
+                if(count == 0){
+                    executeBusinessLogic(yesterday);
+                }
+                log.info("智能标签统计任务结束");
+            }finally {
+                log.info("删除redis锁信息");
+                redisTemplate.delete("taskCron");
+            }
+        }else{
+            log.warn("智能标签统计任务已有节点执行--本次执行跳过");
+        }
+    }
+
+    private void executeBusinessLogic(String yesterday) {
+        List<AitagTagLogEntity> aitagTagLogEntities = aitagTagLogDao.selectByInsertTime(yesterday);
+        if(aitagTagLogEntities != null){
+            Map<String,Integer> count = new HashMap<>();
+            for (AitagTagLogEntity aitagTagLog:aitagTagLogEntities){
+                String feedback = aitagTagLog.getFeedback();
+                String categoryCode = aitagTagLog.getCategoryCode();
+                if(FEEDBACK_RESULT_AGREE.equals(feedback)){
+                    String result = aitagTagLog.getResult();
+                    duCount(result, count,categoryCode);
+                }else{
+                    String result = aitagTagLog.getFeedbackResult();
+                    duCount(result, count,categoryCode);
+                }
+            }
+            AitagTagDailyAggEntity aitagTagLog = new AitagTagDailyAggEntity();
+            for (String key : count.keySet()){
+                aitagTagLog.setId(StringUtils.getUUID());
+                aitagTagLog.setAggDate(yesterday);
+                aitagTagLog.setTagCount(count.get(key));
+                String[] split = key.split(":");
+                aitagTagLog.setTagNm(split[0]);
+                aitagTagLog.setCategoryCode(split[1]);
+                aitagTagDailyAggDao.insert(aitagTagLog);
+            }
+
+        }
+    }
+
+    private static void duCount(String result, Map<String, Integer> count,String categoryCode) {
+        JSONObject resultMap = JSONObject.parseObject(result);
+        String labe = resultMap.getString("labe")+":"+categoryCode;
+        if(count.containsKey(labe)){
+            Integer integer = count.get(labe);
+            count.put(labe,integer+1);
+        }else{
+            count.put(labe,1);
+        }
+    }
+
+
+}

+ 2 - 1
server/yusp-tagging-core/src/main/resources/messages/yusp_input_msg.properties

@@ -96,4 +96,5 @@ ONLY_APPLY_TO_AUDITING_TASKS=\u53EA\u80FD\u7533\u8BF7\u89E3\u9501\u5BA1\u6838\u4
 REQUEST_PARAMETER_CANNOT_BE_EMPTY=\u8BF7\u6C42\u53C2\u6570\u4E0D\u80FD\u4E3A\u7A7A
 EXTENSION_FIELD_CANNOT_BE_EMPTY=\u6269\u5C55\u5B57\u6BB5\u4E0D\u80FD\u4E3A\u7A7A
 SUPPLEMENTAL_TABLE_CONFIG_NOT_EXIST=\u8865\u5F55\u8868\u914D\u7F6E\u4E0D\u5B58\u5728,\u8BF7\u786E\u8BA4\u540E\u518D\u64CD\u4F5C
-DATA_SOURCE_INFO_NOT_EXIST=\u5F53\u524D\u8868\u6570\u636E\u6E90\u4FE1\u606F\u4E0D\u5B58\u5728
+DATA_SOURCE_INFO_NOT_EXIST=\u5F53\u524D\u8868\u6570\u636E\u6E90\u4FE1\u606F\u4E0D\u5B58\u5728
+NO_DATA_PERIOD=\u8BE5\u7EDF\u8BA1\u5468\u671F\u6682\u672A\u5B9E\u73B0

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

@@ -5,10 +5,12 @@ 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;
 
 @EnableDiscoveryClient
 @SpringBootApplication(scanBasePackages = {"cn.com.yusys.yusp"})
 @MapperScan("cn.com.yusys.yusp.mapper")
+@EnableScheduling
 public class App {
     public static void main(String[] args) {
         SpringApplication.run(App.class, args);

+ 3 - 0
server/yusp-tagging-starter/src/main/resources/application.yml

@@ -54,3 +54,6 @@ management:
       exposure:
         include: info,health,env,configprops,mappings,threaddump,metrics #管理节点
 
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 控制台输出