Browse Source

fix: 优化单位/个人画像

master
wxc 4 months ago
parent
commit
7901471812
  1. 2
      src/main/java/com/biutag/supervision/constants/enums/ProblemSourcesEnum.java
  2. 9
      src/main/java/com/biutag/supervision/controller/sensitiveperception/ProfileDepartController.java
  3. 15
      src/main/java/com/biutag/supervision/controller/sensitiveperception/ProfilePoliceController.java
  4. 14
      src/main/java/com/biutag/supervision/job/Job.java
  5. 2
      src/main/java/com/biutag/supervision/mapper/NegativeBlameMapper.java
  6. 2
      src/main/java/com/biutag/supervision/pojo/entity/Model.java
  7. 3
      src/main/java/com/biutag/supervision/pojo/param/NegativeQueryParam.java
  8. 4
      src/main/java/com/biutag/supervision/service/NegativeQueryService.java
  9. 114
      src/main/java/com/biutag/supervision/service/NegativeScoreService.java
  10. 3
      src/main/resources/mapper/ProfileDepartMapper.xml
  11. 5
      src/main/resources/mapper/ProfilePoliceMapper.xml

2
src/main/java/com/biutag/supervision/constants/enums/ProblemSourcesEnum.java

@ -31,7 +31,7 @@ public enum ProblemSourcesEnum {
JWDC("民意感知", "2"), JWDC("民意感知", "2"),
JYDC("警意调查", "3"), JYDC("警意调查", "3"),
CFJD("法监督", "4"), CFJD("法监督", "4"),
JCKH("检查考核", "8"), JCKH("检查考核", "8"),
QT("其他", "9"); QT("其他", "9");

9
src/main/java/com/biutag/supervision/controller/sensitiveperception/ProfileDepartController.java

@ -156,10 +156,11 @@ public class ProfileDepartController {
}).sorted(Comparator.comparing(BarItem::getValue).reversed()).toList(); }).sorted(Comparator.comparing(BarItem::getValue).reversed()).toList();
profileDepart.setProblemTypeBarList(problemTypeBarList); profileDepart.setProblemTypeBarList(problemTypeBarList);
List<Object> result = negativeScoreService.calculateDepartScore(beginTime, endTime, departId); //List<Object> result = negativeScoreService.calculateDepartScore(beginTime, endTime, departId);
profileDepart.setScore((BigDecimal) result.get(0));
profileDepart.setExpression(result.get(1).toString()); profileDepart.setScore(BigDecimal.valueOf(list.stream().mapToDouble(NegativeScoreDepart::getScore).sum()));
profileDepart.setRemarks(result.get(2).toString()); // profileDepart.setExpression(result.get(1).toString());
// profileDepart.setRemarks(result.get(2).toString());
return Result.success(profileDepart); return Result.success(profileDepart);
} }

15
src/main/java/com/biutag/supervision/controller/sensitiveperception/ProfilePoliceController.java

@ -78,7 +78,8 @@ public class ProfilePoliceController {
ProfilePolice profilePolice = new ProfilePolice(); ProfilePolice profilePolice = new ProfilePolice();
profilePolice.setPoliceInfo(policeService.getByIdCode(idCode)); profilePolice.setPoliceInfo(policeService.getByIdCode(idCode));
List<NegativeScorePolice> negatives = negativeScorePoliceService.list(new LambdaQueryWrapper<NegativeScorePolice>().between(NegativeScorePolice::getDiscoveryTime, beginTime, endTime).eq(NegativeScorePolice::getIdCode, idCode)); List<NegativeScorePolice> negatives = negativeScorePoliceService.list(new LambdaQueryWrapper<NegativeScorePolice>()
.between(NegativeScorePolice::getDiscoveryTime, beginTime, endTime).eq(NegativeScorePolice::getIdCode, idCode));
int jcj110BusinessSize = businessPoliceService.list(new LambdaQueryWrapper<BusinessPolice>() int jcj110BusinessSize = businessPoliceService.list(new LambdaQueryWrapper<BusinessPolice>()
.between(BusinessPolice::getDate, beginTime, endTime) .between(BusinessPolice::getDate, beginTime, endTime)
@ -137,15 +138,15 @@ public class ProfilePoliceController {
} }
} }
List<Object> result = negativeScoreService.calculatePoliceScore(beginTime, endTime, idCode); //List<Object> result = negativeScoreService.calculatePoliceScore(beginTime, endTime, idCode);
profilePolice.setScore((BigDecimal) result.get(0)); profilePolice.setScore(BigDecimal.valueOf(negatives.stream().mapToDouble(NegativeScorePolice::getScore).sum()));
profilePolice.setExpression(result.get(1).toString()); // profilePolice.setExpression(result.get(1).toString());
profilePolice.setRemarks(result.get(2).toString()); // profilePolice.setRemarks(result.get(2).toString());
// 雷达图 // 雷达图
profilePolice.setBusinessTypeRadarIndicator(Arrays.stream(BusinessTypeEnum.values()) profilePolice.setBusinessTypeRadarIndicator(Arrays.stream(BusinessTypeEnum.values())
.map(item -> new ProfileDepart.RadarIndicatorItem().setName(item.getLabel()).setMax(100)).toList()); .map(item -> new ProfileDepart.RadarIndicatorItem().setName(item.getLabel()).setMax(100)).toList());
profilePolice.setBusinessTypeScoreRadarData((List<Double>) result.get(3)); // profilePolice.setBusinessTypeScoreRadarData((List<Double>) result.get(3));
profilePolice.setBusinessTypeWeightRadarData((List<Double>) result.get(4)); // profilePolice.setBusinessTypeWeightRadarData((List<Double>) result.get(4));
return Result.success(profilePolice); return Result.success(profilePolice);
} }

14
src/main/java/com/biutag/supervision/job/Job.java

@ -1,9 +1,6 @@
package com.biutag.supervision.job; package com.biutag.supervision.job;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.stream.CollectorUtil;
import cn.hutool.core.util.*; import cn.hutool.core.util.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -23,12 +20,10 @@ import org.springframework.stereotype.Component;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
import static com.biutag.supervision.util.TimeUtil.SECONDS_OF_A_DAY; import static com.biutag.supervision.util.TimeUtil.SECONDS_OF_A_DAY;
@ -45,6 +40,8 @@ public class Job {
private final SupExternalDepartService externalDepartService; private final SupExternalDepartService externalDepartService;
private final MailService mailService;
// 更新办理超时 // 更新办理超时
@Scheduled(fixedRate = 600000) @Scheduled(fixedRate = 600000)
public void updateHandleTimeout() { public void updateHandleTimeout() {
@ -76,8 +73,6 @@ public class Job {
} }
private final MailService mailService;
/** /**
* 凌晨1点执行 * 凌晨1点执行
*/ */
@ -86,8 +81,8 @@ public class Job {
mailService.saveMailbox(); mailService.saveMailbox();
} }
// 每小时一次 // 每10分钟执行一次
@Scheduled(cron = "0 0 * * * ?") @Scheduled(cron = "0 */10 * * * ?")
public void updateRemainingTime() { public void updateRemainingTime() {
log.info("updateRemainingTime-----------------"); log.info("updateRemainingTime-----------------");
List<Negative> negatives = negativeService.list(new LambdaQueryWrapper<Negative>() List<Negative> negatives = negativeService.list(new LambdaQueryWrapper<Negative>()
@ -99,6 +94,7 @@ public class Job {
TimeUtil.getRemainingDuration(item.getFirstDistributeTime(), item.getMaxSignDuration(), item.getMaxHandleDuration(), item.getExtensionDays(), item.getFlowKey()))); TimeUtil.getRemainingDuration(item.getFirstDistributeTime(), item.getMaxSignDuration(), item.getMaxHandleDuration(), item.getExtensionDays(), item.getFlowKey())));
}); });
} }
private final DwdAsjZfbaShrxx2Service dwdAsjZfbaShrxx2Service; private final DwdAsjZfbaShrxx2Service dwdAsjZfbaShrxx2Service;
private final RpcApplyService rpcApplyService; private final RpcApplyService rpcApplyService;
private final SupPoliceService policeService; private final SupPoliceService policeService;

