Browse Source

新增计算好的分数字段

master
kami 1 year ago
parent
commit
9b86588181
  1. 21
      src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java
  2. 19
      src/main/java/com/biutag/supervisiondata/mapper/mine/RiskScoreRuleMapper.java
  3. 24
      src/main/java/com/biutag/supervisiondata/pojo/domain/ScoreRule.java
  4. 5
      src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskModelTaskClue.java
  5. 4
      src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java
  6. 6
      src/main/java/com/biutag/supervisiondata/service/impl/HabitServiceImpl.java
  7. 284
      src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java
  8. 18
      src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java
  9. 41
      src/main/java/com/biutag/supervisiondata/service/impl/RiskModelTaskClueServiceImpl.java

21
src/main/java/com/biutag/supervisiondata/event/ApplicationEvent.java

@ -123,7 +123,6 @@ public class ApplicationEvent {
// riskTaskService.infoModelTask(initDomain(List.of(32,33)));
// marriageService.marriageModelTask(initDomain(List.of(39,51)));
// pointService.syncSecurity(initDomain(List.of(37)));
// policeService.contradictModelTask(initDomain(List.of(38)));
// habitService.habitModelTask(start, initDomain(List.of(36,60,61,62)));
//
// pointService.syncCarUser(initDomain(List.of(53)));
@ -131,7 +130,6 @@ public class ApplicationEvent {
// pointService.syncScore(initDomain(List.of(43)));
// pointService.syncViolence(initDomain(List.of(44)));
// noControlService.syncNoControlData(initDomain(List.of(45)));
// pointService.syncKillSelf(initDomain(List.of(46)));
// pointService.syncDrug(initDomain(List.of(37)));
// pointService.syncControlNoPower(initDomain(List.of(48)));
// pointService.syncOilBuy(initDomain(List.of(52)));
@ -147,7 +145,7 @@ public class ApplicationEvent {
// gBaseJJDService.syncMarryDispute(initDomain(List.of(72)));
// gBaseJJDService.syncNeighborAndColleagueDispute(initDomain(List.of(73)));
// gBaseJJDService.syncBullying(initDomain(List.of(74)));
// gBaseSHRWFRService.crimeName(initDomain(List.of(75)));
// gBaseSHRWFRService.crimeName(initDomain(List.of(76)));
// pointService.syncIsPetition(initDomain(List.of(111)));
// pointService.syncFatherEducation(initDomain(List.of(112)));
// pointService.syncMotherEducation(initDomain(List.of(113)));
@ -158,19 +156,20 @@ public class ApplicationEvent {
// pointService.syncFamilyDie(initDomain(List.of(118)));
// pointService.syncFatherDie(initDomain(List.of(119)));
// pointService.syncMotherDie(initDomain(List.of(120)));
pointService.syncChildNo(initDomain(List.of(121)));
pointService.syncXIDU(initDomain(List.of(122)));
pointService.syncFiliation(initDomain(List.of(123)));
// pointService.syncChildNo(initDomain(List.of(121)));
// pointService.syncXIDU(initDomain(List.of(122)));
// pointService.syncFiliation(initDomain(List.of(123)));
// 必须在123后面
gBaseJJDService.syncOtherContradict(initDomain(List.of(75)));
pointService.syncPetitionContent(initDomain(List.of(124)));
// gBaseJJDService.syncOtherContradict(initDomain(List.of(75)));
//
// pointService.syncPetitionContent(initDomain(List.of(124)));
// *********暂时不要**********
// riskTaskService.caseModelTask(initDomain(List.of(35)));
// riskTaskService.heightFight(initDomain(List.of(42)));
//pointService.syncKillSelf(initDomain(List.of(46)));
// pointService.syncKillSelf(initDomain(List.of(46)));
// policeService.contradictModelTask(initDomain(List.of(38)));
});
}

19
src/main/java/com/biutag/supervisiondata/mapper/mine/RiskScoreRuleMapper.java

@ -1,8 +1,25 @@
package com.biutag.supervisiondata.mapper.mine;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.biutag.supervisiondata.pojo.domain.ScoreRule;
import com.biutag.supervisiondata.pojo.entity.mine.RiskScoreRule;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface RiskScoreRuleMapper extends BaseMapper<RiskScoreRule> {
import java.util.List;
public interface RiskScoreRuleMapper extends BaseMapper<RiskScoreRule> {
/**
* 根据模型id查规则
* @param list
* @return
*/
@Select("<script> " +
" select a.score, a.weight, b.id as modelId from risk_score_rule as a " +
" inner join model as b on a.id = b.risk_score_rule_id where b.id in ( " +
" <foreach collection='list' separator=',' item='item'> " +
" #{item}" +
" </foreach>" +
"</script>")
List<ScoreRule> selectRuleByModelId(@Param("list")List<Integer> list);
}

24
src/main/java/com/biutag/supervisiondata/pojo/domain/ScoreRule.java

@ -0,0 +1,24 @@
package com.biutag.supervisiondata.pojo.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
/**
* @author kami on 2024-12-10 16:36:59
* @version 0.0.1
* @since 1.8
*/
@Data
public class ScoreRule implements Serializable {
// 分值
private Double score;
// 权重
private Double weight;
private Integer modelId;
}

5
src/main/java/com/biutag/supervisiondata/pojo/entity/mine/RiskModelTaskClue.java

@ -85,6 +85,11 @@ public class RiskModelTaskClue implements Serializable {
*/
@TableField("score")
Integer score;
/**
* 计算后的分数
*/
@TableField("score_calc")
Double scoreCalc;
/**
* 发生时间
*/

4
src/main/java/com/biutag/supervisiondata/service/impl/GBaseSHRWFRServiceImpl.java

@ -372,7 +372,7 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService {
List<GBaseWFRXX> xxList = wfrxxRepository.getBaseMapper().selectFiveYearsCombatCrime(start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
RiskTask task = taskRepository.create(xxList.size(), 75);
RiskTask task = taskRepository.create(xxList.size(), 76);
List<RiskModelTaskClue> oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
// 按人分
@ -403,7 +403,7 @@ public class GBaseSHRWFRServiceImpl implements GBaseSHRWFRService {
.idCode(person.getIdCode())
.tag(zblx.getDmmc())
.personId(person.getId())
.sourceData("该人员有犯罪前科,刑事处罚罪名:" + zblx.getDmmc() + ",案件编号:" + xx.getAjbh() + ",增加风险" + zblx.getScore().intValue() + "5分")
.sourceData("该人员有犯罪前科,刑事处罚罪名:" + zblx.getDmmc() + ",案件编号:" + xx.getAjbh() + ",增加风险" + zblx.getScore().intValue() + "分")
.build();
try {
data.setEventTime(xx.getLrsj().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());

6
src/main/java/com/biutag/supervisiondata/service/impl/HabitServiceImpl.java

@ -94,7 +94,7 @@ public class HabitServiceImpl implements HabitService {
riskTaskRepository.save(task);
RiskTask task2 = createTask(ajNos2.size(), 60);
riskTaskRepository.save(task2);
RiskTask task3 = createTask(ajNos2.size(), 61);
RiskTask task3 = createTask(ajNos3.size(), 61);
riskTaskRepository.save(task3);
log.info("共计案件:{} | {} | {}", ajNos.size(), ajNos2.size(), ajNos3.size());
@ -115,10 +115,10 @@ public class HabitServiceImpl implements HabitService {
riskModelTaskClueService.saveClues(toInsert1, Default.HABBIT_IG);
}
if(!toInsert2.isEmpty()) {
riskModelTaskClueService.saveClues(toInsert1, Default.HABBIT_IG);
riskModelTaskClueService.saveClues(toInsert2, Default.HABBIT_IG);
}
if(!toInsert3.isEmpty()) {
riskModelTaskClueService.saveClues(toInsert1, Default.HABBIT_IG);
riskModelTaskClueService.saveClues(toInsert3, Default.HABBIT_IG);
}
updateTask(task.getId(), toInsert1.size(), 0);

284
src/main/java/com/biutag/supervisiondata/service/impl/PetitionServiceImpl.java

@ -51,8 +51,6 @@ public class PetitionServiceImpl implements PetitionService {
private final RiskModelTaskClueService riskModelTaskClueService;
private final RiskModelTaskClueRepository clueRepository;
private final SupExternalDepartRepository externalDepartRepository;
private final GBaseZDRYRepository zdryRepository;
@ -60,8 +58,8 @@ public class PetitionServiceImpl implements PetitionService {
@Override
public void personPullAndSave(LocalDateTime start, LocalDateTime end) {
List<RiskPersonal> personals1 = new ArrayList<>();
List<RiskPersonal> personals2= new ArrayList<>();
List<RiskPersonal> personals3= new ArrayList<>();
List<RiskPersonal> personals2 = new ArrayList<>();
List<RiskPersonal> personals3 = new ArrayList<>();
List<String> idCards = new ArrayList<>();
List<String> idCards_b = new ArrayList<>();
List<String> mobiles = new ArrayList<>();
@ -82,7 +80,7 @@ public class PetitionServiceImpl implements PetitionService {
CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> {
List<DataPetition12337> list = petition12337Repository.list(new LambdaQueryWrapper<DataPetition12337>()
.select(DataPetition12337::getName, DataPetition12337::getIdCode, DataPetition12337::getPhone,DataPetition12337::getThirdDepartId, DataPetition12337::getThirdDepartName, DataPetition12337::getDiscoverTime).between(DataPetition12337::getDiscoverTime, start, end)
.select(DataPetition12337::getName, DataPetition12337::getIdCode, DataPetition12337::getPhone, DataPetition12337::getThirdDepartId, DataPetition12337::getThirdDepartName, DataPetition12337::getDiscoverTime).between(DataPetition12337::getDiscoverTime, start, end)
.isNotNull(DataPetition12337::getIdCode));
for (DataPetition12337 data : list) {
RiskPersonal person = new RiskPersonal();
@ -90,7 +88,7 @@ public class PetitionServiceImpl implements PetitionService {
person.setName(data.getName());
person.setMobileNumber(data.getPhone());
person.setTags(Default.PETITION_12337_TAG);
if(data.getThirdDepartId() != null) {
if (data.getThirdDepartId() != null) {
person.setControlDepartId(data.getThirdDepartId());
person.setControlDepartName(data.getThirdDepartName());
person.setControlTime(data.getDiscoverTime());
@ -102,7 +100,7 @@ public class PetitionServiceImpl implements PetitionService {
}),
CompletableFutureUtil.runSyncObject(() -> {
List<DataPetitionComplaint> list = complaintRepository.list(new LambdaQueryWrapper<DataPetitionComplaint>()
.select(DataPetitionComplaint::getResponderName, DataPetitionComplaint::getResponderPhone, DataPetitionComplaint::getResponderName,DataPetitionComplaint::getThirdDepartId, DataPetitionComplaint::getThirdDepartName, DataPetitionComplaint::getDiscoveryTime).between(DataPetitionComplaint::getResponderIdCode, start, end)
.select(DataPetitionComplaint::getResponderName, DataPetitionComplaint::getResponderPhone, DataPetitionComplaint::getResponderName, DataPetitionComplaint::getThirdDepartId, DataPetitionComplaint::getThirdDepartName, DataPetitionComplaint::getDiscoveryTime).between(DataPetitionComplaint::getResponderIdCode, start, end)
.isNotNull(DataPetitionComplaint::getResponderIdCode));
for (DataPetitionComplaint data : list) {
RiskPersonal person = new RiskPersonal();
@ -110,7 +108,7 @@ public class PetitionServiceImpl implements PetitionService {
person.setName(data.getResponderName());
person.setMobileNumber(data.getResponderPhone());
person.setTags(Default.PETITION_TAG);
if(data.getThirdDepartId() != null) {
if (data.getThirdDepartId() != null) {
person.setControlDepartId(data.getThirdDepartId());
person.setControlDepartName(data.getThirdDepartName());
person.setControlTime(data.getDiscoveryTime());
@ -122,14 +120,14 @@ public class PetitionServiceImpl implements PetitionService {
}),
CompletableFutureUtil.runSyncObject(() -> {
List<DataCaseVerif> list = dataCaseVerifRepository.list(new LambdaQueryWrapper<DataCaseVerif>()
.select(DataCaseVerif::getResponderName, DataCaseVerif::getResponderPhone,DataCaseVerif::getThirdDepartId, DataCaseVerif::getThirdDepartName, DataCaseVerif::getDiscoveryTime).between(DataCaseVerif::getDiscoveryTime, start, end)
.select(DataCaseVerif::getResponderName, DataCaseVerif::getResponderPhone, DataCaseVerif::getThirdDepartId, DataCaseVerif::getThirdDepartName, DataCaseVerif::getDiscoveryTime).between(DataCaseVerif::getDiscoveryTime, start, end)
.isNotNull(DataCaseVerif::getResponderPhone));
for (DataCaseVerif data : list) {
RiskPersonal person = new RiskPersonal();
person.setName(data.getResponderName());
person.setMobileNumber(data.getResponderPhone());
person.setTags(Default.PETITION_CASE_TAG);
if(data.getThirdDepartId() != null) {
if (data.getThirdDepartId() != null) {
person.setControlDepartId(data.getThirdDepartId());
person.setControlDepartName(data.getThirdDepartName());
person.setControlTime(data.getDiscoveryTime());
@ -140,7 +138,7 @@ public class PetitionServiceImpl implements PetitionService {
}
})
).join();
log.info("{} | {} | {}",idCards.size(), idCards_b.size(), mobiles.size());
log.info("{} | {} | {}", idCards.size(), idCards_b.size(), mobiles.size());
idCards.addAll(idCards_b);
List<String> idCards2 = idCards.stream().distinct().toList();
List<String> mobiles2 = mobiles.stream().distinct().toList();
@ -184,29 +182,29 @@ public class PetitionServiceImpl implements PetitionService {
List<RiskPersonal> toInsert = new ArrayList<>();
for (RiskPersonal personal : personals1) {
GBaseSYRKXX xx = map.get(personal.getIdCode());
if(xx == null) {
if (xx == null) {
personal = checkPerson(personal);
if(personal != null) {
if (personal != null) {
toInsert.add(personal);
}
continue;
}
personal.setGender(IdCodeUtil.idCard2Gender(personal.getIdCode()));
if(personal == null) {
if (personal.getGender() == null) {
personal.setGender(xx.getXbdm());
}
if(xx.getLxdh() != null) {
if (xx.getLxdh() != null) {
personal.setMobileNumber(xx.getLxdh());
}
personal.setName(xx.getXm());
personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1));
if(personal.getAge() <= 6) {
if (personal.getAge() <= 6) {
continue;
}
if(xx.getSspcsdm()!= null) {
if (xx.getSspcsdm() != null) {
PointOrg org = orgCodeMap.get(xx.getSspcsdm());
org = findOrg(org, orgIdMap);
SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(item -> jqExternalDepart.get(item)).orElse(null);
SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(jqExternalDepart::get).orElse(null);
if (depart != null) {
personal.setControlDepartId(depart.getInternalId());
personal.setControlDepartName(depart.getInternalName());
@ -218,26 +216,26 @@ public class PetitionServiceImpl implements PetitionService {
}
for (RiskPersonal personal : personals2) {
GBaseSYRKXX xx = map.get(personal.getIdCode());
if(xx == null) {
if (xx == null) {
personal = checkPerson(personal);
if(personal != null) {
if (personal != null) {
toInsert.add(personal);
}
continue;
}
personal.setGender(xx.getXbdm());
if(xx.getLxdh() != null) {
if (xx.getLxdh() != null) {
personal.setMobileNumber(xx.getLxdh());
}
personal.setName(xx.getXm());
personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1));
if(personal.getAge() <= 6) {
if (personal.getAge() <= 6) {
continue;
}
if(xx.getSspcsdm()!= null) {
if (xx.getSspcsdm() != null) {
PointOrg org = orgCodeMap.get(xx.getSspcsdm());
org = findOrg(org, orgIdMap);
SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(item -> jqExternalDepart.get(item)).orElse(null);
SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(jqExternalDepart::get).orElse(null);
if (depart != null) {
personal.setControlDepartId(depart.getInternalId());
personal.setControlDepartName(depart.getInternalName());
@ -249,32 +247,32 @@ public class PetitionServiceImpl implements PetitionService {
}
for (RiskPersonal personal : personals3) {
List<GBaseSYRKXX> xx = mobileMap.get(personal.getMobileNumber());
if(xx == null) {
if (xx == null) {
continue;
}
GBaseSYRKXX info = null;
if(xx.size() ==1) {
GBaseSYRKXX info;
if (xx.size() == 1) {
info = xx.getFirst();
} else {
info = compare(xx, personal.getName());
}
if(info == null) {
if (info == null) {
continue;
}
personal.setIdCode(info.getGmsfhm());
personal.setGender(info.getXbdm());
if(info.getLxdh() != null) {
if (info.getLxdh() != null) {
personal.setMobileNumber(info.getLxdh());
}
personal.setName(info.getXm());
personal.setAge(Optional.ofNullable(IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now())).orElse(-1));
if(personal.getAge() <= 6) {
if (personal.getAge() <= 6) {
continue;
}
if(info.getSspcsdm()!= null) {
if (info.getSspcsdm() != null) {
PointOrg org = orgCodeMap.get(info.getSspcsdm());
org = findOrg(org, orgIdMap);
SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(item -> jqExternalDepart.get(item)).orElse(null);
SupExternalDepart depart = Optional.ofNullable(org).map(PointOrg::getDm).map(jqExternalDepart::get).orElse(null);
if (depart != null) {
personal.setControlDepartId(depart.getInternalId());
personal.setControlDepartName(depart.getInternalName());
@ -298,14 +296,14 @@ public class PetitionServiceImpl implements PetitionService {
List<DataPetition12337> pList1 = new ArrayList<>();
for (List<String> idCard : domain.getIdCards()) {
pList1.addAll(petition12337Repository.list(new LambdaQueryWrapper<DataPetition12337>()
.select(DataPetition12337::getOnlyId, DataPetition12337::getName, DataPetition12337::getIdCode, DataPetition12337::getPhone,DataPetition12337::getThirdDepartId, DataPetition12337::getThirdDepartName, DataPetition12337::getDiscoverTime, DataPetition12337::getReviewDes).ge(DataPetition12337::getDiscoverTime, time)
.select(DataPetition12337::getOnlyId, DataPetition12337::getName, DataPetition12337::getIdCode, DataPetition12337::getPhone, DataPetition12337::getThirdDepartId, DataPetition12337::getThirdDepartName, DataPetition12337::getDiscoverTime, DataPetition12337::getReviewDes).ge(DataPetition12337::getDiscoverTime, time)
.in(DataPetition12337::getIdCode, idCard)));
}
List<DataPetitionComplaint> pList2 = new ArrayList<>();
for (List<String> idCard : domain.getIdCards()) {
pList2.addAll(complaintRepository.list(new LambdaQueryWrapper<DataPetitionComplaint>()
.select(DataPetitionComplaint::getOriginId, DataPetitionComplaint::getResponderName, DataPetitionComplaint::getResponderPhone, DataPetitionComplaint::getResponderName,DataPetitionComplaint::getThirdDepartId, DataPetitionComplaint::getThirdDepartName, DataPetitionComplaint::getDiscoveryTime, DataPetitionComplaint::getThingDesc).ge(DataPetitionComplaint::getDiscoveryTime, time)
.select(DataPetitionComplaint::getOriginId, DataPetitionComplaint::getResponderName, DataPetitionComplaint::getResponderPhone, DataPetitionComplaint::getResponderName, DataPetitionComplaint::getThirdDepartId, DataPetitionComplaint::getThirdDepartName, DataPetitionComplaint::getDiscoveryTime, DataPetitionComplaint::getThingDesc).ge(DataPetitionComplaint::getDiscoveryTime, time)
.in(DataPetitionComplaint::getResponderPhone, idCard)));
}
@ -316,21 +314,27 @@ public class PetitionServiceImpl implements PetitionService {
.toList();
for (List<String> mobile : doubleMobile) {
pList3.addAll(dataCaseVerifRepository.list(new LambdaQueryWrapper<DataCaseVerif>()
.select(DataCaseVerif::getOriginId, DataCaseVerif::getResponderName, DataCaseVerif::getResponderPhone,DataCaseVerif::getThirdDepartId, DataCaseVerif::getThirdDepartName, DataCaseVerif::getDiscoveryTime, DataCaseVerif::getThingDesc).ge(DataCaseVerif::getDiscoveryTime, time)
.select(DataCaseVerif::getOriginId, DataCaseVerif::getResponderName, DataCaseVerif::getResponderPhone, DataCaseVerif::getThirdDepartId, DataCaseVerif::getThirdDepartName, DataCaseVerif::getDiscoveryTime, DataCaseVerif::getThingDesc).ge(DataCaseVerif::getDiscoveryTime, time)
.in(DataCaseVerif::getResponderPhone, mobile)));
}
// 先搞定这个电话号码的
Map<String, List<RiskPersonal>> man = domain.getPersons().stream().filter(item -> item.getMobileNumber() != null).collect(Collectors.groupingBy(RiskPersonal::getMobileNumber));
Map<String, RiskPersonal> idCodeMan = domain.getPersons().stream().collect(Collectors.toMap(RiskPersonal::getIdCode, Function.identity(), (oldValue, newValue) -> newValue));
List<ClueData> data = new ArrayList<>();
List<RiskModelTaskClue> oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
Map<String, RiskModelTaskClue> oldMap = oldList.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (val, old) -> val));
List<RiskModelTaskClue> toInsert = new ArrayList<>();
for (DataCaseVerif dataCaseVerif : pList3) {
if (oldMap.get(BhUtil.petBh(dataCaseVerif.getOriginId())) != null) {
continue;
}
List<RiskPersonal> list = man.get(dataCaseVerif.getResponderPhone());
RiskPersonal person = comparePerson(list, dataCaseVerif.getResponderName());
if(person == null) {
if (person == null) {
continue;
}
data.add(ClueData.builder()
toInsert.add(createClue(task.getModelId(), 5, task.getId(), ClueData.builder()
.id(dataCaseVerif.getOriginId())
.tag(Default.PETITION_CASE_TAG)
.personId(person.getId())
@ -339,16 +343,19 @@ public class PetitionServiceImpl implements PetitionService {
.eventTime(dataCaseVerif.getDiscoveryTime())
.idCode(person.getIdCode())
.name(person.getName())
.sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分5分,具体情况为:"+dataCaseVerif.getThingDesc())
.build());
.sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分5分,具体情况为:" + dataCaseVerif.getThingDesc())
.build()));
}
for (DataPetition12337 item : pList1) {
if (oldMap.get(BhUtil.petBh(item.getOnlyId())) != null) {
continue;
}
RiskPersonal person = idCodeMan.get(item.getIdCode());
if(person == null) {
if (person == null) {
continue;
}
data.add(ClueData.builder()
toInsert.add(createClue(task.getModelId(), 5, task.getId(), ClueData.builder()
.id(item.getOnlyId())
.tag(Default.PETITION_12337_TAG)
.personId(person.getId())
@ -357,16 +364,19 @@ public class PetitionServiceImpl implements PetitionService {
.eventTime(item.getDiscoverTime())
.idCode(person.getIdCode())
.name(person.getName())
.sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分5分,具体情况为:"+item.getReviewDes())
.build());
.sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分5分,具体情况为:" + item.getReviewDes())
.build()));
}
for (DataPetitionComplaint item : pList2) {
if (oldMap.get(BhUtil.petBh(item.getOriginId())) != null) {
continue;
}
RiskPersonal person = idCodeMan.get(item.getResponderIdCode());
if(person == null) {
if (person == null) {
continue;
}
data.add(ClueData.builder()
toInsert.add(createClue(task.getModelId(), 5, task.getId(), ClueData.builder()
.id(item.getOriginId())
.tag(Default.PETITION_TAG)
.personId(person.getId())
@ -375,153 +385,18 @@ public class PetitionServiceImpl implements PetitionService {
.eventTime(item.getDiscoveryTime())
.idCode(person.getIdCode())
.name(person.getName())
.sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分5分,具体情况为:"+item.getThingDesc())
.build());
}
// 数据部分
List<RiskModelTaskClue> toUpdates = new ArrayList<>();
List<RiskModelTaskClue> toInsert = new ArrayList<>();
// 操作前查询之前的数据,可能要合并
List<RiskModelTaskClue> oldList = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
List<RiskModelTaskClue> oldResults = Optional.ofNullable(domain.getMap().get(task.getModelId())).orElse(new ArrayList<>());
for (RiskModelTaskClue clue : oldList) {
if(clue.getEventTime().isBefore(time)) {
// 再见了兄弟
RiskModelTaskClue clue1 = new RiskModelTaskClue();
clue1.setId(clue.getId());
clue1.setDel(1);
toUpdates.add(clue1);
} else {
oldResults.add(clue);
}
}
Map<String, List<RiskModelTaskClue>> oldMap = oldResults.stream().collect(Collectors.groupingBy(RiskModelTaskClue::getIdCode));
Map<String, List<ClueData>> clueMap = data.stream().collect(Collectors.groupingBy(ClueData::getIdCode));
// 按季度计分
for (Map.Entry<String, List<ClueData>> entry : clueMap.entrySet()) {
List<RiskModelTaskClue> oldClues = Optional.ofNullable(oldMap.get(entry.getKey())).orElse(new ArrayList<>());
// - 先筛选出老记录,如果已经入库过了,新增的就删除
Map<String, RiskModelTaskClue> oldClueMap = oldClues.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (oldValue, newValue) -> newValue));
// 胜利者将继续进行筛选
List<RiskModelTaskClue> winner = new ArrayList<>();
for (ClueData clueData : entry.getValue()) {
// 找不到旧编号才继续
if(oldClueMap.get(BhUtil.petBh(clueData.getId())) == null) {
winner.add(createClue(task.getModelId(), 5, task.getId(), clueData));
}
}
// - 结合新旧数据,从新计算季度,季度最晚的算分
oldClues.addAll(winner);
Map<Integer, List<RiskModelTaskClue>> winnerMap = new WeakHashMap<>();
// 去年季度
Map<Integer, List<RiskModelTaskClue>> lastWinnerMap = new WeakHashMap<>();
int year = time.getYear();
for (RiskModelTaskClue oldClue : oldClues) {
int month = oldClue.getEventTime().getMonthValue();
int theYear = oldClue.getEventTime().getYear();
int session = month / 3;
if(theYear != year) {
List<RiskModelTaskClue> list = Optional.ofNullable(lastWinnerMap.get(session)).orElse(new ArrayList<>());
list.add(oldClue);
lastWinnerMap.put(session, list);
} else {
List<RiskModelTaskClue> list = Optional.ofNullable(winnerMap.get(session)).orElse(new ArrayList<>());
list.add(oldClue);
winnerMap.put(session, list);
}
}
// - 上季度排序
for (Map.Entry<Integer, List<RiskModelTaskClue>> entities : lastWinnerMap.entrySet()) {
List<RiskModelTaskClue> list = entities.getValue();
list.sort(Comparator.comparing(RiskModelTaskClue::getEventTime, Comparator.reverseOrder()));
RiskModelTaskClue clue = list.getFirst();
int years = clue.getEventTime().getYear();
String [] str = clue.getRiskReason().split("-");
if(clue.getId() != null) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(clue.getId());
update.setScore(2);
update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度");
toUpdates.add(update);
} else {
clue.setScore(2);
clue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度");
toInsert.add(clue);
}
list.remove(0);
for (RiskModelTaskClue riskModelTaskClue : list) {
years = riskModelTaskClue.getEventTime().getYear();
str = riskModelTaskClue.getRiskReason().split("-");
if(riskModelTaskClue.getId() != null) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(riskModelTaskClue.getId());
update.setScore(0);
update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)");
toUpdates.add(update);
} else {
riskModelTaskClue.setScore(0);
riskModelTaskClue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)");
toInsert.add(riskModelTaskClue);
}
}
}
// - 本季度排序
for (Map.Entry<Integer, List<RiskModelTaskClue>> entities : winnerMap.entrySet()) {
List<RiskModelTaskClue> list = entities.getValue();
list.sort(Comparator.comparing(RiskModelTaskClue::getEventTime, Comparator.reverseOrder()));
RiskModelTaskClue clue = list.getFirst();
int years = clue.getEventTime().getYear();
String [] str = clue.getRiskReason().split("-");
if(clue.getId() != null) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(clue.getId());
update.setScore(2);
update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度");
toUpdates.add(update);
} else {
clue.setScore(2);
clue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度");
toInsert.add(clue);
}
list.remove(0);
for (RiskModelTaskClue riskModelTaskClue : list) {
years = riskModelTaskClue.getEventTime().getYear();
str = riskModelTaskClue.getRiskReason().split("-");
if(riskModelTaskClue.getId() != null) {
RiskModelTaskClue update = new RiskModelTaskClue();
update.setId(riskModelTaskClue.getId());
update.setScore(0);
update.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)");
toUpdates.add(update);
} else {
riskModelTaskClue.setScore(0);
riskModelTaskClue.setRiskReason(str[0] + "-" + years+"年"+(entities.getKey()+1)+"季度季度(已合并到本季度最后)");
toInsert.add(riskModelTaskClue);
}
}
.sourceData("该人员在近12个月内有诉求不满或长期未化解的情况,增加风险分5分,具体情况为:" + item.getThingDesc())
.build()));
}
}
if(!toInsert.isEmpty()) {
if (!toInsert.isEmpty()) {
log.info("公安信访数据: {}", toInsert.size());
riskModelTaskClueService.saveClues(toInsert, Default.MAIL_IG);
}
if(!toUpdates.isEmpty()) {
log.info("修改线索数 | {}", toUpdates.size());
clueRepository.updateBatchById(toUpdates);
}
RiskTask updateTask = new RiskTask();
updateTask.setId(task.getId());
updateTask.setInsertSize(toInsert.size());
updateTask.setUpdateSize(toUpdates.size());
updateTask.setUpdateSize(0);
updateTask.setState(1);
updateTask.setEndTime(LocalDateTime.now());
riskTaskRepository.updateById(updateTask);
@ -530,8 +405,8 @@ public class PetitionServiceImpl implements PetitionService {
GBaseSYRKXX compare(List<GBaseSYRKXX> infos, String name) {
GBaseSYRKXX info = null;
for (GBaseSYRKXX gBaseSYRKXX : infos) {
if(gBaseSYRKXX.getXm().equals(name)) {
info=gBaseSYRKXX;
if (gBaseSYRKXX.getXm().equals(name)) {
info = gBaseSYRKXX;
break;
}
}
@ -541,8 +416,8 @@ public class PetitionServiceImpl implements PetitionService {
RiskPersonal comparePerson(List<RiskPersonal> infos, String name) {
RiskPersonal info = null;
for (RiskPersonal gBaseSYRKXX : infos) {
if(gBaseSYRKXX.getName().equals(name)) {
info=gBaseSYRKXX;
if (gBaseSYRKXX.getName().equals(name)) {
info = gBaseSYRKXX;
break;
}
}
@ -575,37 +450,20 @@ public class PetitionServiceImpl implements PetitionService {
return clue;
}
RiskPersonalControlRecord createControlRecord(ClueData data) {
RiskPersonalControlRecord controlRecord = new RiskPersonalControlRecord();
controlRecord.setName(data.getName());
controlRecord.setIdCode(data.getIdCode());
controlRecord.setCreateTime(LocalDateTime.now());
controlRecord.setControlTime(data.getEventTime());
controlRecord.setControlDepartId(data.getDepartId());
controlRecord.setControlDepartName(data.getDepartName());
controlRecord.setControlTag(data.getTag());
controlRecord.setCaseId(BhUtil.ajBh(data.getId()));
return controlRecord;
}
RiskPersonal checkPerson(RiskPersonal personal) {
if(personal.getName()== null ||personal.getIdCode() == null || personal.getName().isEmpty() || personal.getIdCode().isEmpty()) {
if (personal.getName() == null || personal.getIdCode() == null || personal.getName().isEmpty() || personal.getIdCode().isEmpty()) {
return null;
}
try{
int age = IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now());
if(age <= 6) {
Integer age = IdCodeUtil.idCard2Age(personal.getIdCode(), LocalDate.now());
if (age == null || age <= 6) {
return null;
}
personal.setAge(age);
} catch (Exception e) {
return null;
}
if(personal.getGender() == null) {
try{
if (personal.getGender() == null) {
try {
int gender = personal.getIdCode().length() == 18 ? Integer.valueOf(personal.getIdCode().substring(16, 17)) : Integer.valueOf(personal.getIdCode().substring(14, 15));
// 结果0男1女 余数偶女奇男
personal.setGender(gender % 2 == 0 ?"2":"1");
personal.setGender(gender % 2 == 0 ? "2" : "1");
} catch (Exception e) {
return null;
}

18
src/main/java/com/biutag/supervisiondata/service/impl/PointServiceImpl.java

@ -3,6 +3,7 @@ package com.biutag.supervisiondata.service.impl;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil;
import com.biutag.supervisiondata.common.utils.StreamUtil;
import com.biutag.supervisiondata.config.cache.RedisDao;
import com.biutag.supervisiondata.mapper.mine.SupDepartMapper;
import com.biutag.supervisiondata.pojo.ClueData;
@ -97,8 +98,9 @@ public class PointServiceImpl implements PointService {
for (Map.Entry<String, List<RiskPersonal>> entry : map.entrySet()) {
List<RiskModelTaskClue> olds = oldClueMap.get(entry.getKey());
if (olds == null) {
List<RiskPersonal> personals = entry.getValue().stream().filter(StreamUtil.distinctByKey(RiskPersonal::getTags)).toList();
// 全部增加
for (RiskPersonal personal : entry.getValue()) {
for (RiskPersonal personal : personals) {
toInsert.add(createClue(task.getModelId(), 5, task.getId(), ClueData.builder()
.tag("重点人员")
.name(personal.getName())
@ -112,7 +114,8 @@ public class PointServiceImpl implements PointService {
continue;
}
Map<String, RiskModelTaskClue> clueMap = olds.stream().collect(Collectors.toMap(RiskModelTaskClue::getRiskReason, Function.identity(), (oldValue, newValue) -> newValue));
for (RiskPersonal personal : entry.getValue()) {
List<RiskPersonal> personals = entry.getValue().stream().filter(StreamUtil.distinctByKey(RiskPersonal::getTags)).toList();
for (RiskPersonal personal : personals) {
if (clueMap.get(personal.getTags()) == null) {
toInsert.add(createClue(task.getModelId(), 5, task.getId(), ClueData.builder()
.tag("重点人员")
@ -127,7 +130,7 @@ public class PointServiceImpl implements PointService {
}
}
if (!toInsert.isEmpty()) {
modelTaskClueService.saveClues(toInsert, Default.POINT_IG);
modelTaskClueService.saveClues(toInsert, "是否是重点人员");
}
RiskTask updateTask = new RiskTask();
updateTask.setId(task.getId());
@ -167,6 +170,7 @@ public class PointServiceImpl implements PointService {
}
List<RiskModelTaskClue> oldList = Optional.ofNullable(personMap.get(ry.getSfzh())).orElse(new ArrayList<>());
Map<String, RiskModelTaskClue> oldClue = oldList.stream().collect(Collectors.toMap(RiskModelTaskClue::getCaseIds, Function.identity(), (val, old) -> val));
codes = codes.stream().distinct().toList();
for (String index : codes) {
WdpcGrjdZblx zblx = map.get(index);
if(oldClue.get(index) != null || zblx == null) {
@ -190,7 +194,7 @@ public class PointServiceImpl implements PointService {
}
if (!toInsert.isEmpty()) {
log.info("保存重点人员标签 {}", toInsert.size());
modelTaskClueService.saveClues(toInsert, Default.POINT_IG);
modelTaskClueService.saveClues(toInsert, "列管原因");
}
taskRepository.updateTask(task.getId(), toInsert.size(), 0);
}
@ -1126,9 +1130,9 @@ public class PointServiceImpl implements PointService {
.departName(gBaseZDRY.getXzdpcs())
.personId(personal.getId())
.eventTime(LocalDateTime.of(2024, 10, 7, 12, 11, 23))
.sourceData("发现该人员属于重点人员,该人员的管控民警所管控的重点人员达到100人以上\n属于未落实日常管控要求,增加风险分4分")
.sourceData("发现该人员属于重点人员,该人员的管控民警所管控的重点人员达到100人以上\n属于未落实日常管控要求,增加风险分5分")
.build();
toInsert.add(createClue(task.getModelId(), 4, task.getId(), data));
toInsert.add(createClue(task.getModelId(), 5, task.getId(), data));
}
if (!toInsert.isEmpty()) {
log.info("增加特定对象日常管控不到位人员:{}", toInsert.size());
@ -1308,7 +1312,7 @@ public class PointServiceImpl implements PointService {
}
data.setTag(Default.NO_CAR_OIL_BUY);
data.setSourceData("发现该人员属于无车人员,于" + item.getTime() + "在" + item.getCompanyName() + "购买容量为" + item.getNumber() + "L的" + item.getType() + ",用作" + item.getUseTo() + ",风险分增加3分");
data.setSourceData("发现该人员属于无车人员,于" + item.getTime() + "在" + item.getCompanyName() + "购买容量为" + item.getNumber() + "L的" + item.getType() + ",用作" + item.getUseTo() + ",风险分增加5分");
toInsert.add(createClue(task.getModelId(), 5, task.getId(), data));
}
}

41
src/main/java/com/biutag/supervisiondata/service/impl/RiskModelTaskClueServiceImpl.java

@ -4,8 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.biutag.supervisiondata.common.exception.BusinessException;
import com.biutag.supervisiondata.common.response.StatusCode;
import com.biutag.supervisiondata.mapper.mine.ModelMapper;
import com.biutag.supervisiondata.mapper.mine.RiskModelTaskClueMapper;
import com.biutag.supervisiondata.mapper.mine.RiskScoreRuleMapper;
import com.biutag.supervisiondata.pojo.constants.Default;
import com.biutag.supervisiondata.pojo.domain.ScoreRule;
import com.biutag.supervisiondata.pojo.entity.mine.Model;
import com.biutag.supervisiondata.pojo.entity.mine.RiskModelTaskClue;
import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalControlRecord;
import com.biutag.supervisiondata.pojo.entity.mine.RiskPersonalTag;
@ -19,12 +23,15 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@ -45,6 +52,8 @@ public class RiskModelTaskClueServiceImpl implements RiskModelTaskClueService {
private final RiskModelTaskClueRepository clueRepository;
private final RiskScoreRuleMapper riskScoreRuleMapper;
Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
@ -52,12 +61,16 @@ public class RiskModelTaskClueServiceImpl implements RiskModelTaskClueService {
@Override
public void saveClues(List<RiskModelTaskClue> list, String bigTag) {
List<Integer> modelIds = list.stream().map(RiskModelTaskClue::getModelId).distinct().toList();
List<ScoreRule> rules = riskScoreRuleMapper.selectRuleByModelId(modelIds);
// 赋分规则
Map<Integer, ScoreRule> ruleMap = rules.stream().collect(Collectors.toMap(ScoreRule::getModelId, Function.identity(), (val, old) -> val));
List<List<RiskModelTaskClue>> control = IntStream.range(0, (list.size() + 9999) / 10000)
.mapToObj(i -> list.subList(i * 10000, Math.min((i + 1) * 10000, list.size())))
.collect(Collectors.toList());
for (List<RiskModelTaskClue> record : control) {
try {
batchInsert(record, bigTag);
batchInsert(record, bigTag, ruleMap);
} catch (Exception e) {
log.error("", e);
}
@ -117,18 +130,29 @@ public class RiskModelTaskClueServiceImpl implements RiskModelTaskClueService {
@Override
public void deleteCluesAndDeleteTag(List<RiskModelTaskClue> list, List<String> idCodes, String smallTag) {
clueRepository.updateBatchById(list);
if(!idCodes.isEmpty()) {
if (!idCodes.isEmpty()) {
tagRepository.getBaseMapper().updateToDelete(idCodes, smallTag);
}
}
final String sql = "INSERT INTO risk_model_task_clue(model_id, name, id_code, task_id, source_id, risk_reason, data, score, event_time, create_time, update_time, case_ids) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
final String sql = "INSERT INTO risk_model_task_clue(model_id, name, id_code, task_id, source_id, risk_reason, data, score, score_calc, event_time, create_time, update_time, case_ids) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)";
public void batchInsert(List<RiskModelTaskClue> alliances, String bigTag) {
public void batchInsert(List<RiskModelTaskClue> alliances, String bigTag, Map<Integer, ScoreRule> ruleMap) {
try (Connection connection = getConnection();
PreparedStatement prepareStatement = connection.prepareStatement(sql)) {
connection.setAutoCommit(false);
alliances.stream().forEachOrdered(it -> {
ScoreRule rule = ruleMap.get(it.getModelId());
BigDecimal score = new BigDecimal("0.00");
if (rule == null) {
log.error("没有找到规则");
} else {
score = new BigDecimal(it.getScore().toString());
BigDecimal weight = new BigDecimal(rule.getWeight().toString());
score = score.multiply(new BigDecimal("20"))
.multiply(weight)
.divide(new BigDecimal("100"), 2, RoundingMode.UP);
}
try {
prepareStatement.setObject(1, it.getModelId());
prepareStatement.setObject(2, Optional.ofNullable(it.getName()).orElse(""));
@ -138,10 +162,11 @@ public class RiskModelTaskClueServiceImpl implements RiskModelTaskClueService {
prepareStatement.setObject(6, bigTag);
prepareStatement.setObject(7, Optional.ofNullable(it.getData()).orElse(""));
prepareStatement.setObject(8, Optional.ofNullable(it.getScore()).orElse(0));
prepareStatement.setObject(9, Optional.ofNullable(it.getEventTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null));
prepareStatement.setObject(10, Optional.ofNullable(it.getCreateTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null));
prepareStatement.setObject(11, Optional.ofNullable(it.getUpdateTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null));
prepareStatement.setObject(12, Optional.ofNullable(it.getCaseIds()).orElse(""));
prepareStatement.setObject(9, Optional.ofNullable(score.doubleValue()).orElse(0.00));
prepareStatement.setObject(10, Optional.ofNullable(it.getEventTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null));
prepareStatement.setObject(11, Optional.ofNullable(it.getCreateTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null));
prepareStatement.setObject(12, Optional.ofNullable(it.getUpdateTime()).map(item -> item.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))).orElse(null));
prepareStatement.setObject(13, Optional.ofNullable(it.getCaseIds()).orElse(""));
prepareStatement.addBatch();
} catch (SQLException e) {
log.error("", e);

Loading…
Cancel
Save