Browse Source

fix: 优化单位/个人画像

master
wxc 3 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"),
JYDC("警意调查", "3"),
CFJD("法监督", "4"),
CFJD("法监督", "4"),
JCKH("检查考核", "8"),
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();
profileDepart.setProblemTypeBarList(problemTypeBarList);
List<Object> result = negativeScoreService.calculateDepartScore(beginTime, endTime, departId);
profileDepart.setScore((BigDecimal) result.get(0));
profileDepart.setExpression(result.get(1).toString());
profileDepart.setRemarks(result.get(2).toString());
//List<Object> result = negativeScoreService.calculateDepartScore(beginTime, endTime, departId);
profileDepart.setScore(BigDecimal.valueOf(list.stream().mapToDouble(NegativeScoreDepart::getScore).sum()));
// profileDepart.setExpression(result.get(1).toString());
// profileDepart.setRemarks(result.get(2).toString());
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.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>()
.between(BusinessPolice::getDate, beginTime, endTime)
@ -137,15 +138,15 @@ public class ProfilePoliceController {
}
}
List<Object> result = negativeScoreService.calculatePoliceScore(beginTime, endTime, idCode);
profilePolice.setScore((BigDecimal) result.get(0));
profilePolice.setExpression(result.get(1).toString());
profilePolice.setRemarks(result.get(2).toString());
//List<Object> result = negativeScoreService.calculatePoliceScore(beginTime, endTime, idCode);
profilePolice.setScore(BigDecimal.valueOf(negatives.stream().mapToDouble(NegativeScorePolice::getScore).sum()));
// profilePolice.setExpression(result.get(1).toString());
// profilePolice.setRemarks(result.get(2).toString());
// 雷达图
profilePolice.setBusinessTypeRadarIndicator(Arrays.stream(BusinessTypeEnum.values())
.map(item -> new ProfileDepart.RadarIndicatorItem().setName(item.getLabel()).setMax(100)).toList());
profilePolice.setBusinessTypeScoreRadarData((List<Double>) result.get(3));
profilePolice.setBusinessTypeWeightRadarData((List<Double>) result.get(4));
// profilePolice.setBusinessTypeScoreRadarData((List<Double>) result.get(3));
// profilePolice.setBusinessTypeWeightRadarData((List<Double>) result.get(4));
return Result.success(profilePolice);
}

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

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

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

