Commit 4b3c6535 authored by zhangjianqian's avatar zhangjianqian

入户安检汇总页面和数据对接

parent 83c4657f
......@@ -186,4 +186,24 @@ public class THiddenDangerStandingBookController extends BaseController
public AjaxResult hiddenBookStatistics(TInspectReport report){
return AjaxResult.success(tHiddenDangerStandingBookService.hiddenBookStatistics(report));
}
/**
* 隐患年份统计
* @return
*/
@GetMapping("/hiddenBookYearStatistics")
public AjaxResult hiddenBookYearStatistics(){
return AjaxResult.success(tHiddenDangerStandingBookService.hiddenBookYearStatistics());
}
/**
* 隐患企业统计
* @return
*/
@GetMapping("/hiddenBookqiyeStatistics")
public AjaxResult hiddenBookqiyeStatistics(){
return AjaxResult.success(tHiddenDangerStandingBookService.hiddenBookqiyeStatistics());
}
}
......@@ -111,4 +111,14 @@ public class StatisticController
return AjaxResult.success(map);
}
/**
* 入户安检汇总统计
*/
@GetMapping("/indoorsummary")
public AjaxResult indoorsummary() {
List<Map<String,Object>> list = inspectReportService.selectindoorsummary();
return AjaxResult.success(list);
}
}
......@@ -666,4 +666,14 @@ public class TDetectorUserController extends BaseController
{
return AjaxResult.success(tDetectorUserService.clearImportErrorByEnterpriseId(gasType));
}
/**
* 查询燃气用户列表
*/
@GetMapping("/summaryUser")
public AjaxResult summaryUser()
{
Map<String,Object> map = tDetectorUserService.summaryUser();
return AjaxResult.success(map);
}
}
......@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.zehong.common.utils.StringUtils;
import java.io.UnsupportedEncodingException;
import java.util.regex.Pattern;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
......@@ -158,152 +159,84 @@ public class DESEncoder {
// String skcs1 = "{\"username\":\"skcs1\",\"password\":\"czyj@123\",\"timestamp\":\"2020-07-28 16:22:00\"}";
// System.out.println(DESEncoder.encrypt(skcs1,"23546324"));
// String lpggasdata = "[\n" +
// "\t{\n" +
// "\n" +
// "\t\t\"userOwnId\":\"0001\",\n" +
// "\t\t\"userType\":\"pl\",\n" +
// "\t\t\"controlPlan\":\"方案1\",\n" +
// "\t\t\"updateTime\":\"2024-12-07 15:20:11\",\n" +
// "\t\t\"conStartTime\":\"2024-12-07\",\n" +
// "\t\t\"conEndTime\":\"2024-12-16\",\n" +
// "\t\t\"remark\":\"181111\"\n" +
// "\t},\n" +
// "\t{\n" +
// "\n" +
// "\t\t\"userOwnId\":\"0002\",\n" +
// "\t\t\"userType\":\"pl\",\n" +
// "\t\t\"controlPlan\":\"方案2\",\n" +
// "\t\t\"updateTime\":\"2024-12-07 15:20:12\",\n" +
// "\t\t\"conStartTime\":\"2024-12-08\",\n" +
// "\t\t\"conEndTime\":\"2024-12-17\",\n" +
// "\t\t\"remark\":\"1896\"\n" +
// "\t}\n" +
// "]\n";
// String lpggasdata = "[\n" +
// "\t{\n" +
// "\n" +
// "\t\t\"hiddenTitle\":\"隐患1\",\n" +
// "\t\t\"hiddenContent\":\"内容1\",\n" +
// "\t\t\"hiddenLocation\":\"位置1\",\n" +
// "\t\t\"source\":\"1\",\n" +
// "\t\t\"longitude\":\"120.0000\",\n" +
// "\t\t\"latitude\":\"80.0000\",\n" +
// "\t\t\"hiddenType\":\"1\",\n" +
// "\t\t\"hiddenFindPeople\":\"1的\",\n" +
// "\t\t\"hiddenFindDate\":\"2024-12-07 15:20:11\",\n" +
// "\t\t\"dealResult\":\"结果1\",\n" +
// "\t\t\"remediation\":\"1\",\n" +
// "\t\t\"remark\":\"181111\"\n" +
// "\t},\n" +
// "\t{\n" +
// "\n" +
// "\t\t\"hiddenTitle\":\"隐患2\",\n" +
// "\t\t\"hiddenContent\":\"内容2\",\n" +
// "\t\t\"hiddenLocation\":\"位置2\",\n" +
// "\t\t\"source\":\"2\",\n" +
// "\t\t\"longitude\":\"120.0000\",\n" +
// "\t\t\"latitude\":\"80.0000\",\n" +
// "\t\t\"hiddenType\":\"2\",\n" +
// "\t\t\"hiddenFindPeople\":\"2的\",\n" +
// "\t\t\"hiddenFindDate\":\"2024-12-07 15:20:11\",\n" +
// "\t\t\"dealResult\":\"结果2\",\n" +
// "\t\t\"remediation\":\"2\",\n" +
// "\t\t\"remark\":\"1811112\"\n" +
// "\t}\n" +
// "]\n";
String lpggasdata = "[\n" +
"\t{\n" +
"\t\t\"userOwnId\":\"用户自有编号-接口来的-01\",\n" +
"\t\t\"nickName\":\"用户名称-接口来的-01\",\n" +
"\t\t\"userType\":\"1\",\n" +
"\t\t\"villageId\":\"3\",\n" +
"\t\t\"address\":\"地址-接口来的-01\",\n" +
"\t\t\"longitude\":\"14.56\",\n" +
"\t\t\"latitude\":\"18.96\",\n" +
"\t\t\"linkman\":\"联系人-接口来的-01\",\n" +
"\t\t\"phone\":\"电话-接口来的-01\",\n" +
"\t\t\"remarks\":\"备注-接口来的-01\",\n" +
"\t\t\"safetyDeviceList\":[\n" +
"\t\t\t{\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-01-01\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-01-01\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-01-01\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-01-01\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-01-01\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-20\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-01-01\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-01-01\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-01-01\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-01-02\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-01-02\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-01-02\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-01-02\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-01-02\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-20\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-01-02\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-01-02\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-01-02\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-01-03\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-01-03\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-01-03\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-01-03\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-01-03\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-20\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-01-03\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-01-03\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-01-03\"\n" +
"\t\t\t}\n" +
"\t\t]\n" +
"\t\t\"annual\":\"2025\",\n" +
"\t\t\"securityCodeIn\":\"2025091552468\",\n" +
"\t\t\"securityCode\":\"2025-01\",\n" +
"\t\t\"userOwnId\":\"0001\",\n" +
"\t\t\"userName\":\"张晓丽\",\n" +
"\t\t\"indoorTime\":\"2024-12-07 15:20:11\",\n" +
"\t\t\"indoorStatus\":\"NONE\",\n" +
"\t\t\"houseNumber\":\"\",\n" +
"\t\t\"phoneNumber\":\"18630055555\"\n" +
"\t},\n" +
"\t{\n" +
"\n" +
"\t\t\"userOwnId\":\"用户自有编号-接口来的-02\",\n" +
"\t\t\"nickName\":\"用户名称-接口来的-02\",\n" +
"\t\t\"userType\":\"2\",\n" +
"\t\t\"villageId\":\"\",\n" +
"\t\t\"address\":\"地址-接口来的-02\",\n" +
"\t\t\"longitude\":\"14.56\",\n" +
"\t\t\"latitude\":\"18.96\",\n" +
"\t\t\"linkman\":\"联系人-接口来的-02\",\n" +
"\t\t\"phone\":\"电话-接口来的-02\",\n" +
"\t\t\"remarks\":\"备注-接口来的-02\",\n" +
"\t\t\"safetyDeviceList\":[\n" +
"\t\t\t{\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-02-01\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-02-01\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-02-01\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-02-01\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-02-01\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-21\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-02-01\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-02-01\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-02-01\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-02-02\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-02-02\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-02-02\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-02-02\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-02-02\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-21\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-02-02\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-02-02\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-02-02\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-02-03\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-02-03\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-02-03\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-02-03\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-02-03\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-21\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-02-03\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-02-03\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-02-03\"\n" +
"\t\t\t}\n" +
"\t\t]\n" +
"\t},\n" +
"\t{\n" +
"\n" +
"\t\t\"userOwnId\":\"用户自有编号-接口来的-03\",\n" +
"\t\t\"nickName\":\"用户名称-接口来的-03\",\n" +
"\t\t\"userType\":\"4\",\n" +
"\t\t\"villageId\":\"\",\n" +
"\t\t\"address\":\"地址-接口来的-03\",\n" +
"\t\t\"longitude\":\"14.56\",\n" +
"\t\t\"latitude\":\"18.96\",\n" +
"\t\t\"linkman\":\"联系人-接口来的-03\",\n" +
"\t\t\"phone\":\"电话-接口来的-03\",\n" +
"\t\t\"remarks\":\"备注-接口来的-03\",\n" +
"\t\t\"safetyDeviceList\":[\n" +
"\t\t\t{\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-03-01\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-03-01\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-03-01\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-03-01\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-03-01\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-22\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-03-01\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-03-01\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-03-01\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-03-02\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-03-02\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-03-02\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-03-02\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-03-02\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-22\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-03-02\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-03-02\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-03-02\"\n" +
"\t\t\t},\n" +
"\t\t\t{\n" +
"\n" +
"\t\t\t\t\"fDeviceName\":\"设备名称-接口来的-03-03\",\n" +
"\t\t\t\t\"fDeviceModel\":\"设备型号-接口来的-03-03\",\n" +
"\t\t\t\t\"fIotNo\":\"物联网编号-接口来的-03-03\",\n" +
"\t\t\t\t\"fRelationDeviceType\":\"设备类型-接口来的-03-03\",\n" +
"\t\t\t\t\"fDetectionMedium\":\"探测介质-接口来的-03-03\",\n" +
"\t\t\t\t\"fDeviceInstallTime\":\"2024-09-22\",\n" +
"\t\t\t\t\"fDeviceInstallPosition\":\"设备安装位置-接口来的-03-03\",\n" +
"\t\t\t\t\"fHead\":\"负责人-接口来的-03-03\",\n" +
"\t\t\t\t\"fPhone\":\"联系电话-接口来的-03-03\"\n" +
"\t\t\t}\n" +
"\t\t]\n" +
"\t\t\"annual\":\"2025\",\n" +
"\t\t\"securityCodeIn\":\"202509155254\",\n" +
"\t\t\"securityCode\":\"2025-01\",\n" +
"\t\t\"userOwnId\":\"0002\",\n" +
"\t\t\"userName\":\"李丽\",\n" +
"\t\t\"indoorTime\":\"2024-12-07 15:20:21\",\n" +
"\t\t\"indoorStatus\":\"DONE\",\n" +
"\t\t\"houseNumber\":\"\",\n" +
"\t\t\"phoneNumber\":\"18630055665\"\n" +
"\t}\n" +
"]\n";
JSONArray objects = JSON.parseArray(lpggasdata);
......
......@@ -225,4 +225,10 @@ public interface TDetectorUserMapper
public int clearByBeyondEnterpriseId(@Param("beyondEnterpriseId") String beyondEnterpriseId,
@Param("gasType") String gasType);
/**
* 汇总用户
* @return
*/
public Map<String,Object> summaryUser();
}
......@@ -107,4 +107,16 @@ public interface THiddenDangerStandingBookMapper
*/
Map<String,Integer> hiddenBookStatistics(TInspectReport report);
/**
* 隐患统计年份
* @param nowyear
* @return
*/
List<Map<String,Object>> hiddenBookYearStatistics(int nowyear);
/**
* 企业隐患统计
* @return
*/
List<Map<String,Object>> hiddenBookqiyeStatistics();
}
......@@ -74,4 +74,11 @@ public interface TInspectReportMapper
* @return
*/
public Map<String,Object> selectIndoorStatistic(TInspectReport report);
/**
* 入户安检
* @param report
* @return
*/
public Map<String,Object> selectIndoorSummery(TInspectReport report);
}
......@@ -273,4 +273,10 @@ public interface ITDetectorUserService
* @return r
*/
public int clearImportErrorByEnterpriseId(String code);
/**
* 统计用户数据
* @return
*/
public Map<String,Object> summaryUser();
}
......@@ -104,4 +104,16 @@ public interface ITHiddenDangerStandingBookService
* @return
*/
Map<String,Integer> hiddenBookStatistics(TInspectReport report);
/**
* 隐患年份统计
* @return
*/
Map<String,Object> hiddenBookYearStatistics();
/**
* 隐患企业统计
* @return
*/
Map<String,Object> hiddenBookqiyeStatistics();
}
......@@ -74,4 +74,11 @@ public interface ITInspectReportService
* @return
*/
public Map<String,Object> selectIndoorStatistic(TInspectReport report);
/**
* 入户安检统计
* @return
*/
public List<Map<String,Object>> selectindoorsummary();
}
......@@ -1260,4 +1260,13 @@ public class TDetectorUserServiceImpl implements ITDetectorUserService {
String deptId = loginUser.getUser().getDeptId();
return tDetectorUserMapper.clearByBeyondEnterpriseId(deptId, gasType);
}
/**
* 统计用户
* @return
*/
@Override
public Map<String, Object> summaryUser() {
return tDetectorUserMapper.summaryUser();
}
}
package com.zehong.system.service.impl;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.time.Year;
import java.util.*;
import java.util.stream.Collectors;
import com.zehong.common.core.domain.entity.SysRole;
......@@ -169,6 +170,50 @@ public class THiddenDangerStandingBookServiceImpl implements ITHiddenDangerStand
return tHiddenDangerStandingBookMapper.hiddenBookStatistics(report);
}
/**
* 隐患年份统计
* @return
*/
@Override
public Map<String, Object> hiddenBookYearStatistics() {
Calendar cal = Calendar.getInstance(); // 获取当前时间的Calendar实例
int year = cal.get(Calendar.YEAR); // 获取年份
Map<String,Object> map = new HashMap<>();
List<Integer> yeshidden = new ArrayList<>();
List<Integer> nohidden = new ArrayList<>();
List<Long> yearNum = new ArrayList<>();
List<Map<String,Object>> list =tHiddenDangerStandingBookMapper.hiddenBookYearStatistics(year);
for(Map<String,Object> onemap : list){
yeshidden.add(((BigDecimal)onemap.get("yeshidden")).intValue());
nohidden.add(((BigDecimal)onemap.get("nohidden")).intValue());
yearNum.add((Long) onemap.get("year"));
}
map.put("yeshidden",yeshidden);
map.put("nohidden",nohidden);
map.put("yearNum",yearNum);
return map;
}
@Override
public Map<String, Object> hiddenBookqiyeStatistics() {
Map<String,Object> map = new HashMap<>();
List<Integer> yeshidden = new ArrayList<>();
List<Integer> nohidden = new ArrayList<>();
List<String> enterpriseName = new ArrayList<>();
List<Map<String,Object>> list =tHiddenDangerStandingBookMapper.hiddenBookqiyeStatistics();
for(Map<String,Object> onemap : list){
yeshidden.add(((BigDecimal)onemap.get("yeshidden")).intValue());
nohidden.add(((BigDecimal)onemap.get("nohidden")).intValue());
enterpriseName.add((String) onemap.get("enterpriseName"));
}
map.put("yeshidden",yeshidden);
map.put("nohidden",nohidden);
map.put("enterpriseName",enterpriseName);
return map;
}
/**
* 判断是否为企业
* @return
......
package com.zehong.system.service.impl;
import java.time.LocalDate;
import java.time.Year;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -114,4 +117,23 @@ public class TInspectReportServiceImpl implements ITInspectReportService
public Map<String, Object> selectIndoorStatistic(TInspectReport report) {
return tInspectReportMapper.selectIndoorStatistic(report);
}
/**
* 入户安检统计
* @return
*/
@Override
public List<Map<String,Object>> selectindoorsummary() {
TInspectReport report = new TInspectReport();
LocalDate now = LocalDate.now();
int year = now.getYear()+1;
List<Map<String,Object>> list = new ArrayList<>();
for(int i =0;i<4;i++){
year-=1;
report.setAnnual(year);
Map<String,Object> map =tInspectReportMapper.selectIndoorSummery(report);
list.add(map);
}
return list;
}
}
......@@ -695,4 +695,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="gasType != null and gasType == 1"> and gas_type =#{gasType}</if>
<if test="gasType != null and gasType == 0"> and (gas_type =#{gasType} or gas_type is null)</if>
</delete>
<select id="summaryUser" resultType="java.util.HashMap">
SELECT IFNULL(SUM(IF(u.user_type=1,1,0)),0) AS jmNum,
IFNULL(SUM(IF(u.user_type=2,1,0)),0) AS syNum,
IFNULL(SUM(IF(u.user_type=3,1,0)),0) AS gyNum,
IFNULL(SUM(IF(u.user_type=1 AND su.special_id IS NOT NULL,1,0)),0) AS jmtNum,
IFNULL(SUM(IF(u.user_type=2 AND su.special_id IS NOT NULL,1,0)),0) AS sytNum,
IFNULL(SUM(IF(u.user_type=3 AND su.special_id IS NOT NULL,1,0)),0) AS gytNum
FROM t_detector_user u
LEFT JOIN t_special_user su ON u.user_id = su.`user_id`
</select>
</mapper>
......@@ -285,4 +285,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND beyondEnterprise_id = #{companyInfoId}
</if>
</select>
<select id="hiddenBookYearStatistics" parameterType="int" resultType="hashmap">
SELECT y.year,IFNULL(c.hiddenNum,0) AS hiddenNum,IFNULL(c.yeshidden,0) AS yeshidden,IFNULL(c.nohidden,0) AS nohidden
FROM (
SELECT #{nowyear} - a.n AS `year`
FROM (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 ) a
) AS Y
LEFT JOIN (
SELECT YEAR(hidden_find_date) AS `year`, COUNT(*) AS hiddenNum ,
SUM(IF(remediation=1,1,0))AS yeshidden,
SUM(IF(remediation=2,1,0))AS nohidden
FROM t_hidden_danger_standing_book
GROUP BY YEAR(hidden_find_date)
) AS c ON y.year = c.year
ORDER BY y.year desc;
</select>
<select id="hiddenBookqiyeStatistics" resultType="hashmap">
SELECT IFNULL(e.`enterprise_name`,"未知") AS enterpriseName,
IFNULL(SUM(IF(d.remediation=1,1,0)),0) AS yeshidden,
IFNULL(SUM(IF(d.remediation=2,1,0)),0) AS nohidden,
COUNT(d.hidden_id) AS allcount
FROM t_hidden_danger_standing_book d
LEFT JOIN t_enterprise_info e ON d.`beyondEnterprise_id` = e.`enterprise_id`
GROUP BY d.`beyondEnterprise_id`
ORDER BY allcount
limit 7
</select>
</mapper>
......@@ -195,4 +195,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND t.indoor_time = sub_t.max_time
LEFT JOIN t_detector_user u ON u.user_id = t.user_no
</select>
<select id="selectIndoorSummery" resultType="hashmap" parameterType="TInspectReport">
SELECT
#{annual} as yearNum,
(select count(*) from t_detector_user where create_time &lt; concat(#{annual},"-12-31 23:59:59")) AS allNum,
IFNULL(SUM(IF(t.indoor_status ='DONE',1,0)),0) AS doneNum,
IFNULL(SUM(IF(t.indoor_status ='REJ',1,0)),0) AS rejNum,
IFNULL(SUM(IF(t.indoor_status ='NONE',1,0)),0) AS noneNum
FROM t_inspect_report t
JOIN (
SELECT `user_no`, MAX(indoor_time) AS max_time
FROM t_inspect_report
WHERE `annual` = #{annual}
GROUP BY `user_no`
) AS sub_t
ON t.`user_no` = sub_t.`user_no`
AND t.indoor_time = sub_t.max_time
LEFT JOIN t_detector_user u ON u.user_id = t.user_no
</select>
</mapper>
\ No newline at end of file
......@@ -85,3 +85,20 @@ export function hiddenBookStatistics(query) {
params: query
})
}
//隐患年份统计
export function hiddenBookYearStatistics() {
return request({
url: '/standingBook/hidden/hiddenBookYearStatistics',
method: 'get'
})
}
//隐患企业统计
export function hiddenBookqiyeStatistics() {
return request({
url: '/standingBook/hidden/hiddenBookqiyeStatistics',
method: 'get'
})
}
......@@ -32,3 +32,12 @@ export function homepageStatistic() {
})
}
//入户安检统计
export function indoorsummary(query) {
return request({
url: '/statistic/indoorsummary',
method: 'get',
params: query
})
}
import request from '@/utils/request'
// 查询入户安检结果列表
export function summaryUser() {
return request({
url: '/supervise/user/summaryUser',
method: 'get'
})
}
<!--
* @Author: your name
* @Date: 2022-04-11 15:07:47
* @LastEditTime: 2022-04-12 09:55:18
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: /gassafety-progress/gassafetyprogress-web/src/views/operationMonitor/xunjianxuncha/topChars/left.vue
-->
<template>
<div class="charsCom all-flex-h">
<div id="main1" class="two all-flex">
<!--<chars :options="options"></chars>-->
</div>
</div>
</template>
<script>
import Chars from "@/components/allCharsCom/Chars";
import { indoorsummary } from "@/api/statistic/statisticAnalysis";
export default {
components: {
Chars,
},
props:{
annual: {
type: String,
default: 2025,
},
companyInfoId: {
type: String,
default: 23,
},
},
data(){
return{
totalObj: {
taskTotal: 0,
taskFeedbackTotal: 0
},
maps:{},
options: {
grid: {
top: '10%', // 上边距
right: '5%', // 右边距
bottom: '0%', // 下边距
left: '5%', // 左边距
containLabel: true // 保证坐标轴标签等内容不被遮挡
},
legend: {},
tooltip: {},
dataset: {
source: [
['product', '已安检', '未安检', '到访不遇','拒绝安检'],
['2026', 43.3, 85.8, 93.7,10],
['2025', 83.1, 73.4, 55.1,10],
['2024', 86.4, 65.2, 82.5,10],
['2023', 72.4, 53.9, 39.1,10]
]
},
xAxis: { type: 'category' },
yAxis: {},
series: [{ type: 'bar' }, { type: 'bar' }, { type: 'bar' }, { type: 'bar' }]
}
}
},
created(){
//this.getStatiData();
setTimeout(this.getzhanshi,1000);
},
methods:{
getzhanshi(){
var myChart = this.$echarts.init(document.getElementById('main1'));
myChart.setOption(this.options);
},
getStatiData() {
indoorsummary().then(response => {
console.log(response.data);
var source = [
['product', '已安检', '未安检', '到访不遇','拒绝安检']
]
for(var map of response.data){
source.push([map.yearNum,map.doneNum,map.allNum-map.yearNum-map.noneNum-map.rejNum,map.noneNum,map.rejNum]);
}
console.log('canshu',source)
this.options.dataset.source = source;
var myChart = this.$echarts.init(document.getElementById('main1'));
myChart.setOption(this.options);
// source: [
// ['product', '已安检', '未安检', '到访不遇','拒绝安检'],
// ['2026', 43.3, 85.8, 93.7,10],
// ['2025', 83.1, 73.4, 55.1,10],
// ['2024', 86.4, 65.2, 82.5,10],
// ['2023', 72.4, 53.9, 39.1,10]
// ]
});
},
}
};
</script>
<style lang="scss" scoped>
.charsCom {
width: 100%;
height: 100%;
color: #333333;
}
.title {
text-align: center;
font-size: 24px;
margin-bottom: 7px;
}
.two {
flex: 1;
> .left {
margin-right: 70px;
}
> .right {
}
> div {
font-size: 16px;
flex: 1;
// display: flex;
// flex-direction: column;
}
.left,
.right {
display: flex;
flex-direction: column;
justify-content: space-between;
.first {
margin-bottom: 6px;
text-align: left;
.text {
display: inline-block;
margin-right: 8px;
}
}
.second {
width: 250px;
height: 30px;
line-height: 30px;
box-sizing: border-box;
box-shadow: 0px 0px 3px 1px #dddddd;
margin-bottom: 19px;
> div {
// flex: 1;
text-align: center;
&.left {
color: #1d8cf3;
}
&.right {
color: #00c3f1;
}
}
}
.third {
text-align: center;
width: 250px;
margin-bottom: 24px;
}
.fifth {
flex: 1;
// background: red;
padding-top: 5px;
.contant {
width: 120px;
height: 120px;
margin: 0 auto;
}
}
}
}
</style>
<!--
* @Author: your name
* @Date: 2022-04-11 15:07:47
* @LastEditTime: 2022-04-20 11:09:34
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: /gassafety-progress/gassafetyprogress-web/src/views/operationMonitor/xunjianxuncha/topChars/left.vue
-->
<template>
<div class="charsCom all-flex-h">
<div class="title">入户安检隐患统计</div>
<div class="two all-flex">
<div class="left">
<!--<div class="first">-->
<!--<span class="text">隐患整改率</span>-->
<!--</div>-->
<div id="main" class="chars-box" >
<!--<Chars :options="option"></Chars>-->
</div>
</div>
<div class="right">
<div ref="myChartWidth" style="margin-top: 60px" class="chars-box">
<Chars :options="comoption" />
</div>
</div>
</div>
<!--<div class="three all-flex-h">-->
<!--<div class="first">隐患原因</div>-->
<!--<div ref="myChartWidth" class="chars-box">-->
<!--<Chars :options="reasonOptions" />-->
<!--</div>-->
<!--</div>-->
</div>
</template>
<script>
import Chars from "@/components/allCharsCom/Chars";
import { hiddenBookqiyeStatistics,hiddenBookYearStatistics } from "@/api/standingBook/hidden";
export default {
components: {
Chars,
},
props:{
annual: {
type: String,
default: 2025,
},
companyInfoId: {
type: String,
default: 23,
},
},
data() {
return {
bottomData: [
[
{ name: "裂缝", value: 0, color: "#604AFF" },
{ name: "管道称重", value: 0, color: "#FFC337" },
{ name: "其他", value: 0, color: "#86FF5B" },
{ name: "腐蚀", value: 0, color: "#03C4F1" },
{ name: "漏气", value: 0, color: "#1F8DF3" },
],
],
option:{
color:['RoyalBlue',"lightblue"],
title: {
text: '隐患统计'
},
legend: {
data: ['已整改', '未整改']
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: ['2020', '2021', '2022', '2023', '2024', '2025', '2026']
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '已整改',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: '未整改',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [220, 182, 191, 234, 290, 330, 310]
}
]
},
comoption:{
color:['RoyalBlue',"lightblue"],
legend: {},
xAxis: {
type: 'value'
},
yAxis: {
type: 'category',
offset: 0, // 向右偏移50像素
data: ['企业企业企业一个两个三个', '企业2', '企业3', '企业4', '企业5', '企业6'],
axisLabel: {
rotate: 15, // 旋转45度
formatter: function (value,index) {
if(value.length>6){
if(value.length>12){
return value.slice(0,6)+"\n"+value.slice(6,11)+"...";
}else{
return value.slice(0,6)+"\n"+value.slice(6,value.length);
}
}else{
return value;
}
}
}
},
series: [
{
name: '已整改',
type: 'bar',
stack: 'total',
label: {
show: true
},
emphasis: {
focus: 'series'
},
data: [320, 302, 301, 334, 390, 330]
},
{
name: '未整改',
type: 'bar',
stack: 'total',
label: {
show: true
},
emphasis: {
focus: 'series'
},
data: [120, 132, 101, 134, 90, 230]
}
]
},
reasonOptions:{},
hiddenBookInfo: {
unFinishNum: 0,
finishNum: 0
}
};
},
created(){
setTimeout(this.getzhanshi,1000)
this.getHiddenBookInfo();
},
methods: {
getzhanshi(){
hiddenBookYearStatistics({companyInfoId:this.companyInfoId,annual:this.annual}).then(res =>{
this.option.series[0].data = res.data.yeshidden;
this.option.series[1].data = res.data.nohidden;
this.option.xAxis[0].data = res.data.yearNum;
var myChart = this.$echarts.init(document.getElementById('main'));
myChart.setOption(this.option);
})
},
bottomOptions() {
return {
series: this.bottomData.map((data, idx) => {
const rich = {};
data
.map((item) => ({
fontsize: 12,
color: item.color,
}))
.forEach((item, index) => {
rich[`dataIndex${index}`] = item;
});
return {
type: "pie",
radius: ["68%", "80%"],
tooltip: {
trigger: "item",
},
color: data.map((item) => item.color),
itemStyle: {
borderWidth: 2,
borderRadius: 10,
borderColor: "#fff",
},
label: {
alignTo: "edge",
// formatter: "{name|{b}}\n{num|{c} 个}",
formatter: (parm) => {
return `{dataIndex${parm.dataIndex}|${parm.data.name}}\n{dataIndex${parm.dataIndex}|${parm.data.value}}`;
},
minMargin: 5,
edgeDistance: 10,
lineHeight: 15,
rich,
},
labelLine: {
length: 15,
length2: 0,
maxSurfaceAngle: 80,
},
labelLayout: (params) => {
const { width } = this.$refs.myChartWidth.getBoundingClientRect();
const isLeft = params.labelRect.x < width / 2;
const points = params.labelLinePoints;
console.log("points",points)
// Update the end point.
points[2][0] = isLeft
? params.labelRect.x
: params.labelRect.x + params.labelRect.width;
return {
labelLinePoints: points,
};
},
data: data,
};
}),
};
},
getHiddenBookInfo(){
console.log('进去了--------------------------------')
hiddenBookqiyeStatistics().then(res =>{
console.log(res)
if(res.code == 200){
this.comoption.series[0].data = res.data.yeshidden;
this.comoption.series[1].data = res.data.nohidden;
this.comoption.yAxis.data = res.data.enterpriseName;
}
//console.log("res==================",res)
})
}
},
};
</script>
<style lang="scss" scoped>
.charsCom {
width: 100%;
height: 100%;
color: #333333;
}
.title {
text-align: center;
font-size: 24px;
margin-bottom: 7px;
}
.two {
flex: 1;
> .left {
max-width: 50%;
margin-right: 70px;
.first {
margin-bottom: 6px;
}
.chars-box {
width: 90%;
height: 100%;
margin: 0 auto;
}
.second {
width: 213px;
height: 30px;
line-height: 30px;
box-sizing: border-box;
box-shadow: 0px 0px 3px 1px #dddddd;
margin-bottom: 19px;
> div {
// flex: 1;
text-align: center;
&.left {
color: #1d8cf3;
}
&.right {
color: #00c3f1;
}
}
}
.third {
text-align: center;
width: 213px;
margin-bottom: 24px;
}
}
> .right {
width: 50%;
.first {
text-align: center !important;
}
.chars-box {
width: 100%;
height: 90%;
margin: 0 auto;
}
}
> div {
font-size: 16px;
flex: 1;
// display: flex;
// flex-direction: column;
}
.left,
.right {
// display: flex;
// flex-direction: column;
// justify-content: space-between;
.first {
text-align: left;
.text {
display: inline-block;
margin-right: 8px;
}
}
}
}
.three {
font-size: 16px;
flex: 1;
// background: red;
.chars-box {
flex: 1;
}
}
</style>
<!--
* @Author: your name
* @Date: 2022-04-11 15:07:47
* @LastEditTime: 2022-04-14 18:00:06
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: /gassafety-progress/gassafetyprogress-web/src/views/operationMonitor/xunjianxuncha/topChars/left.vue
-->
<template>
<div style="display:flex; ">
<div class="left" id ="main2">
<Chars :options="option"/>
</div>
<div class="right">
<div class="onehang" style="margin-top: 20%">
<div class="onemax"></div>
<div class="one">用户数量</div>
<div class="one">特殊用户</div>
</div>
<div class="onehang">
<div class="onemax" ><div class="xiaoone" style="background: #ff7f50 "></div>居民用户</div>
<div class="one">{{datanum.jmNum}}</div>
<div class="one">{{datanum.jmtNum}}</div>
</div>
<div class="onehang">
<div class="onemax"><div class="xiaoone" style="background:#32cd32"> </div>商业用户</div>
<div class="one">{{datanum.syNum}}</div>
<div class="one">{{datanum.sytNum}}</div>
</div>
<div class="onehang">
<div class="onemax"><div class="xiaoone" style="background: #6495ed"></div>工业用户</div>
<div class="one">{{datanum.gyNum}}</div>
<div class="one">{{datanum.gytNum}}</div>
</div>
</div>
</div>
</template>
<script>
import Chars from "../../../../components/allCharsCom/Chars";
import { summaryUser } from "@/api/supervise/summary";
export default {
components: {
Chars
},
props:{
annual: {
type: String,
default: 2025,
},
companyInfoId: {
type: String,
default: 23,
},
},
data() {
return {
total:4,
limit:2,
showSearch: true,
queryParams: {
pageNum: 1,
pageSize: 4,
enterpriseId:null,
nickName: null
},
// 特殊用户管控表格数据
specialuserList: [],
arr: [],
datanum:{
jmNum:0,
gyNum:0,
syNum:0,
jmtNum:0,
gytNum:0,
sytNum:0,
},
option:{
color: ['#ff7f50', '#32cd32', '#6495ed' ],
legend: {
top: '5%',
left: 'center'
},
series: [
{
name: 'Access From',
type: 'pie',
radius: ['40%', '70%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 10,
borderColor: '#fff',
borderWidth: 2
},
label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: 40,
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [
{ value: 1048 },
{ value: 735 },
{ value: 580 },
]
}
]
}
};
},
created() {
this.getnum();
},
methods: {
//特殊用户
getnum(){
summaryUser().then(res => {
if(res.code == 200){
this.datanum = res.data;
var data = [
{ value: res.data.jmNum },
{ value: res.data.syNum },
{ value: res.data.gyNum }
]
this.option.series[0].data = data;
}
console.log(this.option)
var myChart = this.$echarts.init(document.getElementById('main2'));
myChart.setOption(this.option);
})
}
},
mounted() {},
};
</script>
<style lang="scss" scoped>
.left{
width: 40%;
height: 30vh;
}
.right{
width: 55%;
height: 30vh;
}
.onehang{
width: 100%;
font-size: 14px;
display: flex;
}
.one{
height: 40px;
width: 30%;
text-align: center;
}
.onemax{
height: 40px;
width: 40%;
text-align: center;
display: flex;
}
.xiaoone{
height: 12px;
width: 20px;
margin-top: 4px;
margin-right: 5px;
}
</style>
<!--
* @Author: your name
* @Date: 2022-04-11 14:11:04
* @LastEditTime: 2022-04-14 10:45:52
* @LastEditors: Please set LastEditors
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
* @FilePath: /gassafety-progress/gassafetyprogress-web/src/views/operationMonitor/xunjianxuncha/index.vue
-->
<template>
<div class="app-container xjxc">
<div class="wrapper flex-h">
<div class="top flex">
<div class="right">
<Right :annual="activeName" :companyInfoId="companyInfoId" />
</div>
<div class="left">
<Left :annual="activeName" :companyInfoId="companyInfoId" />
</div>
<!--<div class="middle">-->
<!--<Middle />-->
<!--</div>-->
</div>
<div class="middle"></div>
<div class="bottom">
<Middle :annual="activeName" :companyInfoId="companyInfoId" />
</div>
</div>
</div>
</template>
<script>
import Left from "./components/Left";
import Middle from "./components/Middle";
import Right from "./components/Right";
import { enterpriseLists } from "@/api/regulation/info";
export default {
components: {
Left,
Middle,
Right
},
data() {
return {
danwei:null,
enterprises: [],
activeName: '2025',
companyInfoId:''
};
},
created() {
this.getEnterpriseLists();
},
methods: {
selectcompanyId(e){
this.companyInfoId = e;
},
//所属单位
getEnterpriseLists(){
const param = {};
enterpriseLists(param).then(response => {
this.enterprises = response.rows;
});
},
handleClick(tab, event) {
console.log(tab, event);
}
},
mounted(){
}
};
</script>
<style lang="scss" scoped>
.app-main {
}
.xjxc {
height: calc(100vh - 50px) !important;
}
.flex {
display: flex;
justify-content: space-between;
}
.flex-h {
display: flex;
// justify-content: space-around;
flex-direction: column;
height: 100%;
.top {
height: 38.7%;
.left {
width: 70%;
padding: 15px 24px 19px;
}
.middle {
width: 35.3%;
padding: 15px 80px 19px 71px;
}
.right {
width: 30.2%;
padding: 15px 29px;
}
> div {
// box-shadow: 2px 0px 13px 1px rgba(0, 0, 0, 0.1);
box-shadow: 2px 0px 10px 1px rgba(0, 0, 0, 0.1);
border-radius: 3px;
}
}
>.middle {
margin: 5px 0;
background: repeating-linear-gradient(135deg, transparent, transparent 3px, #D6D6D6 3px, #D6D6D6 8px);
height: 2px;
}
.bottom {
flex: 1;
}
> div {
// height: 50%;
}
}
.shai{
position: fixed;
right: 20px;
width: 300px;
height: 40px;
}
::v-deep .el-select{
width: 300px;
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment