Browse Source

设置模型定时任务

master
sjh 1 year ago
parent
commit
49f18d04db
  1. 2
      src/main/java/com/biutag/supervisiondata/config/db/Dm.java
  2. 12
      src/main/java/com/biutag/supervisiondata/rest/ApiController.java
  3. 1
      src/main/java/com/biutag/supervisiondata/service/ModelClueService.java
  4. 63
      src/main/java/com/biutag/supervisiondata/service/impl/ModelClueServiceImpl.java
  5. 12
      src/main/java/com/biutag/supervisiondata/task/TaskService.java

2
src/main/java/com/biutag/supervisiondata/config/db/Dm.java

@ -40,8 +40,6 @@ public class Dm {
final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean(); final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
sessionFactory.setPlugins(mybatisPlusInterceptor); sessionFactory.setPlugins(mybatisPlusInterceptor);
sessionFactory.setDataSource(mysqlDataSource); sessionFactory.setDataSource(mysqlDataSource);
// PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/dm/*Mapper.xml"));
GlobalConfig globalConfig = GlobalConfigUtils.defaults(); GlobalConfig globalConfig = GlobalConfigUtils.defaults();
sessionFactory.setGlobalConfig(globalConfig); sessionFactory.setGlobalConfig(globalConfig);
return sessionFactory.getObject(); return sessionFactory.getObject();

12
src/main/java/com/biutag/supervisiondata/rest/ApiController.java

@ -3,10 +3,12 @@ package com.biutag.supervisiondata.rest;
import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil; import com.biutag.supervisiondata.common.interfaces.CompletableFutureUtil;
import com.biutag.supervisiondata.common.response.RS; import com.biutag.supervisiondata.common.response.RS;
import com.biutag.supervisiondata.lock.LocalLock; import com.biutag.supervisiondata.lock.LocalLock;
import com.biutag.supervisiondata.service.ModelClueService;
import com.biutag.supervisiondata.service.RiskScoreRuleService; import com.biutag.supervisiondata.service.RiskScoreRuleService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -26,6 +28,8 @@ public class ApiController {
private final RiskScoreRuleService riskScoreRuleService; private final RiskScoreRuleService riskScoreRuleService;
private final ModelClueService modelClueService;
@GetMapping("/score") @GetMapping("/score")
public RS<Void> score(String idCodes) { public RS<Void> score(String idCodes) {
if(LocalLock.scoreLock){ if(LocalLock.scoreLock){
@ -48,4 +52,12 @@ public class ApiController {
}); });
return RS.success(); return RS.success();
} }
@GetMapping("/model/{modelId}")
public RS<Void> score(@PathVariable Integer modelId) {
System.out.println("开始执行模型" + modelId);
modelClueService.generate(modelId);
System.out.println("模型" + modelId + "执行完毕");
return RS.success();
}
} }

1
src/main/java/com/biutag/supervisiondata/service/ModelClueService.java

@ -1,4 +1,5 @@
package com.biutag.supervisiondata.service; package com.biutag.supervisiondata.service;
public interface ModelClueService { public interface ModelClueService {
void generate(Integer modelId);
} }

