Browse Source

fix: 优化风险人员库查询

main
wxc 1 year ago
parent
commit
56abf6f65c
  1. 5
      sql/241210.sql
  2. 57
      src/main/java/com/biutag/supervision/controller/sensitivePerception/RiskPersonalController.java
  3. 45
      src/main/java/com/biutag/supervision/controller/work/NegativeController.java
  4. 8
      src/main/java/com/biutag/supervision/mapper/RiskModelTaskClueMapper.java
  5. 3
      src/main/java/com/biutag/supervision/pojo/domain/RiskPersonalDetail.java
  6. 3
      src/main/java/com/biutag/supervision/pojo/dto/ModelDto.java
  7. 3
      src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java
  8. 19
      src/main/java/com/biutag/supervision/pojo/entity/Model.java
  9. 5
      src/main/java/com/biutag/supervision/pojo/entity/RiskModelTaskClue.java
  10. 15
      src/main/java/com/biutag/supervision/pojo/param/RiskPersonalQueryParam.java
  11. 31
      src/main/java/com/biutag/supervision/pojo/vo/RiskModelTaskClueVo.java
  12. 2
      src/main/java/com/biutag/supervision/pojo/vo/RiskScoreRuleTree.java
  13. 2
      src/main/java/com/biutag/supervision/pojo/vo/RiskTree.java
  14. 21
      src/main/resources/mapper/RiskModelTaskClueMapper.xml

5
sql/241210.sql

@ -0,0 +1,5 @@
ALTER TABLE `negative`.`model`
ADD COLUMN `model_type` varchar(255) NULL COMMENT '模型类型',
ADD COLUMN `handle_depart_type` varchar(255) NULL COMMENT '通知单位' AFTER `model_type`,
ADD COLUMN `request_reply` tinyint NULL DEFAULT 1 COMMENT '是否要求回复' AFTER `model_type`,
ADD COLUMN `reply_limit` int NULL COMMENT '通知回复时限' AFTER `request_reply`;

57
src/main/java/com/biutag/supervision/controller/sensitivePerception/RiskPersonalController.java