@ -87,7 +87,7 @@ public class Model {
// 建模方式
private String modelingMethod;
// 模型数据类型
// 预警类型
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 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())
// 是否整改
.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())) {
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);
return;
}
String formula = "%s + (%s * %s) + (%s * %s)";
List<NegativeScoreDepart> scoreDeparts = new ArrayList<>();
negativeScorePoliceService.remove(new LambdaQueryWrapper<>());
negativeScoreDepartService.remove(new LambdaQueryWrapper<>());
Set<String> negativeIds = negativeBlames.stream().map(NegativeBlame::getNegativeId).collect(Collectors.toSet());
List<NegativeProblemRelation> problemsAll = problemRelationService.list(negativeIds);
List<Negative> negatives = negativeService.listByIds(negativeIds);
List<SupDepart> departs = departService.listByIds(negatives.stream().map(Negative::getInvolveDepartId).collect(Collectors.toSet()));
negativeBlames.forEach(blame -> {
Negative negative = negatives.stream().filter(item -> item.getId().equals(blame.getNegativeId())).findFirst().get();
SupDepart depart = departs.stream().filter(item -> item.getId().equals(negative.getInvolveDepartId())).findFirst().get();
NegativeScorePolice negativeScorePolice = new NegativeScorePolice()
.setNegativeId(blame.getNegativeId())
.setIdCode(blame.getBlameIdCode())
.setDiscoveryTime(negative.getDiscoveryTime())
.setIdCode(blame.getBlameIdCode())
.setBusinessTypeCode(negative.getBusinessTypeCode())
.setDepartGroupId(depart.getStatisticsGroupId())
.setCreateTime(LocalDateTime.now());
List<NegativeProblemRelation> problems = problemsAll.stream().filter(item -> item.getNegativeId().equals(blame.getNegativeId()) &&
item.getBlameId().equals(blame.getBlameId())).toList();
List<String> codes = problems.stream().map(NegativeProblemRelation::getThreeLevelCode).toList();
if (codes.isEmpty()) {
return;
}
SupDictProblemType problemType = supDictContentMapper.selectOneByMaxScore(codes);
LocalDateTime endTime = negative.getDiscoveryTime();
LocalDateTime beginTime = endTime.minusYears(1);
int frequency = blameService.countByTrue(blame.getBlameIdCode(), problemType.getParentCode(), beginTime, endTime);
String expression = String.format(formula,
problemType.getScore(),
problemType.getScore(),
NegativeLevelEnum.GENERAL_IMPACT.getScore(),
problemType.getScore(),
ScoreRule.getFrequencyScore(frequency));
double calculate = NumberUtil.calculate(expression);
double score = NumberUtil.roundHalfEven(calculate, 2).doubleValue();
negativeScorePolice.setScore(score)
.setExpression(expression);
negativeScorePoliceService.save(negativeScorePolice);
NegativeScoreDepart scoreDepart = scoreDeparts.stream().filter(item -> item.getNegativeId().equals(negative.getId())).findFirst().orElse(null);
if (Objects.isNull(scoreDepart)) {
scoreDepart = new NegativeScoreDepart();
BeanUtil.copyProperties(negativeScorePolice, scoreDepart);
scoreDepart.setDepartId(negative.getInvolveDepartId());
scoreDeparts.add(scoreDepart);
} else if (scoreDepart.getScore() < score) {
scoreDepart.setScore(score);
try {
String formula = "%s + (%s * %s) + (%s * %s)";
List<NegativeScoreDepart> scoreDeparts = new ArrayList<>();
negativeScorePoliceService.remove(new LambdaQueryWrapper<>());
negativeScoreDepartService.remove(new LambdaQueryWrapper<>());
Set<String> negativeIds = negativeBlames.stream().map(NegativeBlame::getNegativeId).collect(Collectors.toSet());
List<NegativeProblemRelation> problemsAll = problemRelationService.list(negativeIds);
List<Negative> negatives = negativeService.listByIds(negativeIds);
List<SupDepart> departs = departService.listByIds(negatives.stream().map(Negative::getInvolveDepartId).collect(Collectors.toSet()));
negativeBlames.forEach(blame -> {
Negative negative = negatives.stream().filter(item -> item.getId().equals(blame.getNegativeId())).findFirst().get();
SupDepart depart = departs.stream().filter(item -> item.getId().equals(negative.getInvolveDepartId())).findFirst().orElse(null);
if (Objects.isNull(depart)) {
return;
}
NegativeScorePolice negativeScorePolice = new NegativeScorePolice()
.setNegativeId(blame.getNegativeId())
.setIdCode(blame.getBlameIdCode())
.setDiscoveryTime(negative.getDiscoveryTime())
.setIdCode(blame.getBlameIdCode())
.setBusinessTypeCode(negative.getBusinessTypeCode())
.setDepartGroupId(depart.getStatisticsGroupId())
.setCreateTime(LocalDateTime.now());
List<NegativeProblemRelation> problems = problemsAll.stream().filter(item -> item.getNegativeId().equals(blame.getNegativeId()) &&
item.getBlameId().equals(blame.getBlameId())).toList();
List<String> codes = problems.stream().map(NegativeProblemRelation::getThreeLevelCode).toList();
if (codes.isEmpty()) {
return;
}
SupDictProblemType problemType = supDictContentMapper.selectOneByMaxScore(codes);
LocalDateTime endTime = negative.getDiscoveryTime();
LocalDateTime beginTime = endTime.minusYears(1);
int frequency = blameService.countByTrue(blame.getBlameIdCode(), problemType.getParentCode(), beginTime, endTime);
String expression = String.format(formula,
problemType.getScore(),
problemType.getScore(),
NegativeLevelEnum.GENERAL_IMPACT.getScore(),
problemType.getScore(),
ScoreRule.getFrequencyScore(frequency));
double calculate = NumberUtil.calculate(expression);
double score = NumberUtil.roundHalfEven(calculate, 2).doubleValue();
negativeScorePolice.setScore(score)
.setExpression(expression);
negativeScorePoliceService.save(negativeScorePolice);
NegativeScoreDepart scoreDepart = scoreDeparts.stream().filter(item -> item.getNegativeId().equals(negative.getId())).findFirst().orElse(null);
if (Objects.isNull(scoreDepart)) {
scoreDepart = new NegativeScoreDepart();
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);
}
});
if (!scoreDeparts.isEmpty()) {
negativeScoreDepartService.saveBatch(scoreDeparts);
} catch (RuntimeException e) {
flag.set(false);
throw e;
}
flag.set(false);
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.*,
count( DISTINCT nb.blameIdCode ) verify_police_size,
count( n.negative_id ) verify_size,
dc.score
sum(n.score) score
FROM
(
SELECT
@ -31,7 +31,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
) d
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 depart_score dc on d.depart_id = dc.depart_id
WHERE
n.depart_id is not null
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,
d1.short_name parent_depart_name,
count( DISTINCT n.negative_id ) verify_size,
pc.score
cum(pc.score) score
FROM
sup_police p
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,
d.short_name,
d.id,
d1.short_name,
pc.score
d1.short_name
ORDER BY
verify_size desc, score desc
</select>

Loading…
Cancel
Save