Browse Source

新增灵敏感知大屏

main
sjh 1 year ago
parent
commit
12239cce52
  1. 192
      src/main/java/com/biutag/supervision/controller/datav/RiskDataController.java
  2. 4
      src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java
  3. 3
      src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java
  4. 21
      src/main/java/com/biutag/supervision/service/ProblemSourceService.java
  5. 46
      src/main/java/com/biutag/supervision/service/RiskStatisticsService.java

192
src/main/java/com/biutag/supervision/controller/datav/RiskDataController.java

@ -7,10 +7,14 @@ import com.biutag.supervision.service.ProblemSourceService;
import com.biutag.supervision.service.RiskStatisticsService; import com.biutag.supervision.service.RiskStatisticsService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -28,84 +32,208 @@ public class RiskDataController {
private final RiskStatisticsService statisticsService; private final RiskStatisticsService statisticsService;
//数量统计
@GetMapping("/total/statistics") @GetMapping("/total/statistics")
public Result<ProblemSourceStatisticsVo> totalStatistics() { public Result<ProblemSourceStatisticsVo> totalStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) {
return Result.success(sourceService.totalStatistics()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
return Result.success(sourceService.totalStatistics(beginTimeStr, endTimeStr));
} }
// 分县市局-高业务量
@GetMapping("/area/risk/statistics") @GetMapping("/area/risk/statistics")
public Result<List<RiskStatisticsVo>> areaRiskStatistics(Integer bisType) { public Result<List<RiskStatisticsVo>> areaRiskStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(statisticsService.riskStatisticsBigOrg(17)); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1) AS avgProblemNumber FROM negative_group_members a INNER JOIN sup_depart b ON a.membersCode = b.pid INNER JOIN negative c ON b.id = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 23 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
// 派出所-高业务量
@GetMapping("/risk/org/statistics") @GetMapping("/risk/org/statistics")
public Result<List<RiskStatisticsVo>> riskOrgStatistics() { public Result<List<RiskStatisticsVo>> riskOrgStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(statisticsService.riskStatisticsOrg("派出所")); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1) AS avgProblemNumber FROM negative_group_members a INNER JOIN negative c ON a.membersCode = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 17 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC LIMIT 10;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
// 交警大队-高业务量
@GetMapping("/risk/org/car/statistics") @GetMapping("/risk/org/car/statistics")
public Result<List<RiskStatisticsVo>> riskOrgCarStatistics() { public Result<List<RiskStatisticsVo>> riskOrgCarStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(statisticsService.riskStatisticsOrg("交警大队")); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1) AS avgProblemNumber FROM negative_group_members a INNER JOIN negative c ON a.membersCode = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 20 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC LIMIT 10;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
@GetMapping("/risk/police/a/statistics") @GetMapping("/risk/police/a/statistics")
public Result<List<RiskStatisticsVo>> riskPoliceAStatistics() { public Result<List<RiskStatisticsVo>> riskPoliceAStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(statisticsService.personStatistics()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "";
if (type.equals("paichusuo")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, b.businessNumber, IF(b.businessNumber = 0, 0, ROUND((COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1) / b.businessNumber * 100, 1)) AS avgProblemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL INNER JOIN (SELECT id_code, SUM(number) AS businessNumber FROM business_police WHERE group_id = 10 GROUP BY id_code) b ON d.blameIdCode = b.id_code WHERE groupId = 10 AND d.ivPersonTypeCode = 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
} else if (type.equals("jiaojing")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, b.businessNumber, IF(b.businessNumber = 0, 0, ROUND((COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1) / b.businessNumber * 100, 1)) AS avgProblemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL INNER JOIN (SELECT id_code, SUM(number) AS businessNumber FROM business_police WHERE group_id = 11 GROUP BY id_code) b ON d.blameIdCode = b.id_code WHERE groupId = 11 AND d.ivPersonTypeCode = 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
}
return Result.success(statisticsService.riskStatisticsBigOrg(sql, "avgProblemNumber"));
} }
@GetMapping("/risk/police/b/statistics") @GetMapping("/risk/police/b/statistics")
public Result<List<RiskStatisticsVo>> riskPoliceBStatistics() { public Result<List<RiskStatisticsVo>> riskPoliceBStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(statisticsService.personStatistics2()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "";
if (type.equals("paichusuo")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 10 AND d.ivPersonTypeCode != 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
} else if (type.equals("jiaojing")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 11 AND d.ivPersonTypeCode != 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
}
return Result.success(statisticsService.riskStatisticsBigOrg(sql, "problemNumber"));
} }
@GetMapping("/risk/leader/statistics") @GetMapping("/risk/leader/statistics")
public Result<List<RiskStatisticsVo>> riskLeaderStatistics() { public Result<List<RiskStatisticsVo>> riskLeaderStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(statisticsService.leaderStatistics()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "";
if (type.equals("paichusuo")) {
sql = "SELECT d.leadIdCode, d.leadName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS cluePersonNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, d.blameIdCode, 0)) - 1 AS problemPersonNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 10 AND d.leadIdCode IS NOT NULL AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.leadIdCode, d.leadName ORDER BY cluePersonNumber DESC LIMIT 10;";
} else if (type.equals("jiaojing")) {
sql = "SELECT d.leadIdCode, d.leadName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS cluePersonNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, d.blameIdCode, 0)) - 1 AS problemPersonNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 11 AND d.leadIdCode IS NOT NULL AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.leadIdCode, d.leadName ORDER BY cluePersonNumber DESC LIMIT 10;";
}
return Result.success(statisticsService.riskStatisticsBigOrg(sql, "cluePersonNumber"));
} }
// **********问题数************* // **********问题数*************
// 分县市局-中业务量
@GetMapping("/area/negative/statistics") @GetMapping("/area/negative/statistics")
public Result<List<RiskStatisticsVo>> areaNegativeStatistics() { public Result<List<RiskStatisticsVo>> areaNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.statisticsGroupRank3()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1) AS avgProblemNumber FROM negative_group_members a INNER JOIN sup_depart b ON a.membersCode = b.pid INNER JOIN negative c ON b.id = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 24 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
// 派出所-中业务量
@GetMapping("/org/negative/statistics") @GetMapping("/org/negative/statistics")
public Result<List<RiskStatisticsVo>> orgNegativeStatistics() { public Result<List<RiskStatisticsVo>> orgNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.statisticsGroupRank2()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1) AS avgProblemNumber FROM negative_group_members a INNER JOIN negative c ON a.membersCode = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 18 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC LIMIT 10;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
// 交警大队-中业务量
@GetMapping("/org/car/negative/statistics") @GetMapping("/org/car/negative/statistics")
public Result<List<RiskStatisticsVo>> orgCarNegativeStatistics() { public Result<List<RiskStatisticsVo>> orgCarNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.statisticsGroupRank()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1) AS avgProblemNumber FROM negative_group_members a INNER JOIN negative c ON a.membersCode = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 21 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC LIMIT 10;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
@GetMapping("/police/a/negative/statistics") @GetMapping("/police/a/negative/statistics")
public Result<List<RiskStatisticsVo>> policeANegativeStatistics() { public Result<List<RiskStatisticsVo>> policeANegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.personA()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "";
if (type.equals("paichusuo")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, b.businessNumber, IF(b.businessNumber = 0, 0, ROUND((COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1) / b.businessNumber * 100, 1)) AS avgProblemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL INNER JOIN (SELECT id_code, SUM(number) AS businessNumber FROM business_police WHERE group_id = 10 GROUP BY id_code) b ON d.blameIdCode = b.id_code WHERE groupId = 10 AND d.ivPersonTypeCode = 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
} else if (type.equals("jiaojing")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, b.businessNumber, IF(b.businessNumber = 0, 0, ROUND((COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1) / b.businessNumber * 100, 1)) AS avgProblemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL INNER JOIN (SELECT id_code, SUM(number) AS businessNumber FROM business_police WHERE group_id = 11 GROUP BY id_code) b ON d.blameIdCode = b.id_code WHERE groupId = 11 AND d.ivPersonTypeCode = 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
}
return Result.success(statisticsService.riskStatisticsBigOrg(sql, "problemNumber"));
} }
@GetMapping("/police/b/negative/statistics") @GetMapping("/police/b/negative/statistics")
public Result<List<RiskStatisticsVo>> policeBNegativeStatistics() { public Result<List<RiskStatisticsVo>> policeBNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.personB()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "";
if (type.equals("paichusuo")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 10 AND d.ivPersonTypeCode != 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
} else if (type.equals("jiaojing")) {
sql = "SELECT d.blameIdCode, d.blameName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 11 AND d.ivPersonTypeCode != 1 AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.blameIdCode, blameName ORDER BY problemNumber DESC LIMIT 10;";
}
return Result.success(statisticsService.riskStatisticsBigOrg(sql, "problemNumber"));
} }
@GetMapping("/police/leader/negative/statistics") @GetMapping("/police/leader/negative/statistics")
public Result<List<RiskStatisticsVo>> policeLeaderNegativeStatistics() { public Result<List<RiskStatisticsVo>> policeLeaderNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.leader()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "";
if (type.equals("paichusuo")) {
sql = "SELECT d.leadIdCode, d.leadName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS cluePersonNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, d.blameIdCode, 0)) - 1 AS problemPersonNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 10 AND d.leadIdCode IS NOT NULL AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.leadIdCode, d.leadName ORDER BY cluePersonNumber DESC LIMIT 10;";
} else if (type.equals("jiaojing")) {
sql = "SELECT d.leadIdCode, d.leadName membersName, COUNT(DISTINCT c.id) AS clueNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, c.id, 0)) - 1 AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS cluePersonNumber, COUNT(DISTINCT IF(c.checkStatus = 1 OR c.checkStatus = 2, d.blameIdCode, 0)) - 1 AS problemPersonNumber FROM statistics_depart a INNER JOIN negative c ON a.departId = c.involveDepartId INNER JOIN negative_blame d ON c.id = d.negativeId AND d.blameIdCode IS NOT NULL WHERE groupId = 11 AND d.leadIdCode IS NOT NULL AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY d.leadIdCode, d.leadName ORDER BY cluePersonNumber DESC LIMIT 10;";
}
return Result.success(statisticsService.riskStatisticsBigOrg(sql, "problemNumber"));
} }
// **********问题率************* // **********问题率*************
// 分县市局-低业务量
@GetMapping("/area/rate/statistics") @GetMapping("/area/rate/statistics")
public Result<List<RiskStatisticsVo>> areaRateStatistics() { public Result<List<RiskStatisticsVo>> areaRateStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.statisticsGroupRate3()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1) AS avgProblemNumber FROM negative_group_members a INNER JOIN sup_depart b ON a.membersCode = b.pid INNER JOIN negative c ON b.id = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 25 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
// 派出所-低业务量
@GetMapping("/org/rate/statistics") @GetMapping("/org/rate/statistics")
public Result<List<RiskStatisticsVo>> orgRateStatistics() { public Result<List<RiskStatisticsVo>> orgRateStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.statisticsGroupRate2()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, IF(COUNT(DISTINCT d.blameIdCode) = 0, 0, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1)) AS avgProblemNumber FROM negative_group_members a INNER JOIN negative c ON a.membersCode = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 19 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC LIMIT 10;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
// 交警大队-低业务量
@GetMapping("/org/car/rate/statistics") @GetMapping("/org/car/rate/statistics")
public Result<List<RiskStatisticsVo>> orgCarRateStatistics() { public Result<List<RiskStatisticsVo>> orgCarRateStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) {
return Result.success(sourceService.statisticsGroupRate()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String beginTimeStr = dateFormat.format(beginTime);
String endTimeStr = dateFormat.format(endTime);
String sql = "SELECT a.membersCode, a.membersName, COUNT(DISTINCT c.id) AS problemNumber, COUNT(DISTINCT d.blameIdCode) AS personNumber, IF(COUNT(DISTINCT d.blameIdCode) = 0, 0, ROUND(COUNT(DISTINCT c.id) / COUNT(DISTINCT d.blameIdCode), 1)) AS avgProblemNumber FROM negative_group_members a INNER JOIN negative c ON a.membersCode = c.involveDepartId LEFT JOIN negative_blame d ON c.id = d.negativeId WHERE groupId = 22 AND checkStatus IN (1, 2) AND c.discoveryTime BETWEEN '"
+ beginTimeStr + " 00:00:00' AND '" + endTimeStr + " 23:59:59' GROUP BY a.membersCode, a.membersName ORDER BY problemNumber DESC LIMIT 10;";
return Result.success(statisticsService.riskStatisticsBigOrg(sql, type));
} }
} }

