Browse Source

fix: 优化风险人员库查询

main
wxc 1 year ago
parent
commit
5780b30f16
  1. 85
      src/main/java/com/biutag/supervision/controller/sensitivePerception/RiskPersonalController.java
  2. 8
      src/main/java/com/biutag/supervision/mapper/RiskPersonInfoMapper.java
  3. 6
      src/main/java/com/biutag/supervision/mapper/RiskPersonalMapper.java
  4. 3
      src/main/java/com/biutag/supervision/pojo/domain/RiskPersonalDetail.java
  5. 23
      src/main/java/com/biutag/supervision/pojo/entity/RiskPersonInfo.java
  6. 3
      src/main/java/com/biutag/supervision/pojo/entity/RiskPersonalTag.java
  7. 8
      src/main/java/com/biutag/supervision/pojo/param/RiskPersonalQueryParam.java
  8. 34
      src/main/java/com/biutag/supervision/pojo/vo/RiskPersonalVo.java
  9. 11
      src/main/java/com/biutag/supervision/service/RiskPersonInfoService.java
  10. 55
      src/main/resources/mapper/RiskPersonalMapper.xml
  11. 2
      src/test/java/com/biutag/supervision/tools/GenCodeTests.java

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

@ -1,23 +1,19 @@
package com.biutag.supervision.controller.sensitivePerception; package com.biutag.supervision.controller.sensitivePerception;
import cn.hutool.core.bean.BeanUtil; 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.biutag.supervision.constants.AppConstants; import com.biutag.supervision.constants.AppConstants;
import com.biutag.supervision.mapper.RiskModelTaskClueMapper; import com.biutag.supervision.mapper.RiskModelTaskClueMapper;
import com.biutag.supervision.mapper.RiskPersonalMapper;
import com.biutag.supervision.pojo.Result; import com.biutag.supervision.pojo.Result;
import com.biutag.supervision.pojo.domain.RiskPersonalDetail; import com.biutag.supervision.pojo.domain.RiskPersonalDetail;
import com.biutag.supervision.pojo.entity.*; import com.biutag.supervision.pojo.entity.*;
import com.biutag.supervision.pojo.param.RiskPersonalQueryParam; import com.biutag.supervision.pojo.param.RiskPersonalQueryParam;
import com.biutag.supervision.pojo.vo.RiskModelTaskClueVo; import com.biutag.supervision.pojo.vo.RiskModelTaskClueVo;
import com.biutag.supervision.pojo.vo.RiskPersonalVo; import com.biutag.supervision.pojo.vo.RiskPersonalVo;
import com.biutag.supervision.service.ModelService; import com.biutag.supervision.service.*;
import com.biutag.supervision.service.RiskPersonalService;
import com.biutag.supervision.service.RiskPersonalTagService;
import com.biutag.supervision.service.RiskScoreRuleService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -27,7 +23,6 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -42,63 +37,32 @@ public class RiskPersonalController {
private final RiskPersonalService riskPersonalService; private final RiskPersonalService riskPersonalService;
private final RiskPersonalMapper riskPersonalMapper;
private final RiskPersonalTagService riskPersonalTagService;
private final RiskScoreRuleService riskScoreRuleService; private final RiskScoreRuleService riskScoreRuleService;
private final ModelService modelService; private final ModelService modelService;
private final RiskPersonalTagService riskPersonalTagService;
private final RiskModelTaskClueMapper riskModelTaskClueMapper; private final RiskModelTaskClueMapper riskModelTaskClueMapper;
private final RiskPersonInfoService riskPersonInfoService;
@GetMapping @GetMapping
public Result<Page<RiskPersonalVo>> list(RiskPersonalQueryParam param) { public Result<Page<RiskPersonalVo>> list(RiskPersonalQueryParam param) {
LambdaQueryWrapper<RiskPersonal> queryWrapper = new LambdaQueryWrapper<>(); Page<RiskPersonalVo> page = riskPersonalMapper.queryPage(Page.of(param.getCurrent(), param.getSize()), param);
queryWrapper List<RiskPersonalVo> records = page.getRecords();
.eq(RiskPersonal::getDel, AppConstants.UN_DEL) if (records.isEmpty()) {
.like(StrUtil.isNotBlank(param.getName()), RiskPersonal::getName, param.getName()) return Result.success(page);
.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())
.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, 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>() List<String> idCodes = records.stream().map(RiskPersonalVo::getIdCode).toList();
.in(RiskPersonalTag::getIdCode, page.getRecords().stream().map(RiskPersonal::getIdCode).toList())); List<RiskPersonalTag> smallTags = riskPersonalTagService.list(new LambdaQueryWrapper<RiskPersonalTag>().in(RiskPersonalTag::getIdCode, idCodes));
List<RiskPersonalVo> list = page.getRecords().stream().map(item -> { records.forEach(item -> {
RiskPersonalVo riskPersonalVo = new RiskPersonalVo(); item.setSmallTags(smallTags.stream().filter(smallTag -> smallTag.getIdCode().equals(item.getIdCode())).map(RiskPersonalTag::getSmallTag).collect(Collectors.joining(",")));
BeanUtil.copyProperties(item, riskPersonalVo); });
riskPersonalVo.setSmallTags(tags.stream().filter(j -> item.getIdCode().equals(j.getIdCode())).map(RiskPersonalTag::getSmallTag).collect(Collectors.toSet())); return Result.success(page);
return riskPersonalVo;
}).toList();
return Result.success(new Page<RiskPersonalVo>().setTotal(page.getTotal()).setRecords(list));
} }
/** /**
@ -109,7 +73,15 @@ public class RiskPersonalController {
@GetMapping("{id}") @GetMapping("{id}")
public Result<RiskPersonalDetail> get(@PathVariable Integer id) { public Result<RiskPersonalDetail> get(@PathVariable Integer id) {
List<RiskScoreRule> rules1 = riskScoreRuleService.list(new LambdaQueryWrapper<RiskScoreRule>().eq(RiskScoreRule::getLevel, 1)); List<RiskScoreRule> rules1 = riskScoreRuleService.list(new LambdaQueryWrapper<RiskScoreRule>().eq(RiskScoreRule::getLevel, 1));
RiskPersonal riskPersonal = riskPersonalService.getById(id); RiskPersonal riskPersonal = riskPersonalService.getById(id);
RiskPersonalVo vo = new RiskPersonalVo();
BeanUtil.copyProperties(riskPersonal, vo);
RiskPersonInfo info = riskPersonInfoService.getById(riskPersonal.getIdCode());
if (info != null) {
vo.setAvatar(info.getImageBase64());
}
List<RiskPersonalDetail.RiskRule> list = rules1.stream().map(rule -> { List<RiskPersonalDetail.RiskRule> list = rules1.stream().map(rule -> {
RiskPersonalDetail.RiskRule riskRule = new RiskPersonalDetail.RiskRule(); RiskPersonalDetail.RiskRule riskRule = new RiskPersonalDetail.RiskRule();
riskRule.setRiskName(rule.getRiskName()); riskRule.setRiskName(rule.getRiskName());
@ -122,6 +94,7 @@ public class RiskPersonalController {
QueryWrapper<RiskModelTaskClue> queryWrapper = new QueryWrapper<RiskModelTaskClue>() QueryWrapper<RiskModelTaskClue> queryWrapper = new QueryWrapper<RiskModelTaskClue>()
.eq("mc.id_code", riskPersonal.getIdCode()) .eq("mc.id_code", riskPersonal.getIdCode())
.in("mc.model_id", models.stream().map(Model::getId).toList()) .in("mc.model_id", models.stream().map(Model::getId).toList())
.eq("mc.del", AppConstants.UN_DEL)
.orderByAsc("r.sort_id") .orderByAsc("r.sort_id")
.orderByDesc("mc.score_result"); .orderByDesc("mc.score_result");
List<RiskModelTaskClueVo> records = models.isEmpty() ? new ArrayList<>() : riskModelTaskClueMapper.queryPage(Page.of(1, 100), queryWrapper).getRecords(); List<RiskModelTaskClueVo> records = models.isEmpty() ? new ArrayList<>() : riskModelTaskClueMapper.queryPage(Page.of(1, 100), queryWrapper).getRecords();
@ -129,7 +102,7 @@ public class RiskPersonalController {
return riskRule; return riskRule;
}).toList(); }).toList();
RiskPersonalDetail riskPersonalDetail = new RiskPersonalDetail(); RiskPersonalDetail riskPersonalDetail = new RiskPersonalDetail();
riskPersonalDetail.setRiskPersonal(riskPersonal); riskPersonalDetail.setRiskPersonal(vo);
riskPersonalDetail.setRiskClueList(list); riskPersonalDetail.setRiskClueList(list);
return Result.success(riskPersonalDetail); return Result.success(riskPersonalDetail);
} }

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

@ -0,0 +1,8 @@
package com.biutag.supervision.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.supervision.pojo.entity.RiskPersonInfo;
public interface RiskPersonInfoMapper extends BaseMapper<RiskPersonInfo> {
}

6
src/main/java/com/biutag/supervision/mapper/RiskPersonalMapper.java

@ -1,8 +1,14 @@
package com.biutag.supervision.mapper; package com.biutag.supervision.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.biutag.supervision.pojo.entity.RiskPersonal; import com.biutag.supervision.pojo.entity.RiskPersonal;
import com.biutag.supervision.pojo.param.RiskPersonalQueryParam;
import com.biutag.supervision.pojo.vo.RiskPersonalVo;
import org.apache.ibatis.annotations.Param;
public interface RiskPersonalMapper extends BaseMapper<RiskPersonal> { public interface RiskPersonalMapper extends BaseMapper<RiskPersonal> {
Page<RiskPersonalVo> queryPage(@Param("page") Page<RiskPersonal> page, @Param("param") RiskPersonalQueryParam param);
} }

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

@ -3,6 +3,7 @@ package com.biutag.supervision.pojo.domain;
import com.biutag.supervision.pojo.entity.RiskModelTaskClue; import com.biutag.supervision.pojo.entity.RiskModelTaskClue;
import com.biutag.supervision.pojo.entity.RiskPersonal; import com.biutag.supervision.pojo.entity.RiskPersonal;
import com.biutag.supervision.pojo.vo.RiskModelTaskClueVo; import com.biutag.supervision.pojo.vo.RiskModelTaskClueVo;
import com.biutag.supervision.pojo.vo.RiskPersonalVo;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@ -17,7 +18,7 @@ import java.util.List;
@Getter @Getter
public class RiskPersonalDetail { public class RiskPersonalDetail {
private RiskPersonal riskPersonal; private RiskPersonalVo riskPersonal;
private List<RiskRule> riskClueList = new ArrayList<>(); private List<RiskRule> riskClueList = new ArrayList<>();

23
src/main/java/com/biutag/supervision/pojo/entity/RiskPersonInfo.java

@ -0,0 +1,23 @@
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 lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Setter
@Getter
public class RiskPersonInfo {
// 身份证
@TableId(value = "id_code")
private String idCode;
// 证照
@TableField("image_base64")
private String imageBase64;
}

3
src/main/java/com/biutag/supervision/pojo/entity/RiskPersonalTag.java

@ -3,6 +3,8 @@ package com.biutag.supervision.pojo.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.biutag.supervision.constants.AppConstants;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@ -42,6 +44,7 @@ public class RiskPersonalTag {
// 逻辑删除键0-未删1已删 // 逻辑删除键0-未删1已删
@TableField("del") @TableField("del")
@TableLogic(value = AppConstants.UN_DEL, delval = AppConstants.DEL)
private Boolean del; private Boolean del;
} }

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

@ -15,8 +15,6 @@ import java.util.List;
public class RiskPersonalQueryParam extends BasePage { public class RiskPersonalQueryParam extends BasePage {
private String name; private String name;
// 年龄
private Integer age;
// 手机号 // 手机号
private String mobileNumber; private String mobileNumber;
@ -26,13 +24,13 @@ public class RiskPersonalQueryParam extends BasePage {
// 人员 // 人员
private List<String> tags = new ArrayList<>(); private List<String> tags = new ArrayList<>();
// 高风险因素
private List<String> smallTags = new ArrayList<>();
// 学历 // 学历
private List<String> educationTags = new ArrayList<>(); private List<String> educationTags = new ArrayList<>();
// 年龄 // 年龄
private List<String> ageTags = new ArrayList<>(); private List<String> ageTags = new ArrayList<>();
// 高风险因素
private List<String> smallTags = new ArrayList<>();
} }

34
src/main/java/com/biutag/supervision/pojo/vo/RiskPersonalVo.java

@ -1,75 +1,45 @@
package com.biutag.supervision.pojo.vo; package com.biutag.supervision.pojo.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;
@Setter @Setter
@Getter @Getter
public class RiskPersonalVo { public class RiskPersonalVo {
// 主键 // 主键
@TableId(value = "id", type = IdType.AUTO)
private Integer id; private Integer id;
// 姓名 // 姓名
@TableField("name")
private String name; private String name;
// 性别男1女2 // 性别男1女2
@TableField("gender")
private String gender; private String gender;
// 年龄 // 年龄
@TableField("age")
private Integer age; private Integer age;
// 大标签预览 // 大标签预览
@TableField("tags")
private String tags; private String tags;
// 证件号码 // 证件号码
@TableField("id_code")
private String idCode; private String idCode;
// 手机号 // 手机号
@TableField("mobile_number")
private String mobileNumber; private String mobileNumber;
// 风险指数 // 风险指数
@TableField("risk_score")
private Double riskScore; private Double riskScore;
// 管控部门编号 // 管控部门编号
@TableField("control_depart_id")
private String controlDepartId; private String controlDepartId;
// 管控部门名称 // 管控部门名称
@TableField("control_depart_name")
private String controlDepartName; private String controlDepartName;
// 管控时间
@TableField("control_time")
private LocalDateTime controlTime;
// 创建时间
@TableField("create_time")
private LocalDateTime createTime;
// 异常信息
@TableField("error_msg")
private String errorMsg;
// 逻辑删除键0-未删1已删 private String smallTags;
@TableField("del")
private Boolean del;
private Set<String> smallTags = new HashSet<>(); private String avatar;
} }

11
src/main/java/com/biutag/supervision/service/RiskPersonInfoService.java

@ -0,0 +1,11 @@
package com.biutag.supervision.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.supervision.pojo.entity.RiskPersonInfo;
import com.biutag.supervision.mapper.RiskPersonInfoMapper;
import org.springframework.stereotype.Service;
@Service
public class RiskPersonInfoService extends ServiceImpl<RiskPersonInfoMapper, RiskPersonInfo> {
}

55
src/main/resources/mapper/RiskPersonalMapper.xml

@ -0,0 +1,55 @@
<?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.RiskPersonalMapper">
<select id="queryPage" resultType="com.biutag.supervision.pojo.vo.RiskPersonalVo">
SELECT
distinct
p.id,
p.NAME,
p.gender,
p.id_code,
p.mobile_number,
p.tags,
p.risk_score,
p.control_depart_name
FROM
risk_personal p
<choose>
<when test="(param.smallTags != null and param.smallTags.size() > 0) or (param.educationTags != null and param.educationTags.size() > 0) or (param.ageTags != null and param.ageTags.size() > 0)">
,( SELECT
id_code
FROM
risk_personal_tag
WHERE
1 = 1
<foreach collection="param.smallTags" item="tag" open="AND (" separator=" or " close=")">
small_tag like concat('%', #{tag}, '%')
</foreach>
<foreach collection="param.educationTags" item="tag" open="AND (" separator=" or " close=")">
small_tag = #{tag}
</foreach>
<foreach collection="param.ageTags" item="tag" open="AND (" separator=" or " close=")">
small_tag like concat('%', #{tag}, '%')
</foreach>
) t
WHERE p.id_code = t.id_code
</when>
<otherwise>
WHERE 1 = 1
</otherwise>
</choose>
AND p.del = 0
<if test="param.name != null and param.name != ''">
AND p.name like concat('%', #{param.name}, '%')
</if>
<if test="param.mobileNumber != null and param.mobileNumber != ''">
AND p.mobile_number like concat('%', #{param.mobileNumber}, '%')
</if>
<if test="param.idCode != null and param.idCode != ''">
AND p.id_code like concat('%', #{param.idCode}, '%')
</if>
order by p.risk_score desc
</select>
</mapper>

2
src/test/java/com/biutag/supervision/tools/GenCodeTests.java

@ -25,7 +25,7 @@ public class GenCodeTests {
@Test @Test
public void genEntity() throws TemplateException, IOException { public void genEntity() throws TemplateException, IOException {
String tableName = "model_problem_type"; String tableName = "risk_person_info";
String tableSchema = "negative"; String tableSchema = "negative";
boolean genMapper = true; boolean genMapper = true;
boolean genService = true; boolean genService = true;

Loading…
Cancel
Save