2
src/main/java/com/biutag/supervision/mapper/NegativeBlameMapper.java

@ -24,7 +24,7 @@ public interface NegativeBlameMapper extends BaseMapper<NegativeBlame> {
@Select("select DISTINCT nb.* from negative_blame nb left join negative n on nb.negativeId = n.id " + @Select("select DISTINCT nb.* from negative_blame nb left join negative n on nb.negativeId = n.id " +
"left join negative_problem_relation pr on pr.negativeId = nb.negativeId and pr.blameId = nb.blameId " + "left join negative_problem_relation pr on pr.negativeId = nb.negativeId and pr.blameId = nb.blameId " +
"where n.checkStatus in ('1', '2') and n.processing_status = 'completed' and pr.threeLevelCode is not null") "where n.checkStatus in ('1', '2') and n.processing_status = 'completed' and pr.threeLevelCode is not null and nb.type = 'personal'")
List<NegativeBlame> selectVerifyTrue(); List<NegativeBlame> selectVerifyTrue();

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

@ -87,7 +87,7 @@ public class Model {
// 建模方式 // 建模方式
private String modelingMethod; private String modelingMethod;
// 模型数据类型 // 预警类型
private String modelDataType; private String modelDataType;

3
src/main/java/com/biutag/supervision/pojo/param/NegativeQueryParam.java

@ -83,4 +83,7 @@ public class NegativeQueryParam extends BasePage {
// 操作人姓名 // 操作人姓名
private String operator; private String operator;
// 审批流程
private String approvalFlow;
} }

4
src/main/java/com/biutag/supervision/service/NegativeQueryService.java

@ -79,7 +79,9 @@ public class NegativeQueryService {
// 是否属实 // 是否属实
.in(CollectionUtil.isNotEmpty(param.getCheckStatus()), Negative::getCheckStatus, param.getCheckStatus()) .in(CollectionUtil.isNotEmpty(param.getCheckStatus()), Negative::getCheckStatus, param.getCheckStatus())
// 是否整改 // 是否整改
.eq(StrUtil.isNotBlank(param.getIsRectifyCode()), Negative::getIsRectifyCode, param.getIsRectifyCode()); .eq(StrUtil.isNotBlank(param.getIsRectifyCode()), Negative::getIsRectifyCode, param.getIsRectifyCode())
// 审批流程
.eq(StrUtil.isNotBlank(param.getApprovalFlow()), Negative::getApprovalFlow, param.getApprovalFlow());
// 涉及单位 // 涉及单位
if (StrUtil.isNotBlank(param.getInvolveDepartId())) { if (StrUtil.isNotBlank(param.getInvolveDepartId())) {
List<String> departIds = departService.getAllNodeIds(param.getInvolveDepartId()); List<String> departIds = departService.getAllNodeIds(param.getInvolveDepartId());

114
src/main/java/com/biutag/supervision/service/NegativeScoreService.java

@ -56,60 +56,68 @@ public class NegativeScoreService {
flag.set(false); flag.set(false);
return; return;
} }
String formula = "%s + (%s * %s) + (%s * %s)"; try {
List<NegativeScoreDepart> scoreDeparts = new ArrayList<>(); String formula = "%s + (%s * %s) + (%s * %s)";
negativeScorePoliceService.remove(new LambdaQueryWrapper<>()); List<NegativeScoreDepart> scoreDeparts = new ArrayList<>();
negativeScoreDepartService.remove(new LambdaQueryWrapper<>()); negativeScorePoliceService.remove(new LambdaQueryWrapper<>());
Set<String> negativeIds = negativeBlames.stream().map(NegativeBlame::getNegativeId).collect(Collectors.toSet()); negativeScoreDepartService.remove(new LambdaQueryWrapper<>());
List<NegativeProblemRelation> problemsAll = problemRelationService.list(negativeIds); Set<String> negativeIds = negativeBlames.stream().map(NegativeBlame::getNegativeId).collect(Collectors.toSet());
List<Negative> negatives = negativeService.listByIds(negativeIds); List<NegativeProblemRelation> problemsAll = problemRelationService.list(negativeIds);
List<SupDepart> departs = departService.listByIds(negatives.stream().map(Negative::getInvolveDepartId).collect(Collectors.toSet())); List<Negative> negatives = negativeService.listByIds(negativeIds);
negativeBlames.forEach(blame -> { List<SupDepart> departs = departService.listByIds(negatives.stream().map(Negative::getInvolveDepartId).collect(Collectors.toSet()));
Negative negative = negatives.stream().filter(item -> item.getId().equals(blame.getNegativeId())).findFirst().get(); negativeBlames.forEach(blame -> {
SupDepart depart = departs.stream().filter(item -> item.getId().equals(negative.getInvolveDepartId())).findFirst().get(); Negative negative = negatives.stream().filter(item -> item.getId().equals(blame.getNegativeId())).findFirst().get();
NegativeScorePolice negativeScorePolice = new NegativeScorePolice() SupDepart depart = departs.stream().filter(item -> item.getId().equals(negative.getInvolveDepartId())).findFirst().orElse(null);
.setNegativeId(blame.getNegativeId()) if (Objects.isNull(depart)) {
.setIdCode(blame.getBlameIdCode()) return;
.setDiscoveryTime(negative.getDiscoveryTime()) }
.setIdCode(blame.getBlameIdCode()) NegativeScorePolice negativeScorePolice = new NegativeScorePolice()
.setBusinessTypeCode(negative.getBusinessTypeCode()) .setNegativeId(blame.getNegativeId())
.setDepartGroupId(depart.getStatisticsGroupId()) .setIdCode(blame.getBlameIdCode())
.setCreateTime(LocalDateTime.now()); .setDiscoveryTime(negative.getDiscoveryTime())
List<NegativeProblemRelation> problems = problemsAll.stream().filter(item -> item.getNegativeId().equals(blame.getNegativeId()) && .setIdCode(blame.getBlameIdCode())
item.getBlameId().equals(blame.getBlameId())).toList(); .setBusinessTypeCode(negative.getBusinessTypeCode())
List<String> codes = problems.stream().map(NegativeProblemRelation::getThreeLevelCode).toList(); .setDepartGroupId(depart.getStatisticsGroupId())
if (codes.isEmpty()) { .setCreateTime(LocalDateTime.now());
return; List<NegativeProblemRelation> problems = problemsAll.stream().filter(item -> item.getNegativeId().equals(blame.getNegativeId()) &&
} item.getBlameId().equals(blame.getBlameId())).toList();
SupDictProblemType problemType = supDictContentMapper.selectOneByMaxScore(codes); List<String> codes = problems.stream().map(NegativeProblemRelation::getThreeLevelCode).toList();
LocalDateTime endTime = negative.getDiscoveryTime(); if (codes.isEmpty()) {
LocalDateTime beginTime = endTime.minusYears(1); return;
int frequency = blameService.countByTrue(blame.getBlameIdCode(), problemType.getParentCode(), beginTime, endTime); }
String expression = String.format(formula, SupDictProblemType problemType = supDictContentMapper.selectOneByMaxScore(codes);
problemType.getScore(), LocalDateTime endTime = negative.getDiscoveryTime();
problemType.getScore(), LocalDateTime beginTime = endTime.minusYears(1);
NegativeLevelEnum.GENERAL_IMPACT.getScore(), int frequency = blameService.countByTrue(blame.getBlameIdCode(), problemType.getParentCode(), beginTime, endTime);
problemType.getScore(), String expression = String.format(formula,
ScoreRule.getFrequencyScore(frequency)); problemType.getScore(),
problemType.getScore(),
double calculate = NumberUtil.calculate(expression); NegativeLevelEnum.GENERAL_IMPACT.getScore(),
double score = NumberUtil.roundHalfEven(calculate, 2).doubleValue(); problemType.getScore(),
negativeScorePolice.setScore(score) ScoreRule.getFrequencyScore(frequency));
.setExpression(expression);
double calculate = NumberUtil.calculate(expression);
negativeScorePoliceService.save(negativeScorePolice); double score = NumberUtil.roundHalfEven(calculate, 2).doubleValue();
NegativeScoreDepart scoreDepart = scoreDeparts.stream().filter(item -> item.getNegativeId().equals(negative.getId())).findFirst().orElse(null); negativeScorePolice.setScore(score)
if (Objects.isNull(scoreDepart)) { .setExpression(expression);
scoreDepart = new NegativeScoreDepart();
BeanUtil.copyProperties(negativeScorePolice, scoreDepart); negativeScorePoliceService.save(negativeScorePolice);
scoreDepart.setDepartId(negative.getInvolveDepartId()); NegativeScoreDepart scoreDepart = scoreDeparts.stream().filter(item -> item.getNegativeId().equals(negative.getId())).findFirst().orElse(null);
scoreDeparts.add(scoreDepart); if (Objects.isNull(scoreDepart)) {
} else if (scoreDepart.getScore() < score) { scoreDepart = new NegativeScoreDepart();
scoreDepart.setScore(score); BeanUtil.copyProperties(negativeScorePolice, scoreDepart);
scoreDepart.setDepartId(negative.getInvolveDepartId());
scoreDeparts.add(scoreDepart);
} else if (scoreDepart.getScore() < score) {
scoreDepart.setScore(score);
}
});
if (!scoreDeparts.isEmpty()) {
negativeScoreDepartService.saveBatch(scoreDeparts);
} }
}); } catch (RuntimeException e) {
if (!scoreDeparts.isEmpty()) { flag.set(false);
negativeScoreDepartService.saveBatch(scoreDeparts); throw e;
} }
flag.set(false); flag.set(false);
System.out.println("calculateScore-------------------------------------------------End"); System.out.println("calculateScore-------------------------------------------------End");

3
src/main/resources/mapper/ProfileDepartMapper.xml

@ -9,7 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.*, d.*,
count( DISTINCT nb.blameIdCode ) verify_police_size, count( DISTINCT nb.blameIdCode ) verify_police_size,
count( n.negative_id ) verify_size, count( n.negative_id ) verify_size,
dc.score sum(n.score) score
FROM FROM
( (
SELECT SELECT
@ -31,7 +31,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
) d ) d
LEFT JOIN negative_score_depart n ON d.depart_id = n.depart_id LEFT JOIN negative_score_depart n ON d.depart_id = n.depart_id
LEFT JOIN negative_blame nb ON n.negative_id = nb.blameId LEFT JOIN negative_blame nb ON n.negative_id = nb.blameId
left join depart_score dc on d.depart_id = dc.depart_id
WHERE WHERE
n.depart_id is not null n.depart_id is not null
AND n.discovery_time BETWEEN #{beginTime} AND #{endTime} AND n.discovery_time BETWEEN #{beginTime} AND #{endTime}

5
src/main/resources/mapper/ProfilePoliceMapper.xml

@ -16,7 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.id depart_id, d.id depart_id,
d1.short_name parent_depart_name, d1.short_name parent_depart_name,
count( DISTINCT n.negative_id ) verify_size, count( DISTINCT n.negative_id ) verify_size,
pc.score cum(pc.score) score
FROM FROM
sup_police p sup_police p
LEFT JOIN sup_depart d ON p.org_id = d.id LEFT JOIN sup_depart d ON p.org_id = d.id
@ -49,8 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
p.person_type, p.person_type,
d.short_name, d.short_name,
d.id, d.id,
d1.short_name, d1.short_name
pc.score
ORDER BY ORDER BY
verify_size desc, score desc verify_size desc, score desc
</select> </select>

Loading…
Cancel
Save