|
|
|
|
@ -9,11 +9,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
|
|
|
|
import com.biutag.supervisiondata.mapper.dwd.ModelClueDataMapper; |
|
|
|
|
import com.biutag.supervisiondata.mapper.mine.ModelClueMapper; |
|
|
|
|
import com.biutag.supervisiondata.mapper.wdpc2.ModelClueWdpc2Mapper; |
|
|
|
|
import com.biutag.supervisiondata.pojo.entity.mine.*; |
|
|
|
|
import com.biutag.supervisiondata.repository.*; |
|
|
|
|
import com.biutag.supervisiondata.service.ModelClueService; |
|
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.jetbrains.annotations.NotNull; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
@ -39,10 +41,14 @@ public class ModelClueServiceImpl implements ModelClueService {
|
|
|
|
|
|
|
|
|
|
private final ModelClueRepository modelClueRepository; |
|
|
|
|
|
|
|
|
|
private final ModelGenerationRepository modelGenerationRepository; |
|
|
|
|
|
|
|
|
|
public final ModelClueMapper modelClueMapper; |
|
|
|
|
|
|
|
|
|
public final ModelClueDataMapper modelClueDataMapper; |
|
|
|
|
|
|
|
|
|
public final ModelClueWdpc2Mapper modelClueWdpc2Mapper; |
|
|
|
|
|
|
|
|
|
public final ModelClueRecordRepository modelClueRecordRepository; |
|
|
|
|
|
|
|
|
|
public final SupExternalDepartRepository supExternalDepartRepository; |
|
|
|
|
@ -60,10 +66,12 @@ public class ModelClueServiceImpl implements ModelClueService {
|
|
|
|
|
} |
|
|
|
|
Model model = modelRepository.getById(modelId); |
|
|
|
|
List<ModelClue> modelClues = new ArrayList<>(); |
|
|
|
|
if (!Objects.isNull(model) && model.getModelSql() != null) { |
|
|
|
|
modelClues.addAll(getModelClueBySql(model.getModelSql(), modelId)); |
|
|
|
|
if (!Objects.isNull(model) && model.getModelingMethod().equals("2")) { |
|
|
|
|
modelClues.addAll(getModelClueBySql("customModel", modelId, model)); |
|
|
|
|
} else if (!Objects.isNull(model) && model.getModelSql() != null) { |
|
|
|
|
modelClues.addAll(getModelClueBySql(model.getModelSql(), modelId, null)); |
|
|
|
|
} |
|
|
|
|
System.out.println("模型结果1:" + JSON.toJSONString(modelClues)); |
|
|
|
|
System.out.println("模型结果1数量:" + modelClues.size()); |
|
|
|
|
if (!modelClues.isEmpty()) { |
|
|
|
|
List<ModelClue> result = new ArrayList<>(); |
|
|
|
|
for (ModelClue modelClue : modelClues) { |
|
|
|
|
@ -73,12 +81,33 @@ public class ModelClueServiceImpl implements ModelClueService {
|
|
|
|
|
result.add(modelClue); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
System.out.println("模型结果2:" + JSON.toJSONString(result)); |
|
|
|
|
System.out.println("模型结果2数量:" + modelClues.size()); |
|
|
|
|
modelClueMapper.insert(result); |
|
|
|
|
modelClueRecordRepository.getBaseMapper().insert(new ModelClueRecord().setModelId(modelId).setSize(result.size()).setCreateTime(LocalDateTime.now()).setState("success")); |
|
|
|
|
} else { |
|
|
|
|
modelClueRecordRepository.getBaseMapper().insert(new ModelClueRecord().setModelId(modelId).setSize(0).setCreateTime(LocalDateTime.now()).setState("fail").setErrMsg("数据为空")); |
|
|
|
|
} |
|
|
|
|
model.setLatestRunTime(LocalDateTime.now()); |
|
|
|
|
modelRepository.getBaseMapper().updateById(model); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void generateCustomModels() { |
|
|
|
|
log.info("开始执行自建模型"); |
|
|
|
|
List<Model> customModels = modelRepository.getBaseMapper().selectList(Wrappers.<Model>lambdaQuery().eq(Model::getModelingMethod, "2")); |
|
|
|
|
if (customModels.isEmpty()) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
for (Model model : customModels) { |
|
|
|
|
if (model.getClueCycleDayOfWeek() != null |
|
|
|
|
&& model.getClueCycleDayOfWeek().equals("week") |
|
|
|
|
&& model.getLatestRunTime() != null |
|
|
|
|
&& !model.getLatestRunTime().isBefore(LocalDateTime.now().minusDays(6).with(LocalTime.MIN))) { |
|
|
|
|
log.info("模型{}距上次执行时间未满7天,跳过执行", model.getId()); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
generate(model.getId()); |
|
|
|
|
log.info("自建模型{}执行完毕", model.getId()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void updateDepart() { |
|
|
|
|
@ -97,7 +126,7 @@ public class ModelClueServiceImpl implements ModelClueService {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<ModelClue> getModelClueBySql(String sql, Integer modelId) { |
|
|
|
|
public List<ModelClue> getModelClueBySql(String sql, Integer modelId, Model model) { |
|
|
|
|
List<ModelClue> modelClues = new ArrayList<>(); |
|
|
|
|
if (modelId == 2) { // 2号模型:行政、刑事案件受立案不及时问题监督模型
|
|
|
|
|
return getModelCluesForModel2(sql, modelClues); |
|
|
|
|
@ -130,6 +159,8 @@ public class ModelClueServiceImpl implements ModelClueService {
|
|
|
|
|
} else if (modelId == 105) { // 105号模型:近一月同一人同一类型问题出现3次以上的异常数据
|
|
|
|
|
getModelCluesForModel105(sql, modelClues); |
|
|
|
|
return modelClues; |
|
|
|
|
} else if (sql.equals("customModel") && model != null) { |
|
|
|
|
return getCustomModelClues(modelId, model, modelClues); |
|
|
|
|
} else { |
|
|
|
|
System.out.println("模型" + modelId + "开始查询数据库"); |
|
|
|
|
modelClues = modelClueDataMapper.selectDataByDynamicSql(sql); |
|
|
|
|
@ -194,6 +225,77 @@ public class ModelClueServiceImpl implements ModelClueService {
|
|
|
|
|
return needsInsertModelClues; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private @NotNull List<ModelClue> getCustomModelClues(Integer modelId, Model model, List<ModelClue> modelClues) { |
|
|
|
|
ModelGeneration modelGeneration = modelGenerationRepository.getOne(new LambdaQueryWrapper<ModelGeneration>().eq(ModelGeneration::getModelId, modelId).last("LIMIT 1")); |
|
|
|
|
String customModelSql = "SELECT * FROM " + model.getClueTableName() + ";"; |
|
|
|
|
System.out.println("自建模型" + modelId + "开始查询数据库"); |
|
|
|
|
List<Map<String, Object>> selectData = modelClueWdpc2Mapper.selectByUniqueKeys(customModelSql); |
|
|
|
|
System.out.println("自建模型" + modelId + "查询数据库完毕,数量为:" + selectData.size()); |
|
|
|
|
for (Map<String, Object> map : selectData) { |
|
|
|
|
String thingDescGeneration = modelGeneration.getThingDescGeneration(); |
|
|
|
|
String[] thingDescGenerationSplit = thingDescGeneration.split("\\^"); |
|
|
|
|
for (int i = 0; i < thingDescGenerationSplit.length; i++) { |
|
|
|
|
for (Map.Entry<String, Object> entry : map.entrySet()) { |
|
|
|
|
if (thingDescGenerationSplit[i].equals(entry.getKey())) { |
|
|
|
|
thingDescGenerationSplit[i] = entry.getValue().toString(); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
thingDescGeneration = String.join("", thingDescGenerationSplit); |
|
|
|
|
SupExternalDepart supExternalDepart = supExternalDepartRepository.getOne(new LambdaQueryWrapper<SupExternalDepart>().eq(SupExternalDepart::getExternalId, Optional.ofNullable(map.get(modelGeneration.getInvolveDepartId())) |
|
|
|
|
.map(Object::toString).orElse("")).eq(SupExternalDepart::getSource, model.getClueDepartSource()).last("LIMIT 1")); |
|
|
|
|
String involveDepartName = ""; |
|
|
|
|
String involveDepartId = ""; |
|
|
|
|
if (supExternalDepart != null && supExternalDepart.getInternalShortName() != null && !supExternalDepart.getInternalShortName().isEmpty()) { |
|
|
|
|
involveDepartName = supExternalDepart.getInternalShortName(); |
|
|
|
|
involveDepartId = supExternalDepart.getInternalId(); |
|
|
|
|
} |
|
|
|
|
String involvePoliceName = ""; |
|
|
|
|
String involvePoliceEmpNo = ""; |
|
|
|
|
if (modelGeneration.getInvolvePoliceName() != null) { |
|
|
|
|
involvePoliceName = Optional.ofNullable(map.get(modelGeneration.getInvolvePoliceName())) |
|
|
|
|
.map(Object::toString).orElse(""); } |
|
|
|
|
if (modelGeneration.getInvolvePoliceEmpNo() != null) { |
|
|
|
|
involvePoliceEmpNo = Optional.ofNullable(map.get(modelGeneration.getInvolvePoliceEmpNo())) |
|
|
|
|
.map(Object::toString).orElse(""); |
|
|
|
|
} |
|
|
|
|
modelClues.add(new ModelClue() |
|
|
|
|
.setModelId(modelId) |
|
|
|
|
.setInvolveDepartName(involveDepartName) |
|
|
|
|
.setInvolveDepartId(involveDepartId) |
|
|
|
|
.setInvolvePoliceName(involvePoliceName) |
|
|
|
|
.setInvolvePoliceEmpNo(involvePoliceEmpNo) |
|
|
|
|
.setThingDesc(thingDescGeneration) |
|
|
|
|
.setData(JSONObject.toJSONString(map)) |
|
|
|
|
.setDistributionState("0") |
|
|
|
|
.setUniqueKey(map.get(model.getClueUniqueFieldName()).toString()) |
|
|
|
|
.setNegativeIdEx(map.get(model.getClueUniqueFieldName()).toString()) |
|
|
|
|
.setCreateTime(LocalDateTime.now()).setUpdateTime(LocalDateTime.now())); |
|
|
|
|
} |
|
|
|
|
System.out.println("自建模型" + modelId + "的modelClues数量为:" + modelClues.size()); |
|
|
|
|
List<String> uniqueKeys = modelClues.stream().map(ModelClue::getUniqueKey).filter(k -> k != null && !k.isEmpty()).toList(); |
|
|
|
|
List<String> oldUniqueKeys = modelClueRepository.listObjs(new LambdaQueryWrapper<ModelClue>().select(ModelClue::getUniqueKey).ne(ModelClue::getDistributionState, "2").eq(ModelClue::getModelId, modelId), String::valueOf); |
|
|
|
|
List<String> changeStatusIds = oldUniqueKeys.stream().filter(item -> !uniqueKeys.contains(item)).toList(); |
|
|
|
|
if (!changeStatusIds.isEmpty()) { |
|
|
|
|
modelClueMapper.update(null, new LambdaUpdateWrapper<ModelClue>().in(ModelClue::getUniqueKey, changeStatusIds).set(ModelClue::getDistributionState, "2")); |
|
|
|
|
} |
|
|
|
|
List<String> needsInsertIds = new ArrayList<>(); |
|
|
|
|
for (String uniqueKey : uniqueKeys) { |
|
|
|
|
if (oldUniqueKeys.isEmpty()) { |
|
|
|
|
needsInsertIds.addAll(uniqueKeys); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
if (!oldUniqueKeys.contains(uniqueKey)) { |
|
|
|
|
needsInsertIds.add(uniqueKey); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (needsInsertIds.isEmpty()) { |
|
|
|
|
return new ArrayList<>(); |
|
|
|
|
} |
|
|
|
|
return modelClues.stream().filter(item -> needsInsertIds.contains(item.getUniqueKey())).toList(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void getModelCluesForModel7(String param, List<ModelClue> modelClues) { |
|
|
|
|
|
|
|
|
|
// List<Object> jsonStrings = redisTemplate.opsForList().range("call:point", 0, -1);
|
|
|
|
|
|