diff --git a/src/main/java/com/biutag/supervision/controller/datav/RiskDataController.java b/src/main/java/com/biutag/supervision/controller/datav/RiskDataController.java index 0802146..9b4ba52 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/RiskDataController.java +++ b/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 lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; /** @@ -28,84 +32,208 @@ public class RiskDataController { private final RiskStatisticsService statisticsService; + //数量统计 @GetMapping("/total/statistics") - public Result totalStatistics() { - return Result.success(sourceService.totalStatistics()); + public Result totalStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { + 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") - public Result> areaRiskStatistics(Integer bisType) { - return Result.success(statisticsService.riskStatisticsBigOrg(17)); + public Result> areaRiskStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> riskOrgStatistics() { - return Result.success(statisticsService.riskStatisticsOrg("派出所")); + public Result> riskOrgStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> riskOrgCarStatistics() { - return Result.success(statisticsService.riskStatisticsOrg("交警大队")); + public Result> riskOrgCarStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> riskPoliceAStatistics() { - return Result.success(statisticsService.personStatistics()); + public Result> riskPoliceAStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> riskPoliceBStatistics() { - return Result.success(statisticsService.personStatistics2()); + public Result> riskPoliceBStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> riskLeaderStatistics() { - return Result.success(statisticsService.leaderStatistics()); + public Result> riskLeaderStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> areaNegativeStatistics() { - return Result.success(sourceService.statisticsGroupRank3()); + public Result> areaNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> orgNegativeStatistics() { - return Result.success(sourceService.statisticsGroupRank2()); + public Result> orgNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> orgCarNegativeStatistics() { - return Result.success(sourceService.statisticsGroupRank()); + public Result> orgCarNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> policeANegativeStatistics() { - return Result.success(sourceService.personA()); + public Result> policeANegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> policeBNegativeStatistics() { - return Result.success(sourceService.personB()); + public Result> policeBNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> policeLeaderNegativeStatistics() { - return Result.success(sourceService.leader()); + public Result> policeLeaderNegativeStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> areaRateStatistics() { - return Result.success(sourceService.statisticsGroupRate3()); + public Result> areaRateStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> orgRateStatistics() { - return Result.success(sourceService.statisticsGroupRate2()); + public Result> orgRateStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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") - public Result> orgCarRateStatistics() { - return Result.success(sourceService.statisticsGroupRate()); + public Result> orgCarRateStatistics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, @RequestParam String type) { + 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)); } } diff --git a/src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java b/src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java index 400f8b4..5967a55 100644 --- a/src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/BusinessDepartMapper.java @@ -27,11 +27,11 @@ public interface BusinessDepartMapper extends BaseMapper { @Select(" ") - Integer problemSum(@Param("list") List list, @Param("time") String time); + Integer problemSum(@Param("list") List list, @Param("beginTime") String beginTime, @Param("endTime") String endTime); } diff --git a/src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java b/src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java index c9bb201..a2a9e18 100644 --- a/src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/StatisticsGroupMapper.java @@ -24,4 +24,7 @@ public interface StatisticsGroupMapper extends BaseMapper { " on a.groupId = b.groupId " + " where a.type = '1' order by b.membersCode") List selectGroupMembers(); + + @Select("${newSql}") + List> selectByUniqueKeys(@org.apache.ibatis.annotations.Param("newSql") String newSql); } diff --git a/src/main/java/com/biutag/supervision/service/ProblemSourceService.java b/src/main/java/com/biutag/supervision/service/ProblemSourceService.java index df7f96e..4882b54 100644 --- a/src/main/java/com/biutag/supervision/service/ProblemSourceService.java +++ b/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.vo.BlamePerson; 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.util.CompletableUtils.CompletableFutureUtil; import lombok.AllArgsConstructor; @@ -15,7 +14,6 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.function.Function; @@ -44,19 +42,26 @@ public class ProblemSourceService { * * @return 统计结构 */ - public ProblemSourceStatisticsVo totalStatistics() { + public ProblemSourceStatisticsVo totalStatistics(String beginTime, String endTime) { ProblemSourceStatisticsVo.ProblemSourceStatisticsVoBuilder build = ProblemSourceStatisticsVo.builder(); CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(() -> build.aTotal(businessDepartMapper.problemSum(List.of(1, 2), "2024-01-01 00:00:00"))), - CompletableFutureUtil.runSyncObject(() -> build.caseTotal(businessDepartMapper.problemSum(List.of(4, 5, 6), "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), beginTime+ " 00:00:00", endTime+ " 23:59:59"))), CompletableFutureUtil.runSyncObject(() -> build.negativeTotal(negativeMapper.selectCount(new LambdaQueryWrapper() - .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(); - List list = blameMapper.selectBlameList(); - Long count = list.stream().map(NegativeBlame::getBlameIdCode).distinct().count(); + 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;"; + List> maps = statisticsGroupMapper.selectByUniqueKeys(sql); + Long count = maps.stream().map(m -> m.get("blameIdCode")).distinct().count(); +// List list = blameMapper.selectBlameList(); +// Long count = list.stream().map(NegativeBlame::getBlameIdCode).distinct().count(); build.peopleCount(count.intValue()); ProblemSourceStatisticsVo vo = build.build(); - vo.setAvgPeople(new BigDecimal(vo.getNegativeTotal().toString()).divide(new BigDecimal(vo.getPeopleCount().toString()), 2, RoundingMode.UP).doubleValue()); + 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()); + } return vo; } diff --git a/src/main/java/com/biutag/supervision/service/RiskStatisticsService.java b/src/main/java/com/biutag/supervision/service/RiskStatisticsService.java index d485499..a933b84 100644 --- a/src/main/java/com/biutag/supervision/service/RiskStatisticsService.java +++ b/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.biutag.supervision.mapper.*; -import com.biutag.supervision.pojo.domain.GroupMembers; import com.biutag.supervision.pojo.entity.NegativeBlame; import com.biutag.supervision.pojo.entity.StatisticsGroup; import com.biutag.supervision.pojo.entity.SupDepart; @@ -11,8 +10,10 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -61,45 +62,18 @@ public class RiskStatisticsService { /** * 派出所 - * @param bisType 高业务 17 中业务18低业务19 * @return 列表 */ - public List riskStatisticsBigOrg(Integer bisType) { - List members = statisticsGroupMapper.selectGroupMembers(); - Map> memberMap = members.stream().collect(Collectors.groupingBy(GroupMembers::getGroupId)); - List membersList = memberMap.get(bisType); - Map groupMembersMap = membersList.stream().collect(Collectors.toMap(GroupMembers::getMembersCode, Function.identity(), (oldValue, newValue) -> newValue)); - - StatisticsGroup group = statisticsGroupMapper.selectOne(new LambdaQueryWrapper() - .eq(StatisticsGroup::getName, "派出所").last("limit 1")); - List vo = negativeScoreDepartMapper.statistics(group.getGroupId()); - - List departs = supDepartMapper.selectList(new LambdaQueryWrapper() - .select(SupDepart::getId, SupDepart::getPid, SupDepart::getName, SupDepart::getLevel)); - Map areaMap = departs.stream().collect(Collectors.toMap(SupDepart::getId, Function.identity(), (oldValue, newValue) -> newValue)); - - Map 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); - } + public List riskStatisticsBigOrg(String sql, String type) { + List> maps = statisticsGroupMapper.selectByUniqueKeys(sql); List result = new ArrayList<>(); - for (Map.Entry entry : map.entrySet()) { + for (Map map : maps) { RiskStatisticsVo tmp = new RiskStatisticsVo(); - tmp.setDepartId(entry.getKey()); - tmp.setScore(entry.getValue()); - SupDepart depart = areaMap.get(entry.getKey()); - tmp.setName(depart.getName().replaceFirst("湖南省长沙市公安局", "").replaceFirst("湖南省长沙市", "").replaceFirst("湖南省", "")); + tmp.setLabel(map.get("membersName").toString()); + tmp.setValue((Integer) map.get(type)); result.add(tmp); } - result.sort(Comparator.comparing(RiskStatisticsVo::getScore, Comparator.reverseOrder())); + result.sort(Comparator.comparing(RiskStatisticsVo::getValue, Comparator.reverseOrder())); return result; }