4
src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java

@ -27,11 +27,11 @@ public interface BusinessDepartMapper extends BaseMapper<BusinessDepart> {
@Select(" <script> " + @Select(" <script> " +
" select sum(number) from business_depart " + " select sum(number) from business_depart " +
" where date >= #{time} and business_type in (" + " where (date between #{beginTime} and #{endTime}) and business_type in (" +
" <foreach collection='list' separator=',' item='item'> " + " <foreach collection='list' separator=',' item='item'> " +
" #{item} " + " #{item} " +
" </foreach> " + " </foreach> " +
" ) "+ " ) "+
" </script> ") " </script> ")
Integer problemSum(@Param("list") List<Integer> list, @Param("time") String time); Integer problemSum(@Param("list") List<Integer> list, @Param("beginTime") String beginTime, @Param("endTime") String endTime);
} }

3
src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java

@ -24,4 +24,7 @@ public interface StatisticsGroupMapper extends BaseMapper<StatisticsGroup> {
" on a.groupId = b.groupId " + " on a.groupId = b.groupId " +
" where a.type = '1' order by b.membersCode") " where a.type = '1' order by b.membersCode")
List<GroupMembers> selectGroupMembers(); List<GroupMembers> selectGroupMembers();
@Select("${newSql}")
List<Map<String, Object>> selectByUniqueKeys(@org.apache.ibatis.annotations.Param("newSql") String newSql);
} }