63
src/main/java/com/biutag/supervisiondata/service/impl/ModelClueServiceImpl.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.dwd.ModelClueDataMapper;
import com.biutag.supervisiondata.mapper.mine.ModelClueMapper; import com.biutag.supervisiondata.mapper.mine.ModelClueMapper;
import com.biutag.supervisiondata.pojo.entity.mine.*; import com.biutag.supervisiondata.pojo.entity.mine.*;
@ -100,10 +101,10 @@ public class ModelClueServiceImpl implements ModelClueService {
List<ModelClue> modelClues = new ArrayList<>(); List<ModelClue> modelClues = new ArrayList<>();
if (modelId == 2) { // 2号模型:行政、刑事案件受立案不及时问题监督模型 if (modelId == 2) { // 2号模型:行政、刑事案件受立案不及时问题监督模型
return getModelCluesForModel2(sql, modelClues); return getModelCluesForModel2(sql, modelClues);
} else if (modelId == 4) { // 4号模型:疑似漏登执法办案场所问题监督模型 // } else if (modelId == 4) { // 4号模型:疑似漏登执法办案场所问题监督模型
return getModelCluesForModel4(sql, modelClues); // return getModelCluesForModel4(sql, modelClues);
} else if (modelId == 5) { // 5号模型:重点人员重复报警监督模型 } else if (modelId == 7) { // 7号模型:重点人员重复报警监督模型
getModelCluesForModel5(sql, modelClues); getModelCluesForModel7(sql, modelClues);
return modelClues; return modelClues;
} else if (modelId == 16) { // 16号模型:多次取保的异常数据 } else if (modelId == 16) { // 16号模型:多次取保的异常数据
getModelCluesForModel16(sql, modelClues); getModelCluesForModel16(sql, modelClues);
@ -117,16 +118,18 @@ public class ModelClueServiceImpl implements ModelClueService {
} else if (modelId == 22) { // 22号模型:执法记录仪使用不规范问题 } else if (modelId == 22) { // 22号模型:执法记录仪使用不规范问题
getModelCluesForModel22(sql, modelClues); getModelCluesForModel22(sql, modelClues);
return modelClues; return modelClues;
} else if (modelId == 23) { // 23号模型:保安员预警
modelClueDataMapper.delete(Wrappers.<ModelClue>lambdaUpdate().eq(ModelClue::getModelId, 23));
} else if (modelId == 25) { // 25号模型:重点人员管控人数过多 } else if (modelId == 25) { // 25号模型:重点人员管控人数过多
getModelCluesForModel25(sql, modelClues); getModelCluesForModel25(sql, modelClues);
return modelClues; return modelClues;
} else if (modelId == 103) { // 103号模型:接处警不及时的异常数据 } else if (modelId == 103) { // 103号模型:接处警不及时的异常数据
getModelCluesForModel103(sql, modelClues); getModelCluesForModel103(sql, modelClues);
return modelClues; return modelClues;
} else if (modelId == 104) { // 模型104:大量变更接警性质的预警模型 } else if (modelId == 104) { // 104号模型:大量变更接警性质的预警模型
getModelCluesForModel104(sql, modelClues); getModelCluesForModel104(sql, modelClues);
return modelClues; return modelClues;
} else if (modelId == 105) { // 模型105:近一月同一人同一类型问题出现3次以上的异常数据 } else if (modelId == 105) { // 105号模型:近一月同一人同一类型问题出现3次以上的异常数据
getModelCluesForModel105(sql, modelClues); getModelCluesForModel105(sql, modelClues);
return modelClues; return modelClues;
} else { } else {
@ -186,12 +189,12 @@ public class ModelClueServiceImpl implements ModelClueService {
return needsInsertModelClues; return needsInsertModelClues;
} }
private void getModelCluesForModel5(String param, List<ModelClue> modelClues) { private void getModelCluesForModel7(String param, List<ModelClue> modelClues) {
// List<Object> jsonStrings = redisTemplate.opsForList().range("call:point", 0, -1); // List<Object> jsonStrings = redisTemplate.opsForList().range("call:point", 0, -1);
List<RiskTest> jsonStrings = riskTestRepository.list((Wrapper<RiskTest>) null); List<RiskTest> jsonStrings = riskTestRepository.list((Wrapper<RiskTest>) null);
if (jsonStrings != null) { if (jsonStrings != null) {
System.out.println("获取到的数据条数:" + jsonStrings.size()); System.out.println("模型7获取到的数据条数:" + jsonStrings.size());
try { try {
for (RiskTest json : jsonStrings) { for (RiskTest json : jsonStrings) {
String jsonString = json.getName(); String jsonString = json.getName();
@ -247,7 +250,7 @@ public class ModelClueServiceImpl implements ModelClueService {
modelClues.add(newModelClue); modelClues.add(newModelClue);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("模型5执行失败", e); log.error("模型7执行失败", e);
} }
} else { } else {
System.out.println("Redis未找到key'call:point'"); System.out.println("Redis未找到key'call:point'");
@ -561,11 +564,16 @@ public class ModelClueServiceImpl implements ModelClueService {
return ajbh == null || ajbh.isEmpty() ? "无案件编号数据" : ajbh; return ajbh == null || ajbh.isEmpty() ? "无案件编号数据" : ajbh;
} }
/*
private List<ModelClue> getModelCluesForModel4(String param, List<ModelClue> modelClues) { private List<ModelClue> getModelCluesForModel4(String param, List<ModelClue> modelClues) {
System.out.println("模型4开始查询数据库"); System.out.println("模型4开始查询数据库");
List<String> params = parseSqlForModel2(param); // List<String> params = parseSqlForModel2(param);
String jjdSql = "SELECT gxdwdm AS involve_depart_id, gxdwmc AS involve_depart_name, COUNT(*) AS zjjs FROM dwd_asj_zhtx_jjd WHERE cjsj BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' GROUP BY gxdwdm, gxdwmc;"; // 定时前
String zfqySql = "SELECT csid AS involve_depart_id, COUNT(*) AS zfcsdjs FROM dwd_ry_zfba_zfqywfryb WHERE STR_TO_DATE( djsj, '%Y%m%d%H%i%s' ) BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' GROUP BY csid;"; String jjdSql = "SELECT gxdwdm AS involve_depart_id, gxdwmc AS involve_depart_name, COUNT(*) AS zjjs FROM dwd_asj_zhtx_jjd WHERE cjsj BETWEEN '2024-10-01 00:00:00' AND '2024-11-01 00:00:00' GROUP BY gxdwdm, gxdwmc;";
String zfqySql = "SELECT csid AS involve_depart_id, COUNT(*) AS zfcsdjs FROM dwd_ry_zfba_zfqywfryb WHERE STR_TO_DATE( djsj, '%Y%m%d%H%i%s' ) BETWEEN '2024-10-01 00:00:00' AND '2024-10-01 00:00:00' GROUP BY csid;";
// 定时任务
// String jjdSql = "SELECT gxdwdm AS involve_depart_id, gxdwmc AS involve_depart_name, COUNT(*) AS zjjs FROM dwd_asj_zhtx_jjd WHERE cjsj >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND cjsj < CURDATE() GROUP BY gxdwdm, gxdwmc;";
// String zfqySql = "SELECT csid AS involve_depart_id, COUNT(*) AS zfcsdjs FROM dwd_ry_zfba_zfqywfryb WHERE STR_TO_DATE( djsj, '%Y%m%d%H%i%s' ) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND STR_TO_DATE( djsj, '%Y%m%d%H%i%s' ) < CURDATE() GROUP BY csid;";
List<Map<String, Object>> jjdmaps = modelClueDataMapper.selectByUniqueKeys(jjdSql); List<Map<String, Object>> jjdmaps = modelClueDataMapper.selectByUniqueKeys(jjdSql);
List<Map<String, Object>> zfqymaps = modelClueDataMapper.selectByUniqueKeys(zfqySql); List<Map<String, Object>> zfqymaps = modelClueDataMapper.selectByUniqueKeys(zfqySql);
System.out.println("模型4查询数据库完毕"); System.out.println("模型4查询数据库完毕");
@ -666,7 +674,7 @@ public class ModelClueServiceImpl implements ModelClueService {
modelClues.addAll(jjdModelClues3); modelClues.addAll(jjdModelClues3);
return modelClues; return modelClues;
} }
*/
private void getModelCluesForModel16(String param, List<ModelClue> modelClues) { private void getModelCluesForModel16(String param, List<ModelClue> modelClues) {
System.out.println("模型16开始查询数据库"); System.out.println("模型16开始查询数据库");
List<String> params = parseSqlForModel2(param); List<String> params = parseSqlForModel2(param);
@ -794,7 +802,8 @@ public class ModelClueServiceImpl implements ModelClueService {
private void getModelCluesForModel20(String param, List<ModelClue> modelClues) { private void getModelCluesForModel20(String param, List<ModelClue> modelClues) {
System.out.println("模型20开始查询数据库"); System.out.println("模型20开始查询数据库");
String sql = "select * from dwd_qb_nbgl_lxqtscsygxjl where STR_TO_DATE(tjrq, '%Y-%m-%d') = CURDATE() - INTERVAL " + param + " DAY;"; // 定时任务
String sql = "select * from dwd_qb_nbgl_lxqtscsygxjl where STR_TO_DATE(tjrq, '%Y-%m-%d') = (CURDATE() - INTERVAL 1 DAY);";
List<Map<String, Object>> sqlList = modelClueDataMapper.selectByUniqueKeys(sql); List<Map<String, Object>> sqlList = modelClueDataMapper.selectByUniqueKeys(sql);
System.out.println("模型20查询数据库完毕,结果数量:" + sqlList.size()); System.out.println("模型20查询数据库完毕,结果数量:" + sqlList.size());
if (sqlList.isEmpty()) { if (sqlList.isEmpty()) {
@ -821,8 +830,10 @@ public class ModelClueServiceImpl implements ModelClueService {
} }
} }
private void getModelCluesForModel22(String sql, List<ModelClue> modelClues) { private void getModelCluesForModel22(String param, List<ModelClue> modelClues) {
System.out.println("模型22开始查询数据库"); System.out.println("模型22开始查询数据库");
// 定时任务
String sql = "select * from \"JSDZ_4GDB\".\"v_anomaly_statistics\" where \"CREATETIME\" = " + getSpeDayString(1);
List<Map<String, Object>> sqlList = modelClueDataDMRepository.selectByUniqueKeys(sql); List<Map<String, Object>> sqlList = modelClueDataDMRepository.selectByUniqueKeys(sql);
System.out.println("模型22查询数据库完毕,结果数量:" + sqlList.size()); System.out.println("模型22查询数据库完毕,结果数量:" + sqlList.size());
if (sqlList.isEmpty()) { if (sqlList.isEmpty()) {
@ -900,6 +911,7 @@ public class ModelClueServiceImpl implements ModelClueService {
} }
private void getModelCluesForModel25(String sql, List<ModelClue> modelClues) { private void getModelCluesForModel25(String sql, List<ModelClue> modelClues) {
modelClueDataMapper.delete(Wrappers.<ModelClue>lambdaUpdate().eq(ModelClue::getModelId, 25));
System.out.println("模型25开始查询数据库"); System.out.println("模型25开始查询数据库");
List<Map<String, Object>> sqlList = modelClueDataMapper.selectByUniqueKeys(sql); List<Map<String, Object>> sqlList = modelClueDataMapper.selectByUniqueKeys(sql);
System.out.println("模型25查询数据库完毕,结果数量:" + sqlList.size()); System.out.println("模型25查询数据库完毕,结果数量:" + sqlList.size());
@ -1005,8 +1017,9 @@ public class ModelClueServiceImpl implements ModelClueService {
private void getModelCluesForModel104(String param, List<ModelClue> modelClues) { private void getModelCluesForModel104(String param, List<ModelClue> modelClues) {
System.out.println("模型104开始查询数据库"); System.out.println("模型104开始查询数据库");
List<String> params = parseSqlForModel2(param); // List<String> params = parseSqlForModel2(param);
String sql = "select a.gxdwdm, a.gxdwmc, a.num anum, b.num bnum from ((SELECT gxdwdm, gxdwmc, COUNT(*) AS num from dwd_asj_zhtx_jjd where bjsj BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' AND (ysjqxzdm LIKE '01%' OR ysjqxzdm LIKE'02%' OR ysjqxzdm LIKE'06%') AND (bjxldm NOT LIKE '01%' AND bjxldm NOT LIKE '02%' AND bjxldm NOT LIKE '06%') and bjfsdm = '0101' GROUP BY gxdwdm, gxdwmc) a join (SELECT gxdwdm, gxdwmc, COUNT(*) num from dwd_asj_zhtx_jjd where bjsj BETWEEN '" + params.get(0) + " 00:00:00' AND '" + params.get(1) + " 00:00:00' AND (ysjqxzdm LIKE '01%' OR ysjqxzdm LIKE'02%' OR ysjqxzdm LIKE'06%') and bjfsdm = '0101' GROUP BY gxdwdm, gxdwmc) b on a.gxdwdm = b.gxdwdm);"; // 定时任务
String sql = "select a.gxdwdm, a.gxdwmc, a.num anum, b.num bnum from ((SELECT gxdwdm, gxdwmc, COUNT(*) AS num from dwd_asj_zhtx_jjd where (bjsj >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND bjsj < CURDATE()) AND (ysjqxzdm LIKE '01%' OR ysjqxzdm LIKE'02%' OR ysjqxzdm LIKE'06%') AND (bjxldm NOT LIKE '01%' AND bjxldm NOT LIKE '02%' AND bjxldm NOT LIKE '06%') and bjfsdm = '0101' GROUP BY gxdwdm, gxdwmc) a join (SELECT gxdwdm, gxdwmc, COUNT(*) num from dwd_asj_zhtx_jjd where (bjsj >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND bjsj < CURDATE()) AND (ysjqxzdm LIKE '01%' OR ysjqxzdm LIKE'02%' OR ysjqxzdm LIKE'06%') and bjfsdm = '0101' GROUP BY gxdwdm, gxdwmc) b on a.gxdwdm = b.gxdwdm);";
List<Map<String, Object>> jjdmaps = modelClueDataMapper.selectByUniqueKeys(sql); List<Map<String, Object>> jjdmaps = modelClueDataMapper.selectByUniqueKeys(sql);
System.out.println("模型104查询数据库完毕,结果数量:" + jjdmaps.size()); System.out.println("模型104查询数据库完毕,结果数量:" + jjdmaps.size());
if (jjdmaps.isEmpty()) { if (jjdmaps.isEmpty()) {
@ -1068,7 +1081,7 @@ public class ModelClueServiceImpl implements ModelClueService {
} }
newModelClue.setDistributionState("0"); newModelClue.setDistributionState("0");
newModelClue.setThingDesc("发现" + newModelClue.getInvolveDepartName() newModelClue.setThingDesc("发现" + newModelClue.getInvolveDepartName()
+ "在" + getDateString(params.get(0)) + "到" + getDateString(params.get(1)) + "在" + getDateString(getSpeDayString(30)) + "到" + getDateString(getTodayString())
+ "之间共有" + departAllNumMap.get(department) + "个警情,变更了" + departNumMap.get(department) + "之间共有" + departAllNumMap.get(department) + "个警情,变更了" + departNumMap.get(department)
+ "个警情的结警性质,超过了该单位总警情的70%,存在大量变更接警性质的异常情况。"); + "个警情的结警性质,超过了该单位总警情的70%,存在大量变更接警性质的异常情况。");
newModelClue.setData(newModelClue.getThingDesc()); newModelClue.setData(newModelClue.getThingDesc());
@ -1077,6 +1090,7 @@ public class ModelClueServiceImpl implements ModelClueService {
} }
private void getModelCluesForModel105(String sql, List<ModelClue> modelClues) { private void getModelCluesForModel105(String sql, List<ModelClue> modelClues) {
modelClueDataMapper.delete(Wrappers.<ModelClue>lambdaUpdate().eq(ModelClue::getModelId, 105));
System.out.println("模型105开始查询数据库"); System.out.println("模型105开始查询数据库");
List<Map<String, Object>> sqlList = modelClueMapper.selectByUniqueKeys(sql); List<Map<String, Object>> sqlList = modelClueMapper.selectByUniqueKeys(sql);
System.out.println("模型105查询数据库完毕,结果数量:" + sqlList.size()); System.out.println("模型105查询数据库完毕,结果数量:" + sqlList.size());
@ -1240,6 +1254,19 @@ public class ModelClueServiceImpl implements ModelClueService {
} }
} }
private static String getSpeDayString(int days) {
LocalDate today = LocalDate.now();
LocalDate result = today.minusDays(days);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
return result.format(formatter);
}
private static String getTodayString() {
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return today.format(formatter);
}
private static String getDateMinuteString(Object param) { private static String getDateMinuteString(Object param) {
if (param != null) { if (param != null) {
String time = null; String time = null;

12
src/main/java/com/biutag/supervisiondata/task/TaskService.java

@ -1,5 +1,7 @@
package com.biutag.supervisiondata.task; package com.biutag.supervisiondata.task;
import com.biutag.supervisiondata.service.ModelClueService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -12,11 +14,21 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
@Slf4j @Slf4j
@AllArgsConstructor
public class TaskService { public class TaskService {
private final ModelClueService modelClueService;
@Scheduled(cron = "0 0/10 * * * ?") @Scheduled(cron = "0 0/10 * * * ?")
public void ageModel() { public void ageModel() {
} }
@Scheduled(cron = "* * 3 * * *")
public void runModel() {
System.out.println("开始执行模型" + modelId);
modelClueService.generate(modelId);
System.out.println("模型" + modelId + "执行完毕");
}
} }

Loading…
Cancel
Save