@ -1,16 +1,23 @@
package com.biutag.supervision.controller.sensitivePerception;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.biutag.supervision.constants.AppConstants;
import com.biutag.supervision.mapper.RiskModelTaskClueMapper;
import com.biutag.supervision.pojo.Result;
import com.biutag.supervision.pojo.domain.RiskPersonalDetail;
import com.biutag.supervision.pojo.entity.*;
import com.biutag.supervision.pojo.param.RiskPersonalQueryParam;
import com.biutag.supervision.pojo.vo.RiskModelTaskClueVo;
import com.biutag.supervision.pojo.vo.RiskPersonalVo;
import com.biutag.supervision.service.*;
import com.biutag.supervision.service.ModelService;
import com.biutag.supervision.service.RiskPersonalService;
import com.biutag.supervision.service.RiskPersonalTagService;
import com.biutag.supervision.service.RiskScoreRuleService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
@ -37,12 +44,12 @@ public class RiskPersonalController {
private final RiskScoreRuleService riskScoreRuleService;
private final RiskModelTaskClueService riskModelTaskClueService;
private final ModelService modelService;
private final RiskPersonalTagService riskPersonalTagService;
private final RiskModelTaskClueMapper riskModelTaskClueMapper;
@GetMapping
public Result<Page<RiskPersonalVo>> list(RiskPersonalQueryParam param) {
LambdaQueryWrapper<RiskPersonal> queryWrapper = new LambdaQueryWrapper<>();
@ -52,22 +59,37 @@ public class RiskPersonalController {
.like(StrUtil.isNotBlank(param.getMobileNumber()), RiskPersonal::getMobileNumber, param.getMobileNumber())
.like(StrUtil.isNotBlank(param.getIdCode()), RiskPersonal::getIdCode, param.getIdCode())
.eq(Objects.nonNull(param.getAge()), RiskPersonal::getAge, param.getAge())
.like(StrUtil.isNotBlank(param.getTags()), RiskPersonal::getTags, param.getTags());
if (StrUtil.isNotBlank(param.getTags())) {
LambdaQueryWrapper<RiskPersonalTag> qw = new LambdaQueryWrapper<RiskPersonalTag>()
.like(RiskPersonalTag::getSmallTag, param.getTags());
List<RiskPersonalTag> personalTags = riskPersonalTagService.list(qw);
if (personalTags.isEmpty()) {
.and(CollectionUtil.isNotEmpty(param.getTags()), (query) -> {
for (int i = 0; i < param.getTags().size(); i++) {
query.like(RiskPersonal::getTags, param.getTags().get(i)).or(i != param.getTags().size() - 1);
}
});
if (CollectionUtil.isNotEmpty(param.getSmallTags()) || CollectionUtil.isNotEmpty(param.getEducationTags()) || CollectionUtil.isNotEmpty(param.getAgeTags())) {
LambdaQueryWrapper<RiskPersonalTag> tagQueryWrapper = new LambdaQueryWrapper<>();
tagQueryWrapper.and(CollectionUtil.isNotEmpty(param.getSmallTags()), (query) -> {
for (int i = 0; i < param.getSmallTags().size(); i++) {
query.like(RiskPersonalTag::getSmallTag, param.getSmallTags().get(i)).or(i != param.getSmallTags().size() - 1);
}
}).and(CollectionUtil.isNotEmpty(param.getAgeTags()), (query) -> {
for (int i = 0; i < param.getAgeTags().size(); i++) {
query.like(RiskPersonalTag::getSmallTag, param.getAgeTags().get(i)).or(i != param.getAgeTags().size() - 1);
}
}).and(CollectionUtil.isNotEmpty(param.getEducationTags()), (query) -> {
for (int i = 0; i < param.getEducationTags().size(); i++) {
query.like(RiskPersonalTag::getSmallTag, param.getEducationTags().get(i)).or(i != param.getEducationTags().size() - 1);
}
});
List<RiskPersonalTag> list = riskPersonalTagService.list(tagQueryWrapper);
if (list.isEmpty()) {
return Result.success(new Page<RiskPersonalVo>().setTotal(0).setRecords(new ArrayList<>()));
}
queryWrapper.in(RiskPersonal::getIdCode, personalTags.stream().map(RiskPersonalTag::getIdCode).collect(Collectors.toSet()));
queryWrapper.in(RiskPersonal::getIdCode, list.stream().map(RiskPersonalTag::getIdCode).collect(Collectors.toSet()));
}
queryWrapper.orderByDesc(RiskPersonal::getRiskScore).orderByDesc(RiskPersonal::getCreateTime);
Page<RiskPersonal> page = riskPersonalService.page(Page.of(param.getCurrent(), param.getSize()), queryWrapper);
if (page.getRecords().isEmpty()) {
return Result.success(new Page<RiskPersonalVo>().setTotal(0).setRecords(new ArrayList<>()));
}
List<RiskPersonalTag> tags = riskPersonalTagService.list(new LambdaQueryWrapper<RiskPersonalTag>()
.in(RiskPersonalTag::getIdCode, page.getRecords().stream().map(RiskPersonal::getIdCode).toList()));
List<RiskPersonalVo> list = page.getRecords().stream().map(item -> {
@ -97,13 +119,12 @@ public class RiskPersonalController {
return riskRule;
}
List<Model> models = modelService.list(new LambdaQueryWrapper<Model>().in(Model::getRiskScoreRuleId, rules2.stream().map(RiskScoreRule::getId).toList()));
List<RiskModelTaskClue> records = models.isEmpty() ? new ArrayList<>() : riskModelTaskClueService.page(Page.of(1, 100), new LambdaQueryWrapper<RiskModelTaskClue>()
.eq(RiskModelTaskClue::getIdCode, riskPersonal.getIdCode())
.in(RiskModelTaskClue::getModelId, models.stream().map(Model::getId).toList())
.eq(RiskModelTaskClue::getDel, AppConstants.UN_DEL)
.orderByDesc(RiskModelTaskClue::getScore)
.orderByAsc(RiskModelTaskClue::getCreateTime)).getRecords();
QueryWrapper<RiskModelTaskClue> queryWrapper = new QueryWrapper<RiskModelTaskClue>()
.eq("mc.id_code", riskPersonal.getIdCode())
.in("mc.model_id", models.stream().map(Model::getId).toList())
.orderByAsc("r.sort_id")
.orderByDesc("mc.score_result");
List<RiskModelTaskClueVo> records = models.isEmpty() ? new ArrayList<>() : riskModelTaskClueMapper.queryPage(Page.of(1, 100), queryWrapper).getRecords();
riskRule.setClues(records);
return riskRule;
}).toList();

45
src/main/java/com/biutag/supervision/controller/work/NegativeController.java

@ -9,10 +9,7 @@ import com.biutag.supervision.common.UserContextHolder;
import com.biutag.supervision.common.validation.AddGroup;
import com.biutag.supervision.common.validation.EditGroup;
import com.biutag.supervision.constants.AppConstants;
import com.biutag.supervision.constants.enums.FlowNodeEnum;
import com.biutag.supervision.constants.enums.ProcessingStatusEnum;
import com.biutag.supervision.constants.enums.RoleCodeEnum;
import com.biutag.supervision.constants.enums.WorkStatusEnum;
import com.biutag.supervision.constants.enums.*;
import com.biutag.supervision.flow.FlowService;
import com.biutag.supervision.pojo.Result;
import com.biutag.supervision.pojo.domain.NegativeDetail;
@ -68,11 +65,7 @@ public class NegativeController {
@PostMapping
public Result<Boolean> add(@Validated(AddGroup.class) @RequestBody NegativeDto negativeDto) {
if (negativeDto.getFlowFlag()) {
negativeService.save(negativeDto);
} else {
negativeService.saveNegative(negativeDto);
}
negativeService.save(negativeDto);
return Result.success();
}
@ -125,17 +118,41 @@ public class NegativeController {
@PostMapping("{id}/transferTodo")
@Transactional(rollbackFor = Exception.class)
public Result<Boolean> transferTodo(@PathVariable String id) {
negativeService.update(new LambdaUpdateWrapper<Negative>().eq(Negative::getId, id).set(Negative::getProcessingStatus, ProcessingStatusEnum.approval.name())
.set(Negative::getFlowKey, FlowNodeEnum.FIRST_APPROVE.getKey()).set(Negative::getUpdTime, LocalDateTime.now()));
Negative negative = negativeService.getById(id);
if (StrUtil.isBlank(negative.getApprovalFlow())) {
throw new RuntimeException("该数据为历史数据,目前不支持转为待办。如需转待办,请联系系统管理员");
}
UserAuth user = UserContextHolder.getCurrentUser();
if (ApprovalFlowEnum.SECOND_APPROVAL.getValue().equals(negative.getApprovalFlow())) {
if (user.getRoleCodes().contains(RoleCodeEnum.SECOND_ADMIN.getCode())) {
throw new RuntimeException("该问题的审批流程为二级审批,请使用二级机构专班操作");
}
}
String flowKey = FlowNodeEnum.FIRST_APPROVE.getKey();
String roleCode = RoleCodeEnum.FIRST_ADMIN.getCode();
String departId = AppConstants.ROOT_DEPART_ID;
String departName = AppConstants.ROOT_DEPART_NAME;
if (ApprovalFlowEnum.SECOND_APPROVAL.getValue().equals(negative.getApprovalFlow())) {
flowKey = FlowNodeEnum.SECOND_APPROVE.getKey();
roleCode = RoleCodeEnum.SECOND_ADMIN.getCode();
departId = negative.getHandleSecondDepartId();
departName = negative.getHandleSecondDepartName();
}
negativeService.update(new LambdaUpdateWrapper<Negative>().eq(Negative::getId, id)
.set(Negative::getProcessingStatus, ProcessingStatusEnum.approval.name())
.set(Negative::getFlowKey, flowKey)
.set(Negative::getUpdTime, LocalDateTime.now()));
negativeWorkService.update(new LambdaUpdateWrapper<NegativeWork>().eq(NegativeWork::getNegativeId, id)
.eq(NegativeWork::getRoleCode, RoleCodeEnum.FIRST_ADMIN.getCode())
.eq(NegativeWork::getRoleCode, roleCode)
.eq(NegativeWork::getDepartId, departId)
.set(NegativeWork::getStatus, WorkStatusEnum.todo.name())
.set(NegativeWork::getUpdateTime, LocalDateTime.now()));
UserAuth user = UserContextHolder.getCurrentUser();
NegativeHistory history = new NegativeHistory().setHistoryId(IdUtil.fastSimpleUUID())
.setNegativeId(id)
.setActionName("转为待办")
.setDepartName(AppConstants.ROOT_DEPART_NAME)
.setDepartName(departName)
.setCrtUser(user.getUserId())
.setCrtUserName(user.getUserName())
.setCrtName(user.getNickName())

8
src/main/java/com/biutag/supervision/mapper/RiskModelTaskClueMapper.java

@ -1,8 +1,16 @@
package com.biutag.supervision.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.biutag.supervision.pojo.entity.RiskModelTaskClue;
import com.biutag.supervision.pojo.model.NegativeWorkModel;
import com.biutag.supervision.pojo.vo.RiskModelTaskClueVo;
import org.apache.ibatis.annotations.Param;
public interface RiskModelTaskClueMapper extends BaseMapper<RiskModelTaskClue> {
Page<RiskModelTaskClueVo> queryPage(@Param("page") Page<RiskModelTaskClue> page, @Param(Constants.WRAPPER) QueryWrapper<RiskModelTaskClue> queryWrapper);
}

3
src/main/java/com/biutag/supervision/pojo/domain/RiskPersonalDetail.java

@ -2,6 +2,7 @@ package com.biutag.supervision.pojo.domain;
import com.biutag.supervision.pojo.entity.RiskModelTaskClue;
import com.biutag.supervision.pojo.entity.RiskPersonal;
import com.biutag.supervision.pojo.vo.RiskModelTaskClueVo;
import lombok.Getter;
import lombok.Setter;
@ -25,7 +26,7 @@ public class RiskPersonalDetail {
public static class RiskRule {
private String riskName;
private Double score;
private List<RiskModelTaskClue> clues = new ArrayList<>();
private List<RiskModelTaskClueVo> clues = new ArrayList<>();
}
}

3
src/main/java/com/biutag/supervision/pojo/dto/ModelDto.java

@ -78,6 +78,9 @@ public class ModelDto {
// 警种
private String policeType;
// 模型类型
private String modelType;
private List<String> involveProblem = new ArrayList<>();
// 问题类型

3
src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java

@ -107,7 +107,4 @@ public class NegativeDto {
// 通报期数
private String reportNumber;
// 是否开启流程
private Boolean flowFlag;
}

19
src/main/java/com/biutag/supervision/pojo/entity/Model.java

@ -3,14 +3,11 @@ package com.biutag.supervision.pojo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.biutag.supervision.pojo.dto.flow.VerifyData;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Setter
@Getter
@ -30,7 +27,8 @@ public class Model {
@TableField("icon")
private String icon;
//
private String iconColor;
@TableField("remarks")
private String remarks;
@ -97,8 +95,8 @@ public class Model {
private Integer riskScoreRuleId;
// 预警问题处置
private String warningHandling;
// 通知单位
private String handleDepartType;
private String handleDepartId;
@ -110,6 +108,13 @@ public class Model {
private String involveProblem;
private String iconColor;
// 模型类型
private String modelType;
// 是否要求回复
private Boolean requestReply;
// 通知回复时限
private Integer replyLimit;
}

5
src/main/java/com/biutag/supervision/pojo/entity/RiskModelTaskClue.java

@ -3,6 +3,8 @@ package com.biutag.supervision.pojo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.biutag.supervision.constants.AppConstants;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
@ -65,6 +67,8 @@ public class RiskModelTaskClue {
@TableField("score")
private Double score;
private Double scoreResult;
// 发生时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("event_time")
@ -80,6 +84,7 @@ public class RiskModelTaskClue {
// 逻辑删除键0-未删1已删
@TableField("del")
@TableLogic(value = AppConstants.UN_DEL, delval = AppConstants.DEL)
private Boolean del;
}

15
src/main/java/com/biutag/supervision/pojo/param/RiskPersonalQueryParam.java

@ -3,6 +3,9 @@ package com.biutag.supervision.pojo.param;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
/**
* @author wxc
* @date 2024/11/12
@ -20,8 +23,16 @@ public class RiskPersonalQueryParam extends BasePage {
private String idCode;
private String tags;
// 人员
private List<String> tags = new ArrayList<>();
// 学历
private List<String> educationTags = new ArrayList<>();
// 年龄
private List<String> ageTags = new ArrayList<>();
private String smallTags;
// 高风险因素
private List<String> smallTags = new ArrayList<>();
}

31
src/main/java/com/biutag/supervision/pojo/vo/RiskModelTaskClueVo.java

@ -0,0 +1,31 @@
package com.biutag.supervision.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
/**
* @author wxc
* @date 2024/12/11
*/
@Setter
@Getter
public class RiskModelTaskClueVo {
// 风险因素
private String riskName;
// 数据详情 JSON
private String data;
// 分数
private Double score;
private Double scoreResult;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime eventTime;
}

2
src/main/java/com/biutag/supervision/pojo/vo/RiskScoreRuleTree.java

@ -41,5 +41,7 @@ public class RiskScoreRuleTree {
private Integer sortId;
private Integer level;
private List<RiskScoreRuleTree> children = new ArrayList<>();
}

2
src/main/java/com/biutag/supervision/pojo/vo/RiskTree.java

@ -23,6 +23,8 @@ public class RiskTree {
private Integer size;
private Integer level;
private List<RiskTree> children = new ArrayList<>();
public static RiskTree of(Model model) {

21
src/main/resources/mapper/RiskModelTaskClueMapper.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.biutag.supervision.mapper.RiskModelTaskClueMapper">
<select id="queryPage" resultType="com.biutag.supervision.pojo.vo.RiskModelTaskClueVo">
SELECT
r.risk_name,
mc.score,
mc.score_result,
mc.DATA,
mc.event_time
FROM
risk_model_task_clue mc
LEFT JOIN model m ON mc.model_id = m.id
LEFT JOIN risk_score_rule r ON m.risk_score_rule_id = r.id
${ew.getCustomSqlSegment}
</select>
</mapper>
Loading…
Cancel
Save