diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java new file mode 100644 index 0000000..0013989 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataReceiver.java @@ -0,0 +1,146 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.alarm.service.IAlarmRecordsService; +import com.casic.missiles.modular.alarm.service.IAlarmRuleService; +import com.casic.missiles.modular.system.dto.DeviceWellDto; +import com.casic.missiles.modular.system.model.*; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowDataService; +import lombok.extern.java.Log; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; + +@Log +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataReceiver extends BaseController { + + @Resource + private IGasFlowDataService gasFlowDataService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAlarmRuleService alarmRuleService; + @Resource + private IAlarmRecordsService alarmRecordsService; + + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @RequestMapping(value = "/data/recv") + @ResponseBody + public Object dataRecv(@RequestBody(required = true) Map gasFlowData) throws ParseException { + // 判断必填字段 + if (!gasFlowData.containsKey("assetcode")) { + return ResponseData.error("设备地址字段缺失"); + } + if (!gasFlowData.containsKey("ssll")) { + return ResponseData.error("瞬时流量字段缺失"); + } + if (!gasFlowData.containsKey("ljll")) { + return ResponseData.error("累计流量字段缺失"); + } + if (!gasFlowData.containsKey("logat")) { + return ResponseData.error("上报时间字段缺失"); + } + + // 创建原始记录对象 + DataGasFlow dataGasFlow = new DataGasFlow(); + + // 赋值设备地址 + String gasFlowAddr = gasFlowData.get("assetcode").toString(); + dataGasFlow.setDevcode(gasFlowAddr); + + // 赋值井编号 + DeviceWellDto wellDto = deviceService.selectWellByDevcode(gasFlowAddr); + if (null == wellDto) { + log.info("没有找到" + gasFlowAddr + "对应的井编号"); + return ResponseData.success(); + } + dataGasFlow.setWellCode(wellDto.getWellCode()); + // 能找到关联的井 则必然能找到设备 不判空 + Device device = deviceService.getDeviceByDevCode(gasFlowAddr); + + // 赋值水表读数 + Double gasFlowNumber = 0.0; + String numType = gasFlowData.get("ljll").getClass().getSimpleName(); + if (numType.equals("String")) { + gasFlowNumber = Double.parseDouble(gasFlowData.get("ljll").toString()); + } else if (numType.equals("BigDecimal")) { + gasFlowNumber = ((Number) gasFlowData.get("ljll")).doubleValue(); + } + dataGasFlow.setTotalFlow(String.valueOf(gasFlowNumber)); + // 赋值数据采集时间 + String readDate = gasFlowData.get("logat").toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //记录时间 + dataGasFlow.setUptime(sdf.parse(readDate)); + //收到数据的时间 + dataGasFlow.setLogtime(new Date()); + dataGasFlow.setDescn("气体流量数据传入"); + //瞬时流量 + dataGasFlow.setInstantFlow(gasFlowData.containsKey("ssll") ? gasFlowData.get("ssll").toString() : ""); + //瞬时流速 + dataGasFlow.setInstantsVelocity(gasFlowData.containsKey("ssls") ? gasFlowData.get("ssls").toString() : ""); + //介质温度 + dataGasFlow.setAmbocetorTemperture(gasFlowData.containsKey("jzwd") ? gasFlowData.get("jzwd").toString() : ""); + + // 保存到数据库 同时计算日/月用水量 + double flowAccToday = gasFlowDataService.saveGasFlowData(dataGasFlow); + + // 判断是否报警/预警 + AlarmRule alarmRule = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "1"); // 报警 + AlarmRule alarmRuleWarn = alarmRuleService.selectAlarmRuleByDev(gasFlowAddr, "2"); // 预警 + if (null != alarmRule && null != alarmRule.getHighvalue()) { + if (flowAccToday - alarmRule.getHighvalue() > 0) { + // 超出报警阈值 生成一条报警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值报警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值报警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } else { + // 如果没有报警则判断是否预警 + if (null != alarmRuleWarn && null != alarmRuleWarn.getHighvalue()) { + if (flowAccToday - alarmRuleWarn.getHighvalue() > 0) { + // 超出预警阈值 生成一条预警消息 + AlarmRecords alarmRecord = new AlarmRecords(); + alarmRecord.setDeviceId(device.getId()); + alarmRecord.setDevcode(gasFlowAddr); + alarmRecord.setWellCode(wellDto.getWellCode()); + alarmRecord.setAlarmType("1"); // 业务报警 + alarmRecord.setAlarmContent("日用气量超阈值预警"); + alarmRecord.setAlarmValue(df2.format(flowAccToday)); + alarmRecord.setAlarmTime(Calendar.getInstance().getTime()); + alarmRecord.setStatus("1"); + alarmRecord.setAlarmMessage("日用气量超阈值预警"); + alarmRecordsService.insertAlarmRecord(alarmRecord); + // 向前端推送报警 + } + } + } + } + + return ResponseData.success(); + } +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java new file mode 100644 index 0000000..f84e222 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/GasFlowStaticsController.java @@ -0,0 +1,325 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.controller.BaseController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.model.Area; +import com.casic.missiles.modular.system.service.IAreaService; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.util.DateUtil; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.text.SimpleDateFormat; +import java.util.*; + +@Controller +@RequestMapping(value = "/gasStatistic") +public class GasFlowStaticsController extends BaseController { + + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; + + @Autowired + private IAreaService iAreaService; + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + + + /** + * 查询二级分区7日用气量 + * 二级分区用气走势图 + * + * @return + */ + @RequestMapping(value = "/countByDay") + @ResponseBody + public Object countByDaySecond(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + List dateStrs = DateUtil.getBetweenTime(startTime, endTime); + areaList.forEach(area -> { + //过滤一级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + // 二级区域 + List> sencodAreaCountList = new ArrayList<>(); + //寻找二级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + List> retMap = gasFlowStatisticsService.countByDayFirst(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put(area2.getAreaName(), retMap); + } + sencodAreaCountList.add(map); + } + //封装数据 + List> returnMapList = new ArrayList<>(); + for (String dateStr : dateStrs) { + // 返回数据中的每日各二级分区的用气量 + Map dateItemMap = new HashMap<>(); + dateItemMap.put("date", dateStr); + List> secondAreaDataList = new ArrayList<>(); + + // 遍历查询结果List中的各二级分许 + for (int i = 0; i < sencodAreaCountList.size(); i++) { + Map sencodAreaCountItem = sencodAreaCountList.get(i); + String areaName = areaLevel2List.get(i).getAreaName(); + String areaDayCount = "0"; + Map areaDayDataObj = new HashMap<>(); + List> areaDayCountList = (List) sencodAreaCountItem.get(areaName); + + // 不为空表示有数据 + if (areaDayCountList.size() > 0) { + for (Map dayMap : areaDayCountList) { + if (dayMap.containsKey("DATE") == true && dayMap.get("DATE").toString().equals(dateStr) == true) { + areaDayCount = dayMap.get("count").toString(); + } + } + } + + areaDayDataObj.put("areaName", areaName); + areaDayDataObj.put("count", areaDayCount); + + secondAreaDataList.add(areaDayDataObj); + } + + dateItemMap.put("data", secondAreaDataList); + returnMapList.add(dateItemMap); + } + return ResponseData.success(returnMapList); + } + + /** + * 查询二级分区用气量 + * + * @return + */ + @RequestMapping(value = "/countBySecondArea") + @ResponseBody + public Object countBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("count", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long count = gasFlowStatisticsService.countByFirstArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + map.put("count", count); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + + /** + * 查询二级分区用气量对比 + * + * @return + */ + @RequestMapping(value = "/gasCompare") + @ResponseBody + public Object waterCompareSecond(@RequestParam String areaId, @RequestParam String type, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids() != null && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + + Calendar now = Calendar.getInstance(); + Calendar comp = Calendar.getInstance(); + String startTimeThis = ""; // 对比当期起始日期 + String endTimeThis = ""; // 对比当期结束日期 + String startTimeLast = ""; // 对比上期起始日期 + String endTimeLast = ""; // 对比上期结束日期 + + String year = sdf.format(now.getTime()).substring(0, 4); + + if (type.equalsIgnoreCase("year")) { + // 本期起止日期 + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + // 上期起止日期 + comp.add(Calendar.YEAR, -1); + String lastYear = sdf.format(comp.getTime()).substring(0, 4); + startTimeLast = lastYear + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + } else if (type.equalsIgnoreCase("season")) { + // 本期起止日期 + switch (now.get(Calendar.MONTH)) { + // 一季度 + case Calendar.JANUARY: + case Calendar.FEBRUARY: + case Calendar.MARCH: { + startTimeThis = year + "-01-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = sdf.format(comp.getTime()).substring(0, 4) + "-10-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 二季度 + case Calendar.APRIL: + case Calendar.MAY: + case Calendar.JUNE: { + startTimeThis = year + "-04-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-01-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 三季度 + case Calendar.JULY: + case Calendar.AUGUST: + case Calendar.SEPTEMBER: { + startTimeThis = year + "-07-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-04-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + // 四季度 + case Calendar.OCTOBER: + case Calendar.NOVEMBER: + case Calendar.DECEMBER: { + startTimeThis = year + "-10-01"; + endTimeThis = sdf.format(now.getTime()).substring(0, 10); + + comp.add(Calendar.MONTH, -3); + startTimeLast = year + "-07-01"; + endTimeLast = sdf.format(comp.getTime()).substring(0, 10); + break; + } + } + } else if (type.equalsIgnoreCase("other") || type.equalsIgnoreCase("today") || + type.equalsIgnoreCase("week") || type.equalsIgnoreCase("month")) { + // 本期起止日期 + startTimeThis = startTime; + endTimeThis = endTime; + try { + now.setTime(sdfD.parse(endTime)); + comp.setTime(sdfD.parse(startTime)); + int delta = (int) ((comp.getTimeInMillis() - now.getTimeInMillis()) / (3600 * 24 * 1000)); + + now.add(Calendar.DATE, delta - 1); + comp.add(Calendar.DATE, delta - 1); + } catch (Exception ex) { + ex.printStackTrace(); + } + startTimeLast = sdfD.format(comp.getTime()); + endTimeLast = sdfD.format(now.getTime()); + } + + List> resultMapList = new ArrayList<>(); + // 寻找生产区内的所有二级分区 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map areaSecondMap = new HashMap<>(); + areaSecondMap.put("areaId", area2.getId()); + areaSecondMap.put("areaName", area2.getAreaName()); + areaSecondMap.put("nowTime", startTimeThis + "~" + endTimeThis); + areaSecondMap.put("lastTime", startTimeLast + "~" + endTimeLast); + + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Long countThis = gasFlowStatisticsService.countByFirstArea(startTimeThis, endTimeThis, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("now", countThis); + + Long countLast = gasFlowStatisticsService.countByFirstArea(startTimeLast, endTimeLast, StringUtils.join(childIdsList.toArray(), ",")); + areaSecondMap.put("last", countLast); + } + resultMapList.add(areaSecondMap); + } + return ResponseData.success(resultMapList); + } + + + /** + * 查询二级分区气表告警 + * + * @return + */ + @RequestMapping(value = "/alarmBySecondArea") + @ResponseBody + public Object alarmBySecondArea(String areaId, String startTime, String endTime) { + List areaList = iAreaService.selectList(null); + List areaLevel2List = new ArrayList<>(); + areaList.forEach(area -> { + //根据一级区域过滤二级区域 + if ("3".equals(area.getLevel().toString()) && area.getPids().contains("[" + areaId + "]")) { + areaLevel2List.add(area); + } + }); + List> mapList = new ArrayList<>(); + //寻找一级区域下的所有子区域的总用气量 按照天 + for (Area area2 : areaLevel2List) { + List childIdsList = new ArrayList<>(); + Map map = new HashMap<>(); + map.put("areaId", area2.getId()); + map.put("areaName", area2.getAreaName()); + map.put("alarm", 0); + map.put("warning", 0); + for (Area area : areaList) { + if (area.getPids() != null && area.getPids().contains("[" + area2.getId() + "]")) { + childIdsList.add(area.getId()); + } + } + if (ToolUtil.isNotEmpty(childIdsList)) { + Map objectMap = gasFlowStatisticsService.alarmBySecondArea(startTime, endTime, StringUtils.join(childIdsList.toArray(), ",")); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("alarm"))) + map.put("alarm", objectMap.get("alarm").toString()); + if (ToolUtil.isNotEmpty(objectMap) && ToolUtil.isNotEmpty(objectMap.get("warning"))) + map.put("warning", objectMap.get("warning").toString()); + } + mapList.add(map); + } + + return ResponseData.success(mapList); + } + +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java index 691b103..8603a61 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/StaticsController.java @@ -7,6 +7,8 @@ import com.casic.missiles.modular.system.dto.AlarmNowView; import com.casic.missiles.modular.system.service.IAlarmNowViewService; import com.casic.missiles.modular.system.service.IStatisticsService; +import org.apache.commons.lang.StringUtils; +import org.beetl.ext.fn.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -30,16 +32,17 @@ /** * 根据权属单位统计闸井数量 + * * @return */ @RequestMapping(value = "/wellStaticsByDept") @ResponseBody - public Object wellStaticsByDept(){ + public Object wellStaticsByDept() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByDept(dataScope); + try { + List> res = statisticsService.wellStaticsByDept(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -50,12 +53,12 @@ */ @RequestMapping(value = "/wellStaticsByType") @ResponseBody - public Object wellStaticsByType(){ + public Object wellStaticsByType() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.wellStaticsByType(dataScope); + try { + List> res = statisticsService.wellStaticsByType(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -63,14 +66,15 @@ /** * 根据设备类型统计设备数量 + * 新增参数extra 传1时返回阀门和电子标识器,传0不返回这两 */ @RequestMapping(value = "/deviceStaticsByType") @ResponseBody - public Object deviceStaticsByType(){ + public Object deviceStaticsByType(@RequestParam(value = "extra", required = false) String extra) { DataScope dataScope = permissionService.getCurrUserDataScope(); List> returnList = new ArrayList<>(); - try{ - List> res = statisticsService.deviceStaticsByType(dataScope); + try { + List> res = statisticsService.deviceStaticsByType(dataScope); String vavleCount = "0"; for (Map devItem : res) { @@ -80,20 +84,20 @@ if (devItem.get("deviceType").toString().contains("阀门")) { continue; } - returnList.add(devItem); } Map marker = new HashMap<>(); - marker.put("deviceType", "电子标识"); - marker.put("deviceCount", "10"); - Map vavle = new HashMap<>(); - vavle.put("deviceType", "阀门"); - vavle.put("deviceCount", vavleCount); - - returnList.add(marker); - returnList.add(vavle); + if (!StringUtils.isEmpty(extra) && extra.equals("1")) { + marker.put("deviceType", "电子标识"); + marker.put("deviceCount", "10"); + Map vavle = new HashMap<>(); + vavle.put("deviceType", "阀门"); + vavle.put("deviceCount", vavleCount); + returnList.add(marker); + returnList.add(vavle); + } return ResponseData.success(returnList); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -104,12 +108,12 @@ */ @RequestMapping(value = "/deviceStaticsByDept") @ResponseBody - public Object deviceStaticsByDept(@RequestParam(value = "deviceType",required = false)String deviceType){ + public Object deviceStaticsByDept(@RequestParam(value = "deviceType", required = false) String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.deviceStaticsByDept(dataScope,deviceType); + try { + List> res = statisticsService.deviceStaticsByDept(dataScope, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -120,12 +124,12 @@ */ @RequestMapping(value = "/deviceStaticsByStatus") @ResponseBody - public Object deviceStaticsByStatus(){ + public Object deviceStaticsByStatus() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - Map res = statisticsService.deviceStaticsByStatus(dataScope); + try { + Map res = statisticsService.deviceStaticsByStatus(dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -136,12 +140,12 @@ */ @RequestMapping(value = "/jobsByDept") @ResponseBody - public Object jobsByDept(String beginTime, String endTime, String deviceType){ + public Object jobsByDept(String beginTime, String endTime, String deviceType) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.jobsByDept(dataScope,beginTime,endTime,deviceType); + try { + List> res = statisticsService.jobsByDept(dataScope, beginTime, endTime, deviceType); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -152,14 +156,14 @@ */ @RequestMapping(value = "/alarmsNow") @ResponseBody - public Object alarmsNow(){ + public Object alarmsNow() { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ + try { List alarmNowViews = alarmNowViewService.getNowAlarmRecords(dataScope); Map res = new HashMap<>(); - res.put("total",alarmNowViews.size()); + res.put("total", alarmNowViews.size()); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } @@ -170,17 +174,16 @@ */ @RequestMapping("/alarmsByDay") @ResponseBody - public Object alarmsByDay(String beginTime, String endTime){ + public Object alarmsByDay(String beginTime, String endTime) { DataScope dataScope = permissionService.getCurrUserDataScope(); - try{ - List> res = statisticsService.alarmsByDay(beginTime,endTime,dataScope); + try { + List> res = statisticsService.alarmsByDay(beginTime, endTime, dataScope); return ResponseData.success(res); - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); return ResponseData.error("faliure"); } } - } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java index c9f96ab..e49eb95 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/controller/WaterNotesController.java @@ -2,9 +2,11 @@ import com.casic.missiles.core.base.controller.BaseController; import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; import com.casic.missiles.modular.system.service.IWaterNotesService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -17,24 +19,27 @@ public class WaterNotesController extends BaseController { @Autowired private IWaterNotesService waterNotesService; - + @Autowired + private IGasFlowStatisticsService gasFlowStatisticsService; /** * 根据权属单位统计闸井数量 * @return */ - @RequestMapping(value = "/edit") + @RequestMapping(value = "/edit/{type}") @ResponseBody - public Object edit(@RequestBody(required = true) List> obj) { - return ResponseData.success(waterNotesService.edit(obj)); + public Object edit(@RequestBody(required = true) List> obj, @PathVariable("type") Integer type) { + Boolean commitFlag= type == 1 ? waterNotesService.edit(obj): gasFlowStatisticsService.edit(obj); + return ResponseData.success(commitFlag); } /** * 根据井类型统计闸井数量 */ - @RequestMapping(value = "/list") + @RequestMapping(value = "/list/{type}") @ResponseBody - public Object list() { - return ResponseData.success(waterNotesService.list().get("notes").toString()); + public Object list( @PathVariable("type") Integer type) { + List> notListContent = type == 1 ? waterNotesService.list(): gasFlowStatisticsService.list(); + return ResponseData.success(notListContent); } } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java new file mode 100644 index 0000000..5e8c0f6 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/GasFlowStatisticsMapper.java @@ -0,0 +1,23 @@ +package com.casic.missiles.modular.system.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface GasFlowStatisticsMapper { + + List> countByDayFirst(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Long countByFirstArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map alarmBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + Map warningBySecondArea(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("areaIds") String areaIds); + + List> list(); + + boolean edit(@Param("list") String listStr); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java index cbf6fbb..00fc168 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/WaterNotesMapper.java @@ -2,9 +2,10 @@ import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Map; public interface WaterNotesMapper { - Map list(); + List> list(); boolean edit(@Param("list") String listStr); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml index d5b1042..5a7bf9c 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/AlarmRuleMapper.xml @@ -82,7 +82,7 @@ FROM device_view d WHERE d.devcode NOT IN ( SELECT r.devcode FROM alarm_rule r) - AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13) + AND d.VALID=1 AND d.deviceType IN (2,6,8,10,13,14,15) order by deviceType, devcode diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml new file mode 100644 index 0000000..404f1ef --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/GasFlowStatisticsMapper.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + update bus_notes set notes = #{list} where id = 2 + + + \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml index e2f9e83..412351a 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/dao/mapping/WaterNotesMapper.xml @@ -4,10 +4,10 @@ - update bus_water_notes set notes = #{list} where id = 1 + update bus_notes set notes = #{list} where id = 1 \ No newline at end of file diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java new file mode 100644 index 0000000..0e55435 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IGasFlowStatisticsService.java @@ -0,0 +1,17 @@ +package com.casic.missiles.modular.system.service; + +import java.util.List; +import java.util.Map; + +public interface IGasFlowStatisticsService { + + List> countByDayFirst(String startTime, String endTime, String areaIds); + + Long countByFirstArea(String startTime, String endTime, String areaIds); + + Map alarmBySecondArea(String startTime, String endTime, String areaIds); + + List> list(); + + boolean edit(List> obj); +} diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java index 10178db..02bb966 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/IWaterNotesService.java @@ -4,6 +4,6 @@ import java.util.Map; public interface IWaterNotesService { - Map list(); + List> list(); boolean edit(List> obj); } diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java new file mode 100644 index 0000000..2274da5 --- /dev/null +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowStatisticsServiceImpl.java @@ -0,0 +1,51 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.casic.missiles.modular.system.dao.GasFlowStatisticsMapper; +import com.casic.missiles.modular.system.dao.WaterNotesMapper; +import com.casic.missiles.modular.system.service.IGasFlowStatisticsService; +import com.casic.missiles.modular.system.service.IStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +@Service +public class GasFlowStatisticsServiceImpl implements IGasFlowStatisticsService { + @Autowired + GasFlowStatisticsMapper gasFlowStatisticsMapper; + + @Override + public List> countByDayFirst(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByDayFirst(startTime, endTime, areaIds); + } + + @Override + public Long countByFirstArea(String startTime, String endTime, String areaIds) { + return gasFlowStatisticsMapper.countByFirstArea(startTime, endTime, areaIds); + } + + @Override + public Map alarmBySecondArea(String startTime, String endTime, String areaIds) { + Map alarm = gasFlowStatisticsMapper.alarmBySecondArea(startTime, endTime, areaIds); + Map warning = gasFlowStatisticsMapper.warningBySecondArea(startTime, endTime, areaIds); + alarm.put("warning", warning.get("warning")); + return alarm; + } + + @Override + public List> list() { + return gasFlowStatisticsMapper.list(); + } + + @Override + public boolean edit(List> obj) { + gasFlowStatisticsMapper.edit(JSONArray.toJSON(obj).toString()); + return true; + } +} + + diff --git a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java index 7fe4aaa..e27d384 100644 --- a/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java +++ b/casic-alarm/src/main/java/com/casic/missiles/modular/system/service/impl/WaterNotesServiceImpl.java @@ -15,7 +15,7 @@ private WaterNotesMapper waterNotesMapper; @Override - public Map list() { + public List> list() { return waterNotesMapper.list(); } diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java new file mode 100644 index 0000000..5e9c2e4 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/CorrodeDataController.java @@ -0,0 +1,90 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.ResponseData; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceMonitorDataDto; +import com.casic.missiles.modular.system.enums.DeviceExportEnum; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import com.casic.missiles.modular.system.service.IDeviceService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/corrode/data") +public class CorrodeDataController extends ExportController { + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final ICorrodeDataService corrodeDataService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public CorrodeDataController(ICommonPermissionService permissionService, + ICorrodeDataService corrodeDataService, IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.corrodeDataService = corrodeDataService; + this.deviceService = iDeviceService; + } + + @ApiOperation(value = "获取腐蚀效率数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String deptid, String beginTime, String endTime) { + Page> page = new PageFactory>().defaultPage(); + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> mapList = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + page.setRecords(mapList); + return ResponseData.success(super.packForBT(page)); + } + + + @ApiOperation(value = "导出腐蚀效率设备列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String keywords, String deptid, String beginTime, String endTime) throws IOException { + Page> page = new PageFactory>().defaultPage(); + page.setCurrent(1); + page.setSearchCount(false); + page.setSize(Integer.MAX_VALUE); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = corrodeDataService.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + list.forEach(deviceDto -> { + deviceDto.put("deptName", permissionService.getDeptName(deviceDto.get("deptid").toString())); + }); + super.exportExcel(DeviceExportEnum.CORRODEDATA_EXPORT, list, httpServletResponse); + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java new file mode 100644 index 0000000..ac3e52c --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasFlowDataController.java @@ -0,0 +1,184 @@ +package com.casic.missiles.modular.system.controller; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.base.controller.ExportController; +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.core.common.constant.factory.PageFactory; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.service.IDeviceService; +import com.casic.missiles.modular.system.service.IGasFlowService; +import io.swagger.annotations.ApiOperation; +import org.hswebframework.expands.office.excel.ExcelIO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + * @Date 2022-6-1 + */ +@Controller +@RequestMapping("/gasflow") +public class GasFlowDataController extends ExportController { + + private final ICommonPermissionService permissionService; + private final IDeviceService deviceService; + private final IGasFlowService gasFlowService; + + @Value("${smartcity.office.maxRowsExcel}") + private int maxRowsExcel; + @Value("${smartcity.config.config-path}") + private String templatePath; + + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + DateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public GasFlowDataController(ICommonPermissionService permissionService, + IGasFlowService gasFlowService,IDeviceService iDeviceService) { + this.permissionService = permissionService; + this.gasFlowService = gasFlowService; + this.deviceService=iDeviceService; + } + + @ApiOperation(value = "获取气体流量计数据列表") + @RequestMapping(value = "/list") + @ResponseBody + public Object listPage(String keywords, String areaId) { + Page page = new PageFactory().defaultPage(); + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List list = deviceService.selectDataScopePage(dataScope, page, "15", "", "", "", keywords, "", areaId); + String date = sdf.format(new Date()); + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.getDevcode(), date); + if (dayGasFlowDay == null) { + deviceDto.setDayCount("0"); + } else { + deviceDto.setDayCount(dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.getDevcode(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.setMonthCount("0"); + } else { + deviceDto.setMonthCount(monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.getDevcode(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.setTotalCount("0"); + } else { + deviceDto.setTotalCount(gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.getDevcode()); + if (flowRec == null) { + deviceDto.setWatchNum("0"); + deviceDto.setUptime(sdf4.format(new Date())); + } else { + deviceDto.setWatchNum(flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.setUptime(sdf4.format((Date) flowRec.get("UPTIME"))); + } + deviceDto.setAreaFullName(deviceService.getAreaFullNameById(deviceDto.getArea())); + }); + page.setRecords(list); + return new SuccessResponseData(super.packForBT(page)); + } + + @ApiOperation(value = "导出气体设备数据列表") + @RequestMapping(value = "/export") + public void export(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + Page> page = new PageFactory>().defaultPage(); + + String keywords = httpServletRequest.getParameter("keywords"); + String areaId = httpServletRequest.getParameter("areaId"); + + page.setLimit(maxRowsExcel); + page.setSize(maxRowsExcel); + page.setOffset(0); + page.setSearchCount(false); + + //查询数据权限 使用默认DEPTID 字段 + DataScope dataScope = permissionService.getCurrUserDataScope(); + List> list = deviceService.selectDataScopePage(dataScope, page, "15", "", keywords, areaId); + + String date = sdf.format(new Date()); + + list.forEach(deviceDto -> { + // 获取日月年用水量和最近的读数 + Map dayGasFlowDay = gasFlowService.selectGasFlowDay(deviceDto.get("DEVCODE").toString(), date); + if (dayGasFlowDay == null) { + deviceDto.put("dayCount", "0"); + } else { + deviceDto.put("dayCount", dayGasFlowDay.get("TOTAL_FLOW_DATE") == null ? "0" : dayGasFlowDay.get("TOTAL_FLOW_DATE").toString()); + } + + Map monthGasFlow = gasFlowService.selectGasFlowMonth(deviceDto.get("DEVCODE").toString(), date.substring(0, 7)); + if (monthGasFlow == null) { + deviceDto.put("monthCount", "0"); + } else { + deviceDto.put("monthCount", monthGasFlow.get("TOTAL_FLOW_MONTH") == null ? "0" : monthGasFlow.get("TOTAL_FLOW_MONTH").toString()); + } + + Map gasFlowYear = gasFlowService.selectGasFlowTotal(deviceDto.get("DEVCODE").toString(), date.substring(0, 4)); + if (gasFlowYear == null) { + deviceDto.put("totalCount", "0"); + } else { + deviceDto.put("totalCount", gasFlowYear.get("TOTAL_FLOW_YEAR") == null ? "0" : gasFlowYear.get("TOTAL_FLOW_YEAR").toString()); + } + + Map flowRec = gasFlowService.selectLatestGasFlow(deviceDto.get("DEVCODE").toString()); + if (flowRec == null) { + deviceDto.put("gasFlowNum", "0"); + deviceDto.put("uptime", sdf4.format(new Date())); + } else { + deviceDto.put("gasFlowNum", flowRec.get("TOTAL_FLOW") == null ? "0" : flowRec.get("TOTAL_FLOW").toString()); + deviceDto.put("uptime", sdf4.format((Date) flowRec.get("UPTIME"))); + } + + deviceDto.put("fullAreaName", deviceService.getAreaFullNameById(deviceDto.get("AREA").toString()) + "/" + deviceDto.get("POSITION").toString()); + }); + + FileInputStream fileInputStream = null; + if (ToolUtil.isEmpty(list)) { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListEmpty.xlsx"); + } else { + fileInputStream = new FileInputStream(templatePath + "/GasFlowListTemplate.xlsx"); + } + + try { + httpServletResponse.setContentType("application/octet-stream"); + httpServletResponse.addHeader("Content-Disposition", " attachment;filename=" + "GasFlowList.xlsx"); + Map var = new HashMap<>(); + var.put("标题", "设备数据列表"); + var.put("list", list); + ExcelIO.writeTemplate(fileInputStream, httpServletResponse.getOutputStream(), var); + + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + httpServletResponse.getOutputStream().flush(); + httpServletResponse.getOutputStream().close(); + fileInputStream.close(); + } + } + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java new file mode 100644 index 0000000..da5c72d --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/controller/GasStatisticController.java @@ -0,0 +1,35 @@ +package com.casic.missiles.modular.system.controller; + +import com.casic.missiles.core.base.response.SuccessResponseData; +import com.casic.missiles.modular.system.service.IGasFlowService; +import com.casic.missiles.modular.system.service.impl.GasFlowServiceImpl; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping +public class GasStatisticController { + @Autowired + IGasFlowService gasFlowService; + + + //没问题 + @ApiOperation("总览查询用气量") + @RequestMapping(value = "gasStatistic/overview") + @ResponseBody + public Object overview() { + return new SuccessResponseData(gasFlowService.getOverview()); + } + + //没问题 + @ApiOperation("统计气数量") + @RequestMapping(value = "/device/count/{deviceType}") + @ResponseBody + public Object waterMeterCount(@PathVariable("deviceType")String deviceType) { + return new SuccessResponseData(gasFlowService.getGasFlowCount()); + } +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java new file mode 100644 index 0000000..4eb8abb --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/CorrodeDataMapper.java @@ -0,0 +1,20 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@Mapper +public interface CorrodeDataMapper { + + List> getCorrodelistScopePage(@Param("dataScope") DataScope dataScope, @Param("page") Page> page, + @Param("deptid") String deptid, @Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("keywords") String keywords); + + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java new file mode 100644 index 0000000..1b21738 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/GasFlowMapper.java @@ -0,0 +1,48 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.modular.system.dto.DeviceDto; +import com.casic.missiles.modular.system.model.DataGasFlow; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +public interface GasFlowMapper extends BaseMapper { + + Map selectGasFlowDay(@Param("devcode") String devcode, @Param("date") String date); + + Map selectGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + Map selectGasFlowYear(@Param("devcode") String devcode, @Param("year") String year); + + Map selectLatestGasFlow(@Param("devcode") String devcode); + + + String getGasFlowCount(); + +// List> selectAlarmCountByDay(@Param("beginTime") String beginTime, @Param("endTime") String endTime); + + /** + * 总用水量和瞬时流量 + */ + Map getGasFlow(@Param("year") String year); + + /** + * 本月总用水量 + */ + Map getGasFlowMonth(@Param("month") String month); + + /** + * 今日用水量 + */ + Map getGasFlowDay(@Param("date") String date, @Param("area") String area); + + /** + * 噪声 + */ + Map getNoiseData(@Param("date") String date); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml new file mode 100644 index 0000000..51fdaf0 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/CorrodeDataMapper.xml @@ -0,0 +1,89 @@ + + + + + + DATE_FORMAT + (INSTALLDATE,'%Y-%m-%d') + + + to_char + (INSTALLDATE,'yyyy-MM-dd') + + + + ID,DEVCODE,DEVICENAME,DEVICETYPE,DEVICETYPENAME,WATCHTYPE,COMMUNICATION,MODELID,MODELNAME,DEPTID,DEPTNAME,WELLCODE,POSITION,CONCENID,CONCENCODE,ONLINESTATE,VALID,TS,BFZT,AREA,AREAFULLNAME,wellId,COORDINATE_X + AS LONGITUDE, COORDINATE_Y AS LATITUDE, + + as INSTALLDATE + + + + '%' || #{keywords} || '%' + + + CONCAT('%',#{keywords},'%') + + + + TO_DATE + ( + #{beginTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + TO_DATE + ( + #{endTime}, + 'yyyy-mm-dd hh24:mi:ss' + ) + + + + #{endTime} + + + #{beginTime} + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml index 96f77ff..62882cb 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/dao/mapping/DeviceMapper.xml @@ -119,6 +119,7 @@ ORDER BY INSTALLDATE DESC + + SELECT dwd.DEVCODE, dwD.DATE, dwd.TOTAL_FLOW_DATE + from data_gasflow_day as dwd + join device_view as dv on dv.DEVCODE = dwd.DEVCODE + WHERE dv.VALID = '1' + AND dv.DEVCODE = #{devcode} + AND dwd.DATE = #{date} + + + + + + + + + + + + + + + + + + + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java index cfa80d4..68448d7 100644 --- a/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/enums/DeviceExportEnum.java @@ -18,7 +18,9 @@ NOISEDATA_EXPORT("noiseData.xlsx","noiseData.xlsx","噪声记录仪数据"), BUSCONCENTRATOR_EXPORT("busConcentrator.xlsx", "busConcentrator.xlsx", "集中器数据"), DEVICE_EXPORT("device.xlsx", "device.xlsx", "设备数据"), - LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"); + LIQUIDGASDATA_EXPORT("gasLiquidData.xlsx", "gasLiquidData.xlsx", "燃气液位一体化数据"), + + CORRODEDATA_EXPORT("corrodeData.xlsx", "corrodeData.xlsx", "腐蚀数据"); /** * 导出模板相对路径 diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java new file mode 100644 index 0000000..952f920 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/ICorrodeDataService.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.datascope.DataScope; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public interface ICorrodeDataService { + +// List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId); +// + + /** + * 燃气数据查询 + */ + List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords); + +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java new file mode 100644 index 0000000..c676ed1 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/IGasFlowService.java @@ -0,0 +1,28 @@ +package com.casic.missiles.modular.system.service; + +import java.util.Map; + +public interface IGasFlowService { + + Map selectGasFlowDay(String devcode, String date); + + Map selectGasFlowMonth(String devcode, String month); + + Map selectGasFlowTotal(String devcode, String year); + + Map selectLatestGasFlow(String devcode); + + /** + * 总览查询用气量 + * + * @return {@link String} + */ + Map getOverview(); + + /** + * 统计气数量 + * + * @return {@link String} + */ + String getGasFlowCount(); +} diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java new file mode 100644 index 0000000..ea744b6 --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/CorrodeDataServiceImpl.java @@ -0,0 +1,41 @@ +package com.casic.missiles.modular.system.service.impl; + + +import com.baomidou.mybatisplus.plugins.Page; +import com.casic.missiles.core.common.service.ICommonPermissionService; +import com.casic.missiles.core.datascope.DataScope; +import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.system.dao.CorrodeDataMapper; +import com.casic.missiles.modular.system.service.ICorrodeDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CorrodeDataServiceImpl implements ICorrodeDataService { + + @Autowired + CorrodeDataMapper corrodeDataMapper; + @Autowired + ICommonPermissionService permissionService; + +// @Override +// public List> getCorrodelistPage(DataScope dataScope, int currentIndex, int pageSize, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline, String areaId) { +// return this.corrodeDataMapper.getCorrodelistPage(dataScope, currentIndex, pageSize, deviceType, deptid, beginTime, endTime, keywords, isOnline, areaId); +// } + + @Override + public List> getCorrodelistScopePage(DataScope dataScope, Page> page, String deptid, String beginTime, String endTime, String keywords) { + List> mapList = corrodeDataMapper.getCorrodelistScopePage(dataScope, page, deptid, beginTime, endTime, keywords); + for (Map map : mapList) { + map.put("deptName", permissionService.getDeptName(Long.valueOf(map.get("deptid").toString()))); + } + return mapList; + } + +} + diff --git a/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java new file mode 100644 index 0000000..c4b2c8a --- /dev/null +++ b/casic-device/src/main/java/com/casic/missiles/modular/system/service/impl/GasFlowServiceImpl.java @@ -0,0 +1,87 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.DeviceMapper; +import com.casic.missiles.modular.system.dao.GasFlowMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.Device; +import com.casic.missiles.modular.system.service.IGasFlowService; +import org.springframework.stereotype.Service; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + *

+ * 气体流量服务实现类 + *

+ * + * @author cz + * @since 2022-6-1 + */ +@Service +public class GasFlowServiceImpl extends ServiceImpl implements IGasFlowService { + + private SimpleDateFormat sdfY = new SimpleDateFormat("yyyy"); + private SimpleDateFormat sdfM = new SimpleDateFormat("yyyy-MM"); + private SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd"); + private DecimalFormat df2 = new DecimalFormat("0.00"); + + @Override + public Map selectGasFlowDay(String devcode, String date) { + return this.baseMapper.selectGasFlowDay(devcode, date); + } + + @Override + public Map selectGasFlowMonth(String devcode, String month) { + return this.baseMapper.selectGasFlowMonth(devcode, month); + } + + @Override + public Map selectGasFlowTotal(String devcode, String year) { + return this.baseMapper.selectGasFlowYear(devcode, year); + } + + @Override + public Map selectLatestGasFlow(String devcode) { + return this.baseMapper.selectLatestGasFlow(devcode); + } + + + @Override + public Map getOverview() { + Calendar calendar = Calendar.getInstance(); + String year = sdfY.format(calendar.getTime()); + String month = sdfM.format(calendar.getTime()); + String date = sdfD.format(calendar.getTime()); + + Map waterMeter = this.baseMapper.getGasFlow(year); + Map monthAcc = this.baseMapper.getGasFlowMonth(month); + Map todayAcc = this.baseMapper.getGasFlowDay(date, null); + Map prodTodayAcc = this.baseMapper.getGasFlowDay(date, "11"); + Map sound = this.baseMapper.getNoiseData(date); + + Map resultMap = new HashMap<>(); + resultMap.put("total", df2.format((Double) waterMeter.get("total"))); + resultMap.put("month", df2.format((Double) monthAcc.get("monthAcc"))); + resultMap.put("today", df2.format((Double) todayAcc.get("todayAcc"))); + resultMap.put("prodution", df2.format((Double) prodTodayAcc.get("todayAcc"))); + resultMap.put("sound", df2.format((Double) sound.get("sound"))); + + return resultMap; + } + + + /** + * 统计气数量 + * + * @return {@link String} + */ + @Override + public String getGasFlowCount() { + return this.baseMapper.getGasFlowCount(); + } +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java new file mode 100644 index 0000000..b1adf74 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowDayMapper.java @@ -0,0 +1,8 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowDay; + + +public interface DataGasFlowDayMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java new file mode 100644 index 0000000..1762d39 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMapper.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlow; +import com.casic.missiles.modular.system.model.DataWaterMeter; +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface DataGasFlowMapper extends BaseMapper { + DataWaterMeter selectLatestRecordByDevcode(@Param("devcode") String devcode, @Param("uptime") String uptime); + + Map selectLatestDayAccByDevice(@Param("devcode") String devcode, @Param("date") String date); + + Map isExistDataGasFlowMonth(@Param("devcode") String devcode, @Param("month") String month); + + void insertDataGasFlowDay(@Param("dataDay") Map dataDay); + + void insertDataGasFlowMonth(@Param("dataMonth") Map dataMonth); + + void updateDataGasFlowMonth(@Param("dataMonth") Map dataMonth, @Param("id") Long id); +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java new file mode 100644 index 0000000..15af027 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/DataGasFlowMonthMapper.java @@ -0,0 +1,7 @@ +package com.casic.missiles.modular.system.dao; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.casic.missiles.modular.system.model.DataGasFlowMonth; + +public interface DataGasFlowMonthMapper extends BaseMapper { +} diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml new file mode 100644 index 0000000..91a2c18 --- /dev/null +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataGasFlowMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + ID AS id, WELL_CODE AS wellCode, DEVCODE AS devcode, INSTANT_FLOW AS instantFlow, + INSTANTS_VELOCITY AS instantsVelocity, AMBOCETOR_TEMPERTURE AS ambocetorTemperture, + TOTAL_FLOW AS totalFlow,UPTIME AS uptime, LOGTIME AS logtime,DESCN AS descn, + + + + + + + + + + INSERT INTO data_gasflow_day (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_DATE,TOTAL_FLOW, DATE) + VALUES (#{dataDay.id},#{dataDay.wellCode}, #{dataDay.devCode}, #{dataDay.totalFlowDate}, + #{dataDay.totalFlow}, #{dataDay.date}) + + + + + INSERT INTO data_gasflow_month (ID,WELL_CODE, DEVCODE, TOTAL_FLOW_MONTH, FIRST_TOTAL, END_TOTAL, MONTH) + VALUES (#{dataDay.id},#{dataMonth.wellCode}, #{dataMonth.devCode}, #{dataMonth.totalFlowMonth}, + #{dataMonth.firstTotal}, #{dataMonth.endTotal}, #{dataMonth.month}) + + + + UPDATE data_gasflow_month + SET TOTAL_FLOW_MONTH = #{dataMonth.totalFlowMonth}, + END_FLOW = #{dataMonth.endTotal} + WHERE ID = #{id} + + + diff --git a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml index 3f5865b..fe49033 100644 --- a/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml +++ b/casic-sluicewell/src/main/java/com/casic/missiles/modular/system/dao/mapping/DataWaterMeterMapper.xml @@ -26,7 +26,7 @@ SELECT FROM data_watermeter where devcode = #{devcode} and unix_timestamp(uptime) < unix_timestamp(#{uptime}) order by uptime desc limit 1 - +