diff --git a/sql/241210.sql b/sql/241210.sql new file mode 100644 index 0000000..b1e0f2e --- /dev/null +++ b/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`; \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/controller/sensitivePerception/RiskPersonalController.java b/src/main/java/com/biutag/supervision/controller/sensitivePerception/RiskPersonalController.java index 48fbdb6..449aa8c 100644 --- a/src/main/java/com/biutag/supervision/controller/sensitivePerception/RiskPersonalController.java +++ b/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> list(RiskPersonalQueryParam param) { LambdaQueryWrapper 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 qw = new LambdaQueryWrapper() - .like(RiskPersonalTag::getSmallTag, param.getTags()); - List 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 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 list = riskPersonalTagService.list(tagQueryWrapper); + if (list.isEmpty()) { return Result.success(new Page().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 page = riskPersonalService.page(Page.of(param.getCurrent(), param.getSize()), queryWrapper); if (page.getRecords().isEmpty()) { return Result.success(new Page().setTotal(0).setRecords(new ArrayList<>())); } - List tags = riskPersonalTagService.list(new LambdaQueryWrapper() .in(RiskPersonalTag::getIdCode, page.getRecords().stream().map(RiskPersonal::getIdCode).toList())); List list = page.getRecords().stream().map(item -> { @@ -97,13 +119,12 @@ public class RiskPersonalController { return riskRule; } List models = modelService.list(new LambdaQueryWrapper().in(Model::getRiskScoreRuleId, rules2.stream().map(RiskScoreRule::getId).toList())); - - List records = models.isEmpty() ? new ArrayList<>() : riskModelTaskClueService.page(Page.of(1, 100), new LambdaQueryWrapper() - .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 queryWrapper = new QueryWrapper() + .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 records = models.isEmpty() ? new ArrayList<>() : riskModelTaskClueMapper.queryPage(Page.of(1, 100), queryWrapper).getRecords(); riskRule.setClues(records); return riskRule; }).toList(); diff --git a/src/main/java/com/biutag/supervision/controller/work/NegativeController.java b/src/main/java/com/biutag/supervision/controller/work/NegativeController.java index d79dee3..c049cee 100644 --- a/src/main/java/com/biutag/supervision/controller/work/NegativeController.java +++ b/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 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 transferTodo(@PathVariable String id) { - negativeService.update(new LambdaUpdateWrapper().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().eq(Negative::getId, id) + .set(Negative::getProcessingStatus, ProcessingStatusEnum.approval.name()) + .set(Negative::getFlowKey, flowKey) + .set(Negative::getUpdTime, LocalDateTime.now())); negativeWorkService.update(new LambdaUpdateWrapper().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()) diff --git a/src/main/java/com/biutag/supervision/mapper/RiskModelTaskClueMapper.java b/src/main/java/com/biutag/supervision/mapper/RiskModelTaskClueMapper.java index 7d91b05..7fbf8cf 100644 --- a/src/main/java/com/biutag/supervision/mapper/RiskModelTaskClueMapper.java +++ b/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 { + Page queryPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + } \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/domain/RiskPersonalDetail.java b/src/main/java/com/biutag/supervision/pojo/domain/RiskPersonalDetail.java index 191db51..d2dc5fc 100644 --- a/src/main/java/com/biutag/supervision/pojo/domain/RiskPersonalDetail.java +++ b/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 clues = new ArrayList<>(); + private List clues = new ArrayList<>(); } } diff --git a/src/main/java/com/biutag/supervision/pojo/dto/ModelDto.java b/src/main/java/com/biutag/supervision/pojo/dto/ModelDto.java index 31e1c55..f0a8910 100644 --- a/src/main/java/com/biutag/supervision/pojo/dto/ModelDto.java +++ b/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 involveProblem = new ArrayList<>(); // 问题类型 diff --git a/src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java b/src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java index b9cc50c..1c2d765 100644 --- a/src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java +++ b/src/main/java/com/biutag/supervision/pojo/dto/NegativeDto.java @@ -107,7 +107,4 @@ public class NegativeDto { // 通报期数 private String reportNumber; - - // 是否开启流程 - private Boolean flowFlag; } diff --git a/src/main/java/com/biutag/supervision/pojo/entity/Model.java b/src/main/java/com/biutag/supervision/pojo/entity/Model.java index 73c8366..ac75e73 100644 --- a/src/main/java/com/biutag/supervision/pojo/entity/Model.java +++ b/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; } \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/entity/RiskModelTaskClue.java b/src/main/java/com/biutag/supervision/pojo/entity/RiskModelTaskClue.java index 67570a2..cf09e2c 100644 --- a/src/main/java/com/biutag/supervision/pojo/entity/RiskModelTaskClue.java +++ b/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; } \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/param/RiskPersonalQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/RiskPersonalQueryParam.java index d9be686..c79f970 100644 --- a/src/main/java/com/biutag/supervision/pojo/param/RiskPersonalQueryParam.java +++ b/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 tags = new ArrayList<>(); + + // 学历 + private List educationTags = new ArrayList<>(); + + // 年龄 + private List ageTags = new ArrayList<>(); - private String smallTags; + // 高风险因素 + private List smallTags = new ArrayList<>(); } diff --git a/src/main/java/com/biutag/supervision/pojo/vo/RiskModelTaskClueVo.java b/src/main/java/com/biutag/supervision/pojo/vo/RiskModelTaskClueVo.java new file mode 100644 index 0000000..12957b5 --- /dev/null +++ b/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; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/vo/RiskScoreRuleTree.java b/src/main/java/com/biutag/supervision/pojo/vo/RiskScoreRuleTree.java index 5a3e255..38f2177 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/RiskScoreRuleTree.java +++ b/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 children = new ArrayList<>(); } diff --git a/src/main/java/com/biutag/supervision/pojo/vo/RiskTree.java b/src/main/java/com/biutag/supervision/pojo/vo/RiskTree.java index 6c369b3..689c307 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/RiskTree.java +++ b/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 children = new ArrayList<>(); public static RiskTree of(Model model) { diff --git a/src/main/resources/mapper/RiskModelTaskClueMapper.xml b/src/main/resources/mapper/RiskModelTaskClueMapper.xml new file mode 100644 index 0000000..1c988da --- /dev/null +++ b/src/main/resources/mapper/RiskModelTaskClueMapper.xml @@ -0,0 +1,21 @@ + + + + + + +