21
src/main/java/com/biutag/supervision/service/ProblemSourceService.java

@ -5,7 +5,6 @@ import com.biutag.supervision.mapper.*;
import com.biutag.supervision.pojo.entity.*; import com.biutag.supervision.pojo.entity.*;
import com.biutag.supervision.pojo.vo.BlamePerson; import com.biutag.supervision.pojo.vo.BlamePerson;
import com.biutag.supervision.pojo.vo.ProblemSourceStatisticsVo; import com.biutag.supervision.pojo.vo.ProblemSourceStatisticsVo;
import com.biutag.supervision.pojo.vo.ProblemSourceVo;
import com.biutag.supervision.pojo.vo.RiskStatisticsVo; import com.biutag.supervision.pojo.vo.RiskStatisticsVo;
import com.biutag.supervision.util.CompletableUtils.CompletableFutureUtil; import com.biutag.supervision.util.CompletableUtils.CompletableFutureUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -15,7 +14,6 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.function.Function; import java.util.function.Function;
@ -44,19 +42,26 @@ public class ProblemSourceService {
* *
* @return 统计结构 * @return 统计结构
*/ */
public ProblemSourceStatisticsVo totalStatistics() { public ProblemSourceStatisticsVo totalStatistics(String beginTime, String endTime) {
ProblemSourceStatisticsVo.ProblemSourceStatisticsVoBuilder build = ProblemSourceStatisticsVo.builder(); ProblemSourceStatisticsVo.ProblemSourceStatisticsVoBuilder build = ProblemSourceStatisticsVo.builder();
CompletableFuture.allOf( CompletableFuture.allOf(
CompletableFutureUtil.runSyncObject(() -> build.aTotal(businessDepartMapper.problemSum(List.of(1, 2), "2024-01-01 00:00:00"))), CompletableFutureUtil.runSyncObject(() -> build.aTotal(businessDepartMapper.problemSum(List.of(1, 2), beginTime+ " 00:00:00", endTime+ " 23:59:59"))),
CompletableFutureUtil.runSyncObject(() -> build.caseTotal(businessDepartMapper.problemSum(List.of(4, 5, 6), "2024-01-01 00:00:00"))), CompletableFutureUtil.runSyncObject(() -> build.caseTotal(businessDepartMapper.problemSum(List.of(4, 5, 6), beginTime+ " 00:00:00", endTime+ " 23:59:59"))),
CompletableFutureUtil.runSyncObject(() -> build.negativeTotal(negativeMapper.selectCount(new LambdaQueryWrapper<Negative>() CompletableFutureUtil.runSyncObject(() -> build.negativeTotal(negativeMapper.selectCount(new LambdaQueryWrapper<Negative>()
.in(Negative::getCheckStatus, List.of(1, 2)).ge(Negative::getCrtTime, LocalDateTime.of(2024, 1, 1, 0, 0, 0))).intValue())) .in(Negative::getCheckStatus, List.of(1, 2)).ge(Negative::getCrtTime, LocalDateTime.parse(beginTime + "T00:00:00"))).intValue()))
).join(); ).join();
List<NegativeBlame> list = blameMapper.selectBlameList(); String sql = "select blameName, blameIdCode, blameDepartId from `negative_blame` where crtTime BETWEEN '" + beginTime + " 00:00:00' and '" + endTime + " 23:59:59' and blameIdCode is not null and blameDepartId is not null and length(blameIdCode) > 0 and length(blameDepartId) > 0;";
Long count = list.stream().map(NegativeBlame::getBlameIdCode).distinct().count(); List<Map<String, Object>> maps = statisticsGroupMapper.selectByUniqueKeys(sql);
Long count = maps.stream().map(m -> m.get("blameIdCode")).distinct().count();
// List<NegativeBlame> list = blameMapper.selectBlameList();
// Long count = list.stream().map(NegativeBlame::getBlameIdCode).distinct().count();
build.peopleCount(count.intValue()); build.peopleCount(count.intValue());
ProblemSourceStatisticsVo vo = build.build(); ProblemSourceStatisticsVo vo = build.build();
if (vo.getPeopleCount() == 0) {
vo.setAvgPeople(BigDecimal.ZERO.doubleValue());
} else {
vo.setAvgPeople(new BigDecimal(vo.getNegativeTotal().toString()).divide(new BigDecimal(vo.getPeopleCount().toString()), 2, RoundingMode.UP).doubleValue()); vo.setAvgPeople(new BigDecimal(vo.getNegativeTotal().toString()).divide(new BigDecimal(vo.getPeopleCount().toString()), 2, RoundingMode.UP).doubleValue());
}
return vo; return vo;
} }

46
src/main/java/com/biutag/supervision/service/RiskStatisticsService.java

@ -2,7 +2,6 @@ package com.biutag.supervision.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.biutag.supervision.mapper.*; import com.biutag.supervision.mapper.*;
import com.biutag.supervision.pojo.domain.GroupMembers;
import com.biutag.supervision.pojo.entity.NegativeBlame; import com.biutag.supervision.pojo.entity.NegativeBlame;
import com.biutag.supervision.pojo.entity.StatisticsGroup; import com.biutag.supervision.pojo.entity.StatisticsGroup;
import com.biutag.supervision.pojo.entity.SupDepart; import com.biutag.supervision.pojo.entity.SupDepart;
@ -11,8 +10,10 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.util.ArrayList;
import java.util.*; import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -61,45 +62,18 @@ public class RiskStatisticsService {
/** /**
* 派出所 * 派出所
* @param bisType 高业务 17 中业务18低业务19
* @return 列表 * @return 列表
*/ */
public List<RiskStatisticsVo> riskStatisticsBigOrg(Integer bisType) { public List<RiskStatisticsVo> riskStatisticsBigOrg(String sql, String type) {
List<GroupMembers> members = statisticsGroupMapper.selectGroupMembers(); List<Map<String, Object>> maps = statisticsGroupMapper.selectByUniqueKeys(sql);
Map<String, List<GroupMembers>> memberMap = members.stream().collect(Collectors.groupingBy(GroupMembers::getGroupId));
List<GroupMembers> membersList = memberMap.get(bisType);
Map<String, GroupMembers> groupMembersMap = membersList.stream().collect(Collectors.toMap(GroupMembers::getMembersCode, Function.identity(), (oldValue, newValue) -> newValue));
StatisticsGroup group = statisticsGroupMapper.selectOne(new LambdaQueryWrapper<StatisticsGroup>()
.eq(StatisticsGroup::getName, "派出所").last("limit 1"));
List<RiskStatisticsVo> vo = negativeScoreDepartMapper.statistics(group.getGroupId());
List<SupDepart> departs = supDepartMapper.selectList(new LambdaQueryWrapper<SupDepart>()
.select(SupDepart::getId, SupDepart::getPid, SupDepart::getName, SupDepart::getLevel));
Map<String, SupDepart> areaMap = departs.stream().collect(Collectors.toMap(SupDepart::getId, Function.identity(), (oldValue, newValue) -> newValue));
Map<String, Double> map = new HashMap<>();
for (RiskStatisticsVo depart : vo) {
SupDepart department = areaMap.get(depart.getDepartId());
if(department == null) {
log.info("统计未找到该id的机构:{}", depart.getDepartId());
continue;
}
SupDepart area = areaMap.get(department.getPid());
Double score = Optional.ofNullable(map.get(area.getId())).orElse(0.0);
score += depart.getScore();
map.put(area.getId(), score);
}
List<RiskStatisticsVo> result = new ArrayList<>(); List<RiskStatisticsVo> result = new ArrayList<>();
for (Map.Entry<String, Double> entry : map.entrySet()) { for (Map<String, Object> map : maps) {
RiskStatisticsVo tmp = new RiskStatisticsVo(); RiskStatisticsVo tmp = new RiskStatisticsVo();
tmp.setDepartId(entry.getKey()); tmp.setLabel(map.get("membersName").toString());
tmp.setScore(entry.getValue()); tmp.setValue((Integer) map.get(type));
SupDepart depart = areaMap.get(entry.getKey());
tmp.setName(depart.getName().replaceFirst("湖南省长沙市公安局", "").replaceFirst("湖南省长沙市", "").replaceFirst("湖南省", ""));
result.add(tmp); result.add(tmp);
} }
result.sort(Comparator.comparing(RiskStatisticsVo::getScore, Comparator.reverseOrder())); result.sort(Comparator.comparing(RiskStatisticsVo::getValue, Comparator.reverseOrder()));
return result; return result;
} }

Loading…
Cancel
Save