package com.minpay.common.service.impl; import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import com.minpay.common.constant.Constant; import com.minpay.common.service.IReportService; import com.minpay.common.util.CommonUtil; import com.minpay.common.util.DateUtil; import com.minpay.db.table.mapper.DwFileDetail01Mapper; import com.minpay.db.table.mapper.DwFileDetail03Mapper; import com.minpay.db.table.mapper.DwFileDetail04Mapper; import com.minpay.db.table.mapper.PubAppparMapper; import com.minpay.db.table.model.DwFileDetail01; import com.minpay.db.table.model.DwFileDetail01Example; import com.minpay.db.table.model.DwFileDetail03; import com.minpay.db.table.model.DwFileDetail03Example; import com.minpay.db.table.model.DwFileDetail04; import com.minpay.db.table.model.DwFileDetail04Example; import com.minpay.db.table.model.PubApppar; import com.minpay.db.table.model.PubAppparExample; import com.minpay.db.table.own.mapper.ReportServiceMapper; import com.startup.minpay.frame.exception.MINBusinessException; import com.startup.minpay.frame.service.base.IMINDataBaseService; import com.startup.minpay.frame.service.base.Service; import com.startup.minpay.frame.target.MINComponent; @MINComponent public class ReportServiceImpl implements IReportService { static Map totalMap = new HashMap(); //各区客户数 static Map customerMap = new HashMap(); // 台区停电停电时长 static List> fenduanList = new ArrayList>(); static { totalMap.put("xintai", "8382"); totalMap.put("daiyue", "4188"); totalMap.put("ningyang", "6292"); totalMap.put("taishan", "3784"); totalMap.put("dongping", "6212"); totalMap.put("feicheng", "6547"); totalMap.put("taishanjingqu", "1474"); totalMap.put("gaoxin", "1945"); totalMap.put("heji", "38824"); //客户数 customerMap.put("xintai", "593100"); customerMap.put("daiyue", "323455"); customerMap.put("ningyang", "301682"); customerMap.put("taishan", "376298"); customerMap.put("dongping", "298683"); customerMap.put("feicheng", "375994"); customerMap.put("jingqu", "120623"); customerMap.put("gaoxin", "162627"); customerMap.put("heji", "2552462"); // 0-1小时 Map map0To60 = new HashMap(); map0To60.put("start", "0"); map0To60.put("end", "60"); map0To60.put("desc", "0-1小时"); fenduanList.add(map0To60); // 1-6小时 Map map60To360 = new HashMap(); map60To360.put("start", "60"); map60To360.put("end", "360"); map60To360.put("desc", "1-6小时"); fenduanList.add(map60To360); // 6-12小时 Map map360To720 = new HashMap(); map360To720.put("start", "360"); map360To720.put("end", "720"); map360To720.put("desc", "6-12小时"); fenduanList.add(map360To720); // 12-24小时 Map map720To1440 = new HashMap(); map720To1440.put("start", "720"); map720To1440.put("end", "1440"); map720To1440.put("desc", "12-24小时"); fenduanList.add(map720To1440); // 24小时以上 Map mapGT1440 = new HashMap(); mapGT1440.put("start", "1440"); mapGT1440.put("desc", "24小时以上"); fenduanList.add(mapGT1440); } @Override public Map reportNeedDetail(Map param) throws MINBusinessException, ParseException { String range = param.get("range"); String timeRange = param.get("timeRange"); String reportTypeId = param.get("reportTypeId"); String firstFileId = param.get("firstFileId"); String secondFileId = param.get("secondFileId"); String FADateRange = param.get("FADateRange"); String yearChoose = param.get("yearChoose"); String DdyDateRange = param.get("DdyDateRange"); Map resMap = new HashMap(); // 台区停电日报 if (Constant.REPORT_TYPE_00.equals(reportTypeId)) { String monthNum = param.get("monthNum"); String countNum = param.get("countNum"); List> resList = reportTypeTQTDRB(range, timeRange, monthNum, countNum); resMap.put("resList", resList); // 台区停电周报 } else if (Constant.REPORT_TYPE_01.equals(reportTypeId)) { return reportTypeTQTDZB(range, timeRange); // 台区停电月报 } else if (Constant.REPORT_TYPE_02.equals(reportTypeId)) { return reportTypeTQTDYB(range, timeRange); // 终端投托运报表 } else if (Constant.REPORT_TYPE_03.equals(reportTypeId)) { List> resList = reportTypeZDDTYBB(firstFileId, secondFileId); resMap.put("resList", resList); // FA动作正确率 } else if (Constant.REPORT_TYPE_04.equals(reportTypeId)) { List> resList = reportTypeFADZBB(FADateRange, yearChoose); resMap.put("resList", resList); //低电压分析表 } else if (Constant.REPORT_TYPE_05.equals(reportTypeId)){ List> resList = reportTypeDDYZLFXB(range, reportTypeId); resMap.put("resList", resList); //低电压日报 } else if (Constant.REPORT_TYPE_06.equals(reportTypeId)){ List> resList = reportTypeDDYRB(DdyDateRange,yearChoose,range, reportTypeId); resMap.put("resList", resList); //过电压分析表 } else if (Constant.REPORT_TYPE_07.equals(reportTypeId)){ List> resList = reportTypeGDYZLFXB(range, reportTypeId); resMap.put("resList", resList); } else if (Constant.REPORT_TYPE_08.equals(reportTypeId)){ return reportType95598YB(range); } return resMap; } /** * 台区停电日报 * @param range 日期范围 * @param timeRange 时间段范围 * @param monthNum 几个月内停电 * @param countNum 停电次数 * @return * @throws MINBusinessException * @throws ParseException */ public List> reportTypeTQTDRB(String range, String timeRange, String monthNum, String countNum) throws MINBusinessException, ParseException { IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); List> resList = new ArrayList>(); Map param = new HashMap(); String beginTime = null; String endTime = null; range = range.replaceAll(" ", ""); String[] rangeArray = range.split("-"); timeRange = timeRange.replaceAll(" ", ""); if (CommonUtil.isEmpty(timeRange)) { beginTime = rangeArray[0] + "000000"; endTime = rangeArray[1] + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); beginTime = rangeArray[0] + timeRangeArray[0]; endTime = rangeArray[1] + timeRangeArray[1]; } param.put("beginTime", beginTime); param.put("endTime", endTime); List> fileList00 = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00(param); Map countMap = new HashMap(); countMap.put("xintai", "0"); countMap.put("daiyue", "0"); countMap.put("ningyang", "0"); countMap.put("taishan", "0"); countMap.put("dongping", "0"); countMap.put("feicheng", "0"); countMap.put("taishanjingqu", "0"); countMap.put("gaoxin", "0"); countMap.put("heji", "0"); for (Map map : fileList00) { if ("新泰".equals(map.get("area"))) { countMap.put("xintai",CommonUtil.add(countMap.get("xintai"), "1")); } else if ("岱岳".equals(map.get("area"))) { countMap.put("daiyue",CommonUtil.add(countMap.get("daiyue"), "1")); } else if ("宁阳".equals(map.get("area"))) { countMap.put("ningyang",CommonUtil.add(countMap.get("ningyang"), "1")); } else if ("泰山".equals(map.get("area"))) { countMap.put("taishan",CommonUtil.add(countMap.get("taishan"), "1")); } else if ("东平".equals(map.get("area"))) { countMap.put("dongping",CommonUtil.add(countMap.get("dongping"), "1")); } else if ("肥城".equals(map.get("area"))) { countMap.put("feicheng",CommonUtil.add(countMap.get("feicheng"), "1")); } else if ("泰山景区".equals(map.get("area"))) { countMap.put("taishanjingqu",CommonUtil.add(countMap.get("taishanjingqu"), "1")); } else if ("高新".equals(map.get("area"))) { countMap.put("gaoxin",CommonUtil.add(countMap.get("gaoxin"), "1")); } countMap.put("heji",CommonUtil.add(countMap.get("heji"), "1")); } List childList0 = new ArrayList(); childList0.add("分类\\单位"); childList0.add("新泰"); childList0.add("岱岳"); childList0.add("宁阳"); childList0.add("泰山"); childList0.add("东平"); childList0.add("肥城"); childList0.add("泰山景区"); childList0.add("高新"); childList0.add("合计"); resList.add(childList0); List childList1 = new ArrayList(); childList1.add("管辖台区数量"); childList1.add(totalMap.get("xintai")); childList1.add(totalMap.get("daiyue")); childList1.add(totalMap.get("ningyang")); childList1.add(totalMap.get("taishan")); childList1.add(totalMap.get("dongping")); childList1.add(totalMap.get("feicheng")); childList1.add(totalMap.get("taishanjingqu")); childList1.add(totalMap.get("gaoxin")); childList1.add(totalMap.get("heji")); resList.add(childList1); List childList2 = new ArrayList(); childList2.add("台区停电次数"); childList2.add(countMap.get("xintai")); childList2.add(countMap.get("daiyue")); childList2.add(countMap.get("ningyang")); childList2.add(countMap.get("taishan")); childList2.add(countMap.get("dongping")); childList2.add(countMap.get("feicheng")); childList2.add(countMap.get("taishanjingqu")); childList2.add(countMap.get("gaoxin")); childList2.add(countMap.get("heji")); resList.add(childList2); List childList3 = new ArrayList(); childList3.add("台区停运率"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("xintai"), totalMap.get("xintai"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("daiyue"), totalMap.get("daiyue"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("ningyang"), totalMap.get("ningyang"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("taishan"), totalMap.get("taishan"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("dongping"), totalMap.get("dongping"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("feicheng"), totalMap.get("feicheng"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("taishanjingqu"), totalMap.get("taishanjingqu"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("gaoxin"), totalMap.get("gaoxin"), 4), "100", 2) + "%"); childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("heji"), totalMap.get("heji"), 4), "100", 2) + "%"); resList.add(childList3); // 台区停电个数统计 Map tqtdGsMap = new HashMap(); tqtdGsMap.put("xintai", "0"); tqtdGsMap.put("daiyue", "0"); tqtdGsMap.put("ningyang", "0"); tqtdGsMap.put("taishan", "0"); tqtdGsMap.put("dongping", "0"); tqtdGsMap.put("feicheng", "0"); tqtdGsMap.put("taishanjingqu", "0"); tqtdGsMap.put("gaoxin", "0"); tqtdGsMap.put("heji", "0"); List> tqtdGsList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param); for (Map map : tqtdGsList) { if ("新泰".equals(map.get("area"))) { tqtdGsMap.put("xintai", map.get("num")); } else if ("岱岳".equals(map.get("area"))) { tqtdGsMap.put("daiyue", map.get("num")); } else if ("宁阳".equals(map.get("area"))) { tqtdGsMap.put("ningyang", map.get("num")); } else if ("泰山".equals(map.get("area"))) { tqtdGsMap.put("taishan", map.get("num")); } else if ("东平".equals(map.get("area"))) { tqtdGsMap.put("dongping", map.get("num")); } else if ("肥城".equals(map.get("area"))) { tqtdGsMap.put("feicheng", map.get("num")); } else if ("泰山景区".equals(map.get("area"))) { tqtdGsMap.put("taishanjingqu", map.get("num")); } else if ("高新".equals(map.get("area"))) { tqtdGsMap.put("gaoxin", map.get("num")); } tqtdGsMap.put("heji",CommonUtil.add(tqtdGsMap.get("heji"), map.get("num"))); } List childList4 = new ArrayList(); childList4.add("台区停电个数"); childList4.add(tqtdGsMap.get("xintai")); childList4.add(tqtdGsMap.get("daiyue")); childList4.add(tqtdGsMap.get("ningyang")); childList4.add(tqtdGsMap.get("taishan")); childList4.add(tqtdGsMap.get("dongping")); childList4.add(tqtdGsMap.get("feicheng")); childList4.add(tqtdGsMap.get("taishanjingqu")); childList4.add(tqtdGsMap.get("gaoxin")); childList4.add(tqtdGsMap.get("heji")); resList.add(childList4); // monthNum个月内停电 countNum次以上的台区 String beginDay = DateUtil.dateAddMonth(rangeArray[1], Integer.parseInt("-" + monthNum)); param.put("beginDay", beginDay); param.put("endDay", rangeArray[1]); param.put("countNum", countNum); List> mountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); Map taiQuMap = new HashMap(); taiQuMap.put("xintai", 0); taiQuMap.put("daiyue", 0); taiQuMap.put("ningyang", 0); taiQuMap.put("taishan", 0); taiQuMap.put("dongping", 0); taiQuMap.put("feicheng", 0); taiQuMap.put("taishanjingqu", 0); taiQuMap.put("gaoxin", 0); taiQuMap.put("heji", 0); for (Map map : mountCountList) { if ("新泰".equals(map.get("area"))) { taiQuMap.put("xintai",taiQuMap.get("xintai") + 1); } else if ("岱岳".equals(map.get("area"))) { taiQuMap.put("daiyue",taiQuMap.get("daiyue") + 1); } else if ("宁阳".equals(map.get("area"))) { taiQuMap.put("ningyang",taiQuMap.get("ningyang") + 1); } else if ("泰山".equals(map.get("area"))) { taiQuMap.put("taishan",taiQuMap.get("taishan") + 1); } else if ("东平".equals(map.get("area"))) { taiQuMap.put("dongping",taiQuMap.get("dongping") + 1); } else if ("肥城".equals(map.get("area"))) { taiQuMap.put("feicheng",taiQuMap.get("feicheng") + 1); } else if ("泰山景区".equals(map.get("area"))) { taiQuMap.put("taishanjingqu",taiQuMap.get("taishanjingqu") + 1); } else if ("高新".equals(map.get("area"))) { taiQuMap.put("gaoxin",taiQuMap.get("gaoxin") + 1); } taiQuMap.put("heji",taiQuMap.get("heji") + 1); } List childList6 = new ArrayList(); childList6.add(monthNum+"个月停电" + countNum + "次及以上台区"); childList6.add(taiQuMap.get("xintai").toString()); childList6.add(taiQuMap.get("daiyue").toString()); childList6.add(taiQuMap.get("ningyang").toString()); childList6.add(taiQuMap.get("taishan").toString()); childList6.add(taiQuMap.get("dongping").toString()); childList6.add(taiQuMap.get("feicheng").toString()); childList6.add(taiQuMap.get("taishanjingqu").toString()); childList6.add(taiQuMap.get("gaoxin").toString()); childList6.add(taiQuMap.get("heji").toString()); resList.add(childList6); // 查询昨日停电的数据 param.put("yesterday", DateUtil.dateAddDay(rangeArray[1], -1)); List> yesterdayList = db.getMybatisMapper(ReportServiceMapper.class).queryYesterdayDetail(param); param.put("yesterdayDetail", yesterdayList); List> yesterdayAndTDData = null; if (yesterdayList.size() != 0) { yesterdayAndTDData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); } else { yesterdayAndTDData = new ArrayList>(); } Map yesterdayTaiQuMap = new HashMap(); yesterdayTaiQuMap.put("xintai", 0); yesterdayTaiQuMap.put("daiyue", 0); yesterdayTaiQuMap.put("ningyang", 0); yesterdayTaiQuMap.put("taishan", 0); yesterdayTaiQuMap.put("dongping", 0); yesterdayTaiQuMap.put("feicheng", 0); yesterdayTaiQuMap.put("taishanjingqu", 0); yesterdayTaiQuMap.put("gaoxin", 0); yesterdayTaiQuMap.put("heji", 0); for (Map map : yesterdayAndTDData) { if ("新泰".equals(map.get("area"))) { yesterdayTaiQuMap.put("xintai",yesterdayTaiQuMap.get("xintai") + 1); } else if ("岱岳".equals(map.get("area"))) { yesterdayTaiQuMap.put("daiyue",yesterdayTaiQuMap.get("daiyue") + 1); } else if ("宁阳".equals(map.get("area"))) { yesterdayTaiQuMap.put("ningyang",yesterdayTaiQuMap.get("ningyang") + 1); } else if ("泰山".equals(map.get("area"))) { yesterdayTaiQuMap.put("taishan",yesterdayTaiQuMap.get("taishan") + 1); } else if ("东平".equals(map.get("area"))) { yesterdayTaiQuMap.put("dongping",yesterdayTaiQuMap.get("dongping") + 1); } else if ("肥城".equals(map.get("area"))) { yesterdayTaiQuMap.put("feicheng",yesterdayTaiQuMap.get("feicheng") + 1); } else if ("泰山景区".equals(map.get("area"))) { yesterdayTaiQuMap.put("taishanjingqu",yesterdayTaiQuMap.get("taishanjingqu") + 1); } else if ("高新".equals(map.get("area"))) { yesterdayTaiQuMap.put("gaoxin",yesterdayTaiQuMap.get("gaoxin") + 1); } yesterdayTaiQuMap.put("heji",yesterdayTaiQuMap.get("heji") + 1); } List childList7 = new ArrayList(); childList7.add(monthNum+"个月停电" + countNum + "次及以上台区且昨日停电"); childList7.add(yesterdayTaiQuMap.get("xintai").toString()); childList7.add(yesterdayTaiQuMap.get("daiyue").toString()); childList7.add(yesterdayTaiQuMap.get("ningyang").toString()); childList7.add(yesterdayTaiQuMap.get("taishan").toString()); childList7.add(yesterdayTaiQuMap.get("dongping").toString()); childList7.add(yesterdayTaiQuMap.get("feicheng").toString()); childList7.add(yesterdayTaiQuMap.get("taishanjingqu").toString()); childList7.add(yesterdayTaiQuMap.get("gaoxin").toString()); childList7.add(yesterdayTaiQuMap.get("heji").toString()); resList.add(childList7); // 2个月停电1次及以上台区且昨日停电的台区数据 beginDay = DateUtil.dateAddMonth(rangeArray[1], -2); param.put("beginDay", beginDay); param.put("countNum", 1); List> yiciData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); Map yiciMap = new HashMap(); yiciMap.put("xintai", 0); yiciMap.put("daiyue", 0); yiciMap.put("ningyang", 0); yiciMap.put("taishan", 0); yiciMap.put("dongping", 0); yiciMap.put("feicheng", 0); yiciMap.put("taishanjingqu", 0); yiciMap.put("gaoxin", 0); yiciMap.put("heji", 0); for (Map map : yiciData) { if ("新泰".equals(map.get("area"))) { yiciMap.put("xintai",yiciMap.get("xintai") + 1); } else if ("岱岳".equals(map.get("area"))) { yiciMap.put("daiyue",yiciMap.get("daiyue") + 1); } else if ("宁阳".equals(map.get("area"))) { yiciMap.put("ningyang",yiciMap.get("ningyang") + 1); } else if ("泰山".equals(map.get("area"))) { yiciMap.put("taishan",yiciMap.get("taishan") + 1); } else if ("东平".equals(map.get("area"))) { yiciMap.put("dongping",yiciMap.get("dongping") + 1); } else if ("肥城".equals(map.get("area"))) { yiciMap.put("feicheng",yiciMap.get("feicheng") + 1); } else if ("泰山景区".equals(map.get("area"))) { yiciMap.put("taishanjingqu",yiciMap.get("taishanjingqu") + 1); } else if ("高新".equals(map.get("area"))) { yiciMap.put("gaoxin",yiciMap.get("gaoxin") + 1); } yiciMap.put("heji",yiciMap.get("heji") + 1); } List childList8 = new ArrayList(); childList8.add("2个月停电1次及以上台区且昨日停电"); childList8.add(yiciMap.get("xintai").toString()); childList8.add(yiciMap.get("daiyue").toString()); childList8.add(yiciMap.get("ningyang").toString()); childList8.add(yiciMap.get("taishan").toString()); childList8.add(yiciMap.get("dongping").toString()); childList8.add(yiciMap.get("feicheng").toString()); childList8.add(yiciMap.get("taishanjingqu").toString()); childList8.add(yiciMap.get("gaoxin").toString()); childList8.add(yiciMap.get("heji").toString()); resList.add(childList8); return resList; } /** * 台区停电周报 * @param range * @param timeRange * @return * @throws MINBusinessException * @throws ParseException */ public Map reportTypeTQTDZB(String range, String timeRange) throws MINBusinessException, ParseException { Map resMap = new HashMap(); IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); Map param = new HashMap(); String beginTime = null; String endTime = null; range = range.replaceAll(" ", ""); String[] rangeArray = range.split("-"); timeRange = timeRange.replaceAll(" ", ""); if (CommonUtil.isEmpty(timeRange)) { beginTime = rangeArray[0] + "000000"; endTime = rangeArray[1] + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); beginTime = rangeArray[0] + timeRangeArray[0]; endTime = rangeArray[1] + timeRangeArray[1]; } param.put("beginTime", beginTime); param.put("endTime", endTime); List> resList = new ArrayList>(); List title = new ArrayList(); title.add("单位\\分类"); title.add("管理台区总数"); title.add("本周累计停电台次"); title.add("本周平均停电时长(小时)"); title.add("本周重复停电台区数"); title.add("本周督办频繁停电台次"); title.add("本周督办频繁停电台区数"); resList.add(title); List xintai = new ArrayList(); xintai.add("新泰"); xintai.add(totalMap.get("xintai")); List daiyue = new ArrayList(); daiyue.add("岱岳"); daiyue.add(totalMap.get("daiyue")); List ningyang = new ArrayList(); ningyang.add("宁阳"); ningyang.add(totalMap.get("ningyang")); List taishan = new ArrayList(); taishan.add("泰山"); taishan.add(totalMap.get("taishan")); List dongping = new ArrayList(); dongping.add("东平"); dongping.add(totalMap.get("dongping")); List feicheng = new ArrayList(); feicheng.add("肥城"); feicheng.add(totalMap.get("feicheng")); List taishanjingqu = new ArrayList(); taishanjingqu.add("泰山景区"); taishanjingqu.add(totalMap.get("taishanjingqu")); List gaoxin = new ArrayList(); gaoxin.add("高新"); gaoxin.add(totalMap.get("gaoxin")); List heji = new ArrayList(); heji.add("合计"); heji.add(totalMap.get("heji")); resList.add(xintai); resList.add(daiyue); resList.add(ningyang); resList.add(taishan); resList.add(dongping); resList.add(feicheng); resList.add(taishanjingqu); resList.add(gaoxin); resList.add(heji); //累计停电台次 List> areaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param); String totalCount = "0"; for (Map map : areaCountList) { String area = map.get("area"); String count = map.get("count"); if ("新泰".equals(area)) { xintai.add(count); } else if ("岱岳".equals(area)) { daiyue.add(count); } else if ("宁阳".equals(area)) { ningyang.add(count); } else if ("泰山".equals(area)) { taishan.add(count); } else if ("东平".equals(area)) { dongping.add(count); } else if ("肥城".equals(area)) { feicheng.add(count); } else if ("泰山景区".equals(area)) { taishanjingqu.add(count); } else if ("高新".equals(area)) { gaoxin.add(count); } totalCount = CommonUtil.add(totalCount, count); } heji.add(totalCount); // 没有数据的区域数值为0 for (List list : resList) { if (list.size() == 2) { list.add("0"); } } // 平均停电时长 String totalHour = "0"; List> areaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param); for (Map map : areaTimeList) { String area = map.get("area"); String timeMinute = map.get("timeMinute"); String count = map.get("count"); // 平均停电小时 String hour = CommonUtil.divide(CommonUtil.divide(timeMinute, count, 2), "60", 2); if ("新泰".equals(area)) { xintai.add(hour); } else if ("岱岳".equals(area)) { daiyue.add(hour); } else if ("宁阳".equals(area)) { ningyang.add(hour); } else if ("泰山".equals(area)) { taishan.add(hour); } else if ("东平".equals(area)) { dongping.add(hour); } else if ("肥城".equals(area)) { feicheng.add(hour); } else if ("泰山景区".equals(area)) { taishanjingqu.add(hour); } else if ("高新".equals(area)) { gaoxin.add(hour); } totalHour = CommonUtil.add(totalHour, hour); } heji.add(CommonUtil.divide(totalHour, totalCount, 2)); // 没有数据的区域数值为0 for (List list : resList) { if (list.size() == 3) { list.add("0"); } } // 本周重复停电台区数 param.put("beginDay", beginTime); param.put("endDay", endTime); param.put("countNum", "2"); String totalChongfu = "0"; List> twiceCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); for (Map map : twiceCountList) { String area = map.get("area"); if ("新泰".equals(area)) { if (xintai.size() >= 5) { xintai.set(4, CommonUtil.add(xintai.get(4), "1")); } else { xintai.add(4, "1"); } } else if ("岱岳".equals(area)) { if (daiyue.size() >= 5) { daiyue.set(4, CommonUtil.add(daiyue.get(4), "1")); } else { daiyue.add(4, "1"); } } else if ("宁阳".equals(area)) { if (ningyang.size() >= 5) { ningyang.set(4, CommonUtil.add(ningyang.get(4), "1")); } else { ningyang.add(4, "1"); } } else if ("泰山".equals(area)) { if (taishan.size() >= 5) { taishan.set(4, CommonUtil.add(taishan.get(4), "1")); } else { taishan.add(4, "1"); } } else if ("东平".equals(area)) { if (dongping.size() >= 5) { dongping.set(4, CommonUtil.add(dongping.get(4), "1")); } else { dongping.add(4, "1"); } } else if ("肥城".equals(area)) { if (feicheng.size() >= 5) { feicheng.set(4, CommonUtil.add(feicheng.get(4), "1")); } else { feicheng.add(4, "1"); } } else if ("泰山景区".equals(area)) { if (taishanjingqu.size() >= 5) { taishanjingqu.set(4, CommonUtil.add(taishanjingqu.get(4), "1")); } else { taishanjingqu.add(4, "1"); } } else if ("高新".equals(area)) { if (gaoxin.size() >= 5) { gaoxin.set(4, CommonUtil.add(gaoxin.get(4), "1")); } else { gaoxin.add(4, "1"); } } totalChongfu = CommonUtil.add(totalChongfu, "1"); } heji.add(totalChongfu); // 没有数据的区域数值为0 for (List list : resList) { if (list.size() == 4) { list.add("0"); } } String totalMonthChongfuTaici = "0"; String totalMonthChongfuTaishu = "0"; beginTime = DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1); if (CommonUtil.isEmpty(timeRange)) { param.put("beginDay", beginTime = DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1) + "000000"); } else { String[] timeRangeArray = timeRange.split("-"); param.put("beginDay", DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1) + timeRangeArray[0]); } param.put("endDay", endTime); param.put("countNum", "2"); List> twiceMonthCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); // 本周督办频繁停电台次/本周督办频繁停电台区数 for (Map map : twiceMonthCountList) { String area = map.get("area"); String num = map.get("num"); if ("新泰".equals(area)) { if (xintai.size() >= 6) { xintai.set(5, CommonUtil.add(xintai.get(5), num)); } else { xintai.add(5, num); } if (xintai.size() >= 7) { xintai.set(6, CommonUtil.add(xintai.get(6), "1")); } else { xintai.add(6, "1"); } } else if ("岱岳".equals(area)) { if (daiyue.size() >= 6) { daiyue.set(5, CommonUtil.add(daiyue.get(5), num)); } else { daiyue.add(5, num); } if (daiyue.size() >= 7) { daiyue.set(6, CommonUtil.add(daiyue.get(6), "1")); } else { daiyue.add(6, "1"); } } else if ("宁阳".equals(area)) { if (ningyang.size() >= 6) { ningyang.set(5, CommonUtil.add(ningyang.get(5), num)); } else { ningyang.add(5, num); } if (ningyang.size() >= 7) { ningyang.set(6, CommonUtil.add(ningyang.get(6), "1")); } else { ningyang.add(6, "1"); } } else if ("泰山".equals(area)) { if (taishan.size() >= 6) { taishan.set(5, CommonUtil.add(taishan.get(5), num)); } else { taishan.add(5, num); } if (taishan.size() >= 7) { taishan.set(6, CommonUtil.add(taishan.get(6), "1")); } else { taishan.add(6, "1"); } } else if ("东平".equals(area)) { if (dongping.size() >= 6) { dongping.set(5, CommonUtil.add(dongping.get(5), num)); } else { dongping.add(5, num); } if (dongping.size() >= 7) { dongping.set(6, CommonUtil.add(dongping.get(6), "1")); } else { dongping.add(6, "1"); } } else if ("肥城".equals(area)) { if (feicheng.size() >= 6) { feicheng.set(5, CommonUtil.add(feicheng.get(5), num)); } else { feicheng.add(5, num); } if (feicheng.size() >= 7) { feicheng.set(6, CommonUtil.add(feicheng.get(6), "1")); } else { feicheng.add(6, "1"); } } else if ("泰山景区".equals(area)) { if (taishanjingqu.size() >= 6) { taishanjingqu.set(5, CommonUtil.add(taishanjingqu.get(5), num)); } else { taishanjingqu.add(5, num); } if (taishanjingqu.size() >= 7) { taishanjingqu.set(6, CommonUtil.add(taishanjingqu.get(6), "1")); } else { taishanjingqu.add(6, "1"); } } else if ("高新".equals(area)) { if (gaoxin.size() >= 6) { gaoxin.set(5, CommonUtil.add(gaoxin.get(5), num)); } else { gaoxin.add(5, num); } if (gaoxin.size() >= 7) { gaoxin.set(6, CommonUtil.add(gaoxin.get(6), "1")); } else { gaoxin.add(6, "1"); } } totalMonthChongfuTaici= CommonUtil.add(totalMonthChongfuTaici, num); totalMonthChongfuTaishu = CommonUtil.add(totalMonthChongfuTaishu, "1"); } heji.add(totalMonthChongfuTaici); heji.add(totalMonthChongfuTaishu); // 环比 String huanbi = "0"; String huanbiBeginTime = DateUtil.dateAddMonth(rangeArray[1], -4); // 减四个月加一天 String huanbiEndTime = DateUtil.dateAddMonth(rangeArray[1], -2); // 减两个月 if (CommonUtil.isEmpty(timeRange)) { huanbiBeginTime = huanbiBeginTime + "000000"; huanbiEndTime = huanbiEndTime + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); huanbiBeginTime = huanbiBeginTime + timeRangeArray[0]; huanbiEndTime = huanbiEndTime + timeRangeArray[1]; } param.put("beginDay", huanbiBeginTime); param.put("endDay", huanbiEndTime); List> huanbiTwiceMonthCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); for (Map map : huanbiTwiceMonthCountList) { String num = map.get("num"); huanbi = CommonUtil.add(huanbi, num); } // 同比 String tongbi = "0"; String tongbiBeginTime = DateUtil.dateAddMonth(DateUtil.dateAddYear(rangeArray[1], -1), -2); // 减一年两个月 String tongbiEndTime = DateUtil.dateAddYear(rangeArray[1], -1); // 减一年 if (CommonUtil.isEmpty(timeRange)) { tongbiBeginTime = tongbiBeginTime + "000000"; tongbiEndTime = tongbiEndTime + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); tongbiBeginTime = tongbiBeginTime + timeRangeArray[0]; tongbiEndTime = tongbiEndTime + timeRangeArray[1]; } param.put("beginDay", tongbiBeginTime); param.put("endDay", tongbiEndTime); List> tongbiTwiceMonthCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); for (Map map : tongbiTwiceMonthCountList) { String num = map.get("num"); tongbi = CommonUtil.add(tongbi, num); } // 返回excel数据 resMap.put("excelList", resList); // 描述数据 Map dataMap = new HashMap(); dataMap.put("totalCount", totalCount); dataMap.put("pingjun", CommonUtil.divide(totalHour, totalCount, 2)); dataMap.put("twiceCount", totalChongfu); dataMap.put("dubanCount", totalMonthChongfuTaici); // 环比 if (CommonUtil.compare(totalMonthChongfuTaici, huanbi) == 1) { dataMap.put("huanbi", "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalMonthChongfuTaici, huanbi), huanbi, 4), "100", 2) + "%"); } else { dataMap.put("huanbi", "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(huanbi, totalMonthChongfuTaici), huanbi, 4), "100", 2) + "%"); } // 同比 if (CommonUtil.compare(totalMonthChongfuTaici, tongbi) == 1) { dataMap.put("tongbi", "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalMonthChongfuTaici, tongbi), tongbi, 4), "100", 2) + "%"); } else { dataMap.put("tongbi", "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tongbi, totalMonthChongfuTaici), tongbi, 4), "100", 2) + "%"); } resMap.put("dataMap", dataMap); String descStr = "

上周,台区累计停电${totalCount}台次,平均停电时长${pingjun}小时/台。停电两次及以上台区${twiceCount}个。

" +"上周,督办频繁停电(两个月内三次及以上)共计${dubanCount}台次,环比${huanbi},同比${tongbi}。"; resMap.put("descStr", descStr); return resMap; } /** * 台区停电月报 * @param range * @param timeRange * @return * @throws MINBusinessException * @throws ParseException */ public Map reportTypeTQTDYB(String range, String timeRange) throws MINBusinessException, ParseException{ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); Map param = new HashMap(); String beginTime = null; String endTime = null; range = range.replaceAll(" ", ""); String[] rangeArray = range.split("-"); timeRange = timeRange.replaceAll(" ", ""); if (CommonUtil.isEmpty(timeRange)) { beginTime = rangeArray[0] + "000000"; endTime = rangeArray[1] + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); beginTime = rangeArray[0] + timeRangeArray[0]; endTime = rangeArray[1] + timeRangeArray[1]; } param.put("beginTime", beginTime); param.put("endTime", endTime); /** 本月数据---- start ----*/ //停电台次 List> areaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param); //停电时长 List> areaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param); //停电台区数 param.put("beginDay", beginTime); param.put("endDay", endTime); param.put("countNum", "1"); List> taiquCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); /** 本月数据---- end ----*/ /** 去年同月数据---- start ----*/ if (CommonUtil.isEmpty(timeRange)) { beginTime = DateUtil.dateAddYear(rangeArray[0], -1) + "000000"; endTime = DateUtil.dateAddYear(rangeArray[1], -1) + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); beginTime = DateUtil.dateAddYear(rangeArray[0], -1) + timeRangeArray[0]; endTime = DateUtil.dateAddYear(rangeArray[1], -1) + timeRangeArray[1]; } param.put("beginTime", beginTime); param.put("endTime", endTime); List> tbAreaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param); List> tbAreaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param); /** 去年同月数据---- end ----*/ /** 上月月数据---- start ----*/ if (CommonUtil.isEmpty(timeRange)) { beginTime = DateUtil.dateAddMonth(rangeArray[0], -1) + "000000"; endTime = DateUtil.dateAddMonth(rangeArray[1], -1) + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); beginTime = DateUtil.dateAddMonth(rangeArray[0], -1) + timeRangeArray[0]; endTime = DateUtil.dateAddMonth(rangeArray[1], -1) + timeRangeArray[1]; } param.put("beginTime", beginTime); param.put("endTime", endTime); List> hbAreaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param); List> hbAreaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param); /** 上月月数据---- end ----*/ /** 停电台区数 ----start----*/ String totalCount = "0"; for (int i = 0; i < taiquCountList.size(); i++) { totalCount = CommonUtil.add(taiquCountList.get(i).get("num"), totalCount); } /** 停电台区数 ---- end ----*/ /**停电次数数据处理----start----*/ Integer month = Integer.parseInt(rangeArray[1].substring(4,6)); String benyueCount = "0"; String tbCount = "0"; String hbCount = "0"; for (int i = 0; i < areaCountList.size(); i++) { benyueCount = CommonUtil.add(areaCountList.get(i).get("num"), benyueCount); } for (int i = 0; i < tbAreaCountList.size(); i++) { tbCount = CommonUtil.add(tbAreaCountList.get(i).get("num"), tbCount); } for (int i = 0; i < hbAreaCountList.size(); i++) { hbCount = CommonUtil.add(hbAreaCountList.get(i).get("num"), hbCount); } // 同比描述 String tongbi = null; if (CommonUtil.compare(benyueCount, tbCount) == 1) { tongbi = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueCount, tbCount), tbCount,4), "100", 2) + "%"; } else { tongbi = "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbCount, benyueCount), tbCount,4), "100", 2) + "%"; } // 环比描述 String huanbi = null; if (CommonUtil.compare(benyueCount, hbCount) == 1) { huanbi = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueCount, hbCount), hbCount,4), "100", 2) + "%"; } else { huanbi = "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(hbCount, benyueCount), hbCount,4), "100", 2) + "%"; } int shejiNum = areaCountList.size(); String shejiDesc = ""; for (int i = 0; i < areaCountList.size(); i++) { if (i == areaCountList.size() - 1) { shejiDesc += areaCountList.get(i).get("area") +areaCountList.get(i).get("num")+"台次,占比"+CommonUtil.multiply(CommonUtil.divide(areaCountList.get(i).get("num"), benyueCount, 4), "100", 2)+"%。"; } else { shejiDesc += areaCountList.get(i).get("area") +areaCountList.get(i).get("num")+"台次,占比"+CommonUtil.multiply(CommonUtil.divide(areaCountList.get(i).get("num"), benyueCount, 4), "100", 2)+"%,"; } } /**停电次数数据处理----end----*/ /**停电时长数据处理----start----*/ String benyueTime = "0"; String tbTime = "0"; String hbTime = "0"; for (int i = 0; i < areaTimeList.size(); i++) { benyueTime = CommonUtil.add(areaTimeList.get(i).get("timeMinute"), benyueTime); } for (int i = 0; i < tbAreaTimeList.size(); i++) { tbTime = CommonUtil.add(tbAreaTimeList.get(i).get("timeMinute"), tbTime); } for (int i = 0; i < hbAreaTimeList.size(); i++) { hbTime = CommonUtil.add(hbAreaTimeList.get(i).get("timeMinute"), hbTime); } // sql算的是分钟,转换成小时 benyueTime = CommonUtil.divide(benyueTime, "60", 2); tbTime = CommonUtil.divide(tbTime, "60", 2); hbTime = CommonUtil.divide(hbTime, "60", 2); // 平均时长 String pingjunHour = CommonUtil.divide(benyueTime, totalCount, 2); // 同比数据 String tongbiPingjunHour = null; if (CommonUtil.compare(benyueTime, tbTime) == 1) { tongbiPingjunHour = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueTime, tbTime), tbTime, 4), "100", 2)+"%"; } else { tongbiPingjunHour = "下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbTime, benyueTime), tbTime, 4), "100", 2)+"%"; } // 环比数据 String huanbiPingjunHour = null; if (CommonUtil.compare(benyueTime, hbTime) == 1) { huanbiPingjunHour = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueTime, hbTime), hbTime, 4), "100", 2)+"%"; } else { huanbiPingjunHour = "下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(hbTime, benyueTime), hbTime, 4), "100", 2)+"%"; } // 台区平均停电时长描述 String areaPingjunDesc = ""; for (int i = 0; i < areaTimeList.size(); i++) { String pingjunTime = CommonUtil.divide(CommonUtil.divide(areaTimeList.get(i).get("timeMinute"), areaTimeList.get(i).get("count"), 2),"60", 2); if (areaTimeList.size() - 1 == i) { areaPingjunDesc += areaTimeList.get(i).get("area")+pingjunTime+"小时;"; } else { areaPingjunDesc += areaTimeList.get(i).get("area")+pingjunTime+"小时、"; } } // 区域平均时长同比 String tbAreaPingjunDesc = ""; for (int i = 0; i < areaTimeList.size(); i++) { String pingjunTime = CommonUtil.divide(CommonUtil.divide(areaTimeList.get(i).get("timeMinute"), areaTimeList.get(i).get("count"), 2),"60", 2); for (int j = 0; j < tbAreaTimeList.size(); j++) { if (areaTimeList.get(i).get("area").equals(tbAreaTimeList.get(j).get("area"))) { String tbPingjunTime = CommonUtil.divide(CommonUtil.divide(tbAreaTimeList.get(j).get("timeMinute"), tbAreaTimeList.get(j).get("count"), 2),"60", 2); if (CommonUtil.compare(pingjunTime, tbPingjunTime) == 1) { if (i == areaTimeList.size() - 1) { tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比上升" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunTime, tbPingjunTime), tbPingjunTime, 4), "100", 2)+"%。"; } else { tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比上升" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunTime, tbPingjunTime), tbPingjunTime, 4), "100", 2)+"%、"; } } else { if (i == areaTimeList.size() - 1) { tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbPingjunTime, pingjunTime), tbPingjunTime, 4), "100", 2)+"%。"; } else { tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbPingjunTime, pingjunTime), tbPingjunTime, 4), "100", 2)+"%、"; } } break; } } } // 重新计算开始时间和结束时间 if (CommonUtil.isEmpty(timeRange)) { beginTime = rangeArray[0] + "000000"; endTime = rangeArray[1] + "235959"; } else { String[] timeRangeArray = timeRange.split("-"); beginTime = rangeArray[0] + timeRangeArray[0]; endTime = rangeArray[1] + timeRangeArray[1]; } // 分段台区数 String fenduanDesc = ""; for (int i = 0; i < fenduanList.size(); i ++) { Map shiduanMap = fenduanList.get(i); shiduanMap.put("beginTime", beginTime); shiduanMap.put("endTime", endTime); String num = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00FenDuan(shiduanMap); String zhanbi = CommonUtil.multiply(CommonUtil.divide(num, totalCount, 4), "100", 2); if (i == fenduanList.size() - 1) { fenduanDesc += shiduanMap.get("desc")+ "的" + num+ "台,占比"+zhanbi+"%。"; } else { fenduanDesc += shiduanMap.get("desc")+ "的" + num+ "台,占比"+zhanbi+"%;"; } } param.put("beginTime", beginTime); param.put("endTime", endTime); // 最长停电台区 List> zuichangTaiquList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00ZuichangTaiqu(param); String zuichangTaiQu = ""; String zuichangTaiQuTime = ""; String qiciTaiQu = ""; String qiciTaiQuTime = ""; if (zuichangTaiquList.size() > 0) { zuichangTaiQu = zuichangTaiquList.get(0).get("addressName"); zuichangTaiQuTime = CommonUtil.divide(zuichangTaiquList.get(0).get("timeMinute"), "60", 2); if (zuichangTaiquList.size() > 1) { qiciTaiQu = zuichangTaiquList.get(1).get("addressName"); qiciTaiQuTime = CommonUtil.divide(zuichangTaiquList.get(1).get("timeMinute"), "60", 2); } } // 两个月内停电2次以上的数据 String beginDay = DateUtil.dateAddMonth(rangeArray[1], Integer.parseInt("-2")); param.put("beginDay", beginDay); param.put("endDay", rangeArray[1]); param.put("countNum", "2"); List> twiceMountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); Map taiQuMapTwice = new HashMap();//区域统计 String totalCountTwice = "0"; for (Map map : twiceMountCountList) { String area = map.get("area"); // 已存在 if (taiQuMapTwice.containsKey(area)) { taiQuMapTwice.put(map.get("area"), taiQuMapTwice.get(map.get("area"))+1); } else { taiQuMapTwice.put(map.get("area"), 1); } totalCountTwice = CommonUtil.add(totalCountTwice, "1"); } String totalCountTwiceDesc = ""; for (Map.Entry entry : taiQuMapTwice.entrySet()) { totalCountTwiceDesc += entry.getKey() + entry.getValue()+"台,占比"+CommonUtil.multiply(CommonUtil.divide(entry.getValue().toString(), totalCountTwice, 4), "100", 2)+"%;"; } totalCountTwiceDesc = totalCountTwiceDesc.substring(0,totalCountTwiceDesc.length() - 1) + "。"; Map countMapTwice = new HashMap(); for (Map map : twiceMountCountList) { String num = map.get("num"); // 已存在 if (countMapTwice.containsKey(num)) { countMapTwice.put(num, countMapTwice.get(num) + 1); } else { countMapTwice.put(num, 1); } } String countMapTwiceDesc = ""; for (Map.Entry entry : countMapTwice.entrySet()) { countMapTwiceDesc += "停电" + entry.getKey() + "次的" + entry.getValue() + "台,占比" + CommonUtil.multiply(CommonUtil.divide(entry.getValue().toString(), totalCountTwice, 4), "100", 2)+"%;"; } countMapTwiceDesc = countMapTwiceDesc.substring(0,countMapTwiceDesc.length() - 1) + "。"; // 两个月内停电3次以上的数据 param.put("countNum", "3"); List> thipleMountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param); String totalCountthiple = String.valueOf(thipleMountCountList.size()); /**停电次数数据处理----end----*/ String descStr = "

(1)台区停电总体情况${month}月份,台区累计停电${benyueCount}台次,同比${tongbi},环比${huanbi},涉及${shejiNum}个台区,${shejiDesc}

" + "

(2)台区停电时长情况${totalCount}个台区累计停电时间${benyueTime}小时,平均停电时长${pingjunHour}小时,同比${tongbiPingjunHour},环比${huanbiPingjunHour}。台区平均停电时间为${areaPingjunDesc}从同比情况看,${tbAreaPingjunDesc}

" + "

台区停电时长在${fenduanDesc}停电时长最长的为${zuichangTaiQu},停电${zuichangTaiQuTime}小时,其次是${qiciTaiQu},停电时长${qiciTaiQuTime}小时。

" + "

(3)台区重复停电情况两个月内停电2次及以上的台变${totalCountTwice}个,其中${totalCountTwiceDesc}${totalCountTwice}个重复停电台变中,${countMapTwiceDesc}两个月内停电3次及以上的台变${totalCountthiple}个。

"; Map dataMap = new HashMap(); dataMap.put("month", month); dataMap.put("benyueCount", benyueCount); dataMap.put("tongbi", tongbi); dataMap.put("huanbi", huanbi); dataMap.put("shejiNum", shejiNum); dataMap.put("shejiDesc", shejiDesc); dataMap.put("totalCount", totalCount); dataMap.put("benyueTime", benyueTime); dataMap.put("pingjunHour", pingjunHour); dataMap.put("tongbiPingjunHour", tongbiPingjunHour); dataMap.put("huanbiPingjunHour", huanbiPingjunHour); dataMap.put("areaPingjunDesc", areaPingjunDesc); dataMap.put("tbAreaPingjunDesc", tbAreaPingjunDesc); dataMap.put("fenduanDesc", fenduanDesc); dataMap.put("zuichangTaiQu", zuichangTaiQu); dataMap.put("zuichangTaiQuTime", zuichangTaiQuTime); dataMap.put("qiciTaiQu", qiciTaiQu); dataMap.put("qiciTaiQuTime", qiciTaiQuTime); dataMap.put("totalCountTwice", totalCountTwice); dataMap.put("totalCountTwiceDesc", totalCountTwiceDesc); dataMap.put("countMapTwiceDesc", countMapTwiceDesc); dataMap.put("totalCountthiple", totalCountthiple); Map resMap = new HashMap(); resMap.put("dataMap", dataMap); resMap.put("descStr", descStr); return resMap; } public List> reportTypeZDDTYBB(String firstFileId, String secondFileId) throws MINBusinessException{ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); List> resList = new ArrayList>(); List titleList = new ArrayList(); titleList.add("ID"); titleList.add("TNAME"); titleList.add("CMODE"); titleList.add("VALUE"); titleList.add("facname"); titleList.add("type"); titleList.add("fdid"); titleList.add("yxstatus"); titleList.add("tytime"); titleList.add("SRC"); resList.add(titleList); DwFileDetail01Example fileDetail01Example = new DwFileDetail01Example(); fileDetail01Example.createCriteria().andFileIdEqualTo(firstFileId); // 选择文件 List firstList = db.selectByExample(DwFileDetail01Mapper.class, fileDetail01Example); fileDetail01Example.clear(); // 对比文件 fileDetail01Example.createCriteria().andFileIdEqualTo(secondFileId); List secondList = db.selectByExample(DwFileDetail01Mapper.class, fileDetail01Example); for (DwFileDetail01 first : firstList) { String firstExcelId = first.getExcelId(); boolean flag = false; for (DwFileDetail01 second : secondList) { String secondExcelId = second.getExcelId(); if (firstExcelId.equals(secondExcelId)) { flag = true; break; } } if (!flag) { List resChildList = new ArrayList(); resChildList.add(first.getExcelId()); resChildList.add(first.getExcelTname()); resChildList.add(first.getExcelCmode()); resChildList.add(first.getExcelValue()); resChildList.add(first.getExcelFacname()); resChildList.add(first.getExcelFdid()); resChildList.add(first.getExcelType()); resChildList.add(first.getExcelYxstatus()); resChildList.add(first.getExcelTytime()); resChildList.add("退出"); resList.add(resChildList); } } for (DwFileDetail01 second : secondList) { String secondExcelId = second.getExcelId(); boolean flag = false; for (DwFileDetail01 first : firstList) { String firstExcelId = first.getExcelId(); if (secondExcelId.equals(firstExcelId)) { flag = true; break; } } if (!flag) { List resChildList = new ArrayList(); resChildList.add(second.getExcelId()); resChildList.add(second.getExcelTname()); resChildList.add(second.getExcelCmode()); resChildList.add(second.getExcelValue()); resChildList.add(second.getExcelFacname()); resChildList.add(second.getExcelFdid()); resChildList.add(second.getExcelType()); resChildList.add(second.getExcelYxstatus()); resChildList.add(second.getExcelTytime()); resChildList.add("投入"); resList.add(resChildList); } } return resList; } public List> reportTypeFADZBB(String FADateRange, String yearChoose) throws MINBusinessException, ParseException{ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); List> resList = new ArrayList>(); List titleList = new ArrayList(); titleList.add("故障区间判断正确率"); titleList.add("故障区间判断正确环比"); titleList.add("故障前后段恢复正确率"); titleList.add("故障前后段恢复正确环比"); titleList.add("配电线路故障自愈成功率"); titleList.add("配电线路故障自愈成功环比"); resList.add(titleList); Date beginTimeDate = DateUtil.parseDate(yearChoose + FADateRange.substring(0, 4), "yyyyMMdd"); String beginTime = DateUtil.format(beginTimeDate, "yyyyMMdd"); String endTime = yearChoose + FADateRange.substring(4, 8); // 开始月份是12,年份取下一年 if ("12".equals(beginTime.substring(0, 2))) { endTime = CommonUtil.add(yearChoose, "1") + FADateRange.substring(4, 8); } Map param = new HashMap(); param.put("beginTime", beginTime); param.put("endTime", endTime); List> GZQJPDList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPD(param); List> GZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQHDHF(param); List> GZQJPDAndGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPDAndGZQHDHF(param); // 环比日期 String huanbiEndTime = DateUtil.dateAddDay(beginTime, -1); PubAppparExample appparExample = new PubAppparExample(); appparExample.createCriteria().andCodeEqualTo("FADateRange").andValueLike("%"+huanbiEndTime.substring(4, 8)); List appparList = db.getMybatisMapper(PubAppparMapper.class).selectByExample(appparExample); if (appparList.size() != 1) { throw new MINBusinessException("FA动作正确率日期区间获取错误!"); } PubApppar apppar = appparList.get(0); String value = apppar.getValue(); String huanbiBeginTime = huanbiEndTime.substring(0, 4) + value.substring(0, 4); // 结束月是1月,年份取上一年 if ("01".equals(huanbiBeginTime.substring(4, 6))) { huanbiBeginTime = CommonUtil.subtract(huanbiEndTime.substring(0, 4), "1") + value.substring(0, 4); } List> huanbiGZQJPDList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPD(param); List> huanbiGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQHDHF(param); List> huanbiGZQJPDAndGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPDAndGZQHDHF(param); List childList = new ArrayList(); // 故障区间判断正确率 if (GZQJPDList.size() == 0) { childList.add("无数据"); } else { String zhengqueCount = "0"; String totalNum = "0"; for (Map dataMap : GZQJPDList) { if ("正确".equals(dataMap.get("gzqjpd").trim())) { zhengqueCount = dataMap.get("num"); } totalNum = CommonUtil.add(totalNum, dataMap.get("num")); } childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%"); } // 故障区间判断正确环比 if (huanbiGZQJPDList.size() == 0) { childList.add("无数据"); } else { String zhengqueCount = "0"; String totalNum = "0"; for (Map dataMap : huanbiGZQJPDList) { if ("正确".equals(dataMap.get("gzqjpd").trim())) { zhengqueCount = dataMap.get("num"); } totalNum = CommonUtil.add(totalNum, dataMap.get("num")); } childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%"); } // 故障前后段恢复正确率 if (GZQHDHFList.size() == 0) { childList.add("无数据"); } else { String zhengqueCount = "0"; String totalNum = "0"; for (Map dataMap : GZQHDHFList) { if ("正确".equals(dataMap.get("gzqhdhf").trim())) { zhengqueCount = dataMap.get("num"); } totalNum = CommonUtil.add(totalNum, dataMap.get("num")); } childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%"); } // 故障前后段恢复正确环比 if (huanbiGZQHDHFList.size() == 0) { childList.add("无数据"); } else { String zhengqueCount = "0"; String totalNum = "0"; for (Map dataMap : huanbiGZQHDHFList) { if ("正确".equals(dataMap.get("gzqhdhf").trim())) { zhengqueCount = dataMap.get("num"); } totalNum = CommonUtil.add(totalNum, dataMap.get("num")); } childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%"); } // 配电线路故障自愈成功率 if (GZQJPDAndGZQHDHFList.size() == 0) { childList.add("无数据"); } else { String zhengqueCount = "0"; String totalNum = "0"; for (Map dataMap : huanbiGZQHDHFList) { // 故障区间判断、故障前后段恢复均为正确的数量/总数量 if ("正确".equals(dataMap.get("gzqhdhf")) && "正确".equals(dataMap.get("gzqjpd"))) { zhengqueCount = dataMap.get("num"); } totalNum = CommonUtil.add(totalNum, dataMap.get("num")); } childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%"); } // 配电线路故障自愈成功环比 if (huanbiGZQJPDAndGZQHDHFList.size() == 0) { childList.add("无数据"); } else { String zhengqueCount = "0"; String totalNum = "0"; for (Map dataMap : huanbiGZQJPDAndGZQHDHFList) { // 故障区间判断、故障前后段恢复均为正确的数量/总数量 if ("正确".equals(dataMap.get("gzqhdhf").trim()) && "正确".equals(dataMap.get("gzqjpd").trim())) { zhengqueCount = dataMap.get("num"); } totalNum = CommonUtil.add(totalNum, dataMap.get("num")); } childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%"); } resList.add(childList); return resList; } /** * 低电压治理分析表 * @param range * @param reportTypeId * @return * @throws MINBusinessException * @throws ParseException */ public List> reportTypeDDYZLFXB(String range, String reportTypeId) throws MINBusinessException, ParseException{ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); List> resList = new ArrayList>(); List titleList = new ArrayList(); titleList.add("序号"); titleList.add("县公司名称"); titleList.add("用户管理单位名称"); titleList.add("线路名称"); titleList.add("台区ID"); titleList.add("变压器名称"); titleList.add("用户编号"); titleList.add("低电压时长"); titleList.add("累计天数"); titleList.add("低电压主要原因(点选)"); titleList.add("具体原因"); titleList.add("治理措施"); titleList.add("是否治理(点选)"); titleList.add("治理完成时间"); titleList.add("是否消除"); range = range.replaceAll(" ", ""); String[] rangeArray = range.split("-"); String beginTime = rangeArray[0]; String endTime = rangeArray[1]; List childLists = new ArrayList(); childLists.add("1.数据来源:智能化供电服务指挥系统;因系统数据滞后,统计时间为:"+CommonUtil.dateFormat(beginTime,"yyyy年MM月dd日")+"——"+CommonUtil.dateFormat(endTime,"yyyy年MM月dd日")+",每日发生低电压客户已标红,受考核用户已标黄,累计时长≥15小时的预警用户标褐红色需重点治理。每日新增预警及考核用户编号已标红。2.反馈要求:请各单位照实填写,按时反馈,具体原因请填写详细,治理完成的填写治理完成时间。未填写或填写不详细的一律列入考核,请知悉。3.低电压是否消除:以供电服务指挥系统数据为依据,连续7天未发生低电压视为低电压消除。"); resList.add(childLists); int count = DateUtil.diffDate(beginTime, endTime); //日期集合 List dateList = new ArrayList(); for(int i=0;i<=count;i++){ String beginDate = DateUtil.dateAddDay(endTime,-i); dateList.add(beginDate); beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6); titleList.add(beginDate+"低电压时长"); } //子类数据 resList.add(titleList); //查询累计天数以及累计时长 Map param = new HashMap(); param.put("beginTime", beginTime); param.put("endTime", endTime); List> DDYZLFXBList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYZLFXB(param); int a = 0; for(Map map :DDYZLFXBList){ List childList = new ArrayList(); String dysc = String.format("%.0f",map.get("dysc")); String ljts = String.format("%.0f",map.get("ljts")); a++; childList.add(a+""); childList.add(map.get("xgsmc")); childList.add(map.get("yhgldw")); childList.add(map.get("xlmc")); childList.add(map.get("tqid")); childList.add(map.get("byqmc")); childList.add(map.get("yhid")); childList.add(dysc); childList.add(ljts); childList.add(""); childList.add(""); childList.add(""); childList.add(""); childList.add(""); //查询该用户低电压明细 DwFileDetail03Example example03 = new DwFileDetail03Example(); example03.createCriteria().andYhidEqualTo(map.get("yhid")).andSjrqBetween(beginTime, endTime); example03.setOrderByClause("DFD3_SJRQ desc"); List DateList = db.selectByExample(DwFileDetail03Mapper.class, example03); int countJg = DateUtil.diffDate(DateList.get(0).getSjrq(), endTime); //查询是否低电压已消除 if(countJg>=7){ childList.add("是"); }else{ childList.add(""); } //循环加载低电压时长 for(String date:dateList){ int b = 0; for(DwFileDetail03 detail:DateList){ if(date.equals(detail.getSjrq())){ childList.add(detail.getDysc()); b=1; break; } } if(b == 0){ childList.add(""); } } resList.add(childList); } // resList.add(DDYZLFXBList); return resList; } /** * 低电压日报 * @param range * @param reportTypeId * @return * @throws MINBusinessException * @throws ParseException */ public List> reportTypeDDYRB(String DdyDateRange, String yearChoose,String range, String reportTypeId) throws MINBusinessException, ParseException{ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); List> resList = new ArrayList>(); List titleList = new ArrayList(); Date beginTimeDate = DateUtil.parseDate(yearChoose + DdyDateRange.substring(0, 4), "yyyyMMdd"); String beginTime = DateUtil.format(beginTimeDate, "yyyyMMdd"); String endTime = yearChoose + DdyDateRange.substring(4, 8); // 开始月份是12,年份取下一年 if ("12".equals(beginTime.substring(0, 2))) { endTime = CommonUtil.add(yearChoose, "1") + DdyDateRange.substring(4, 8); } Map countMap = new HashMap(); countMap.put("xintai", "0"); countMap.put("daiyue", "0"); countMap.put("ningyang", "0"); countMap.put("taishan", "0"); countMap.put("dongping", "0"); countMap.put("feicheng", "0"); countMap.put("taishanjingqu", "0"); countMap.put("gaoxin", "0"); countMap.put("heji", "0"); List title = new ArrayList(); //标题 List childList0 = new ArrayList(); childList0.add("分类\\单位"); childList0.add("岱岳"); childList0.add("新泰"); childList0.add("高新"); childList0.add("泰山"); childList0.add("宁阳"); childList0.add("景区"); childList0.add("东平"); childList0.add("肥城"); childList0.add("合计"); // resList.add(childList0); //客户总数 List childList1 = new ArrayList(); childList1.add("客户总数"); childList1.add(customerMap.get("daiyue")); childList1.add(customerMap.get("xintai")); childList1.add(customerMap.get("gaoxin")); childList1.add(customerMap.get("taishan")); childList1.add(customerMap.get("ningyang")); childList1.add(customerMap.get("jingqu")); childList1.add(customerMap.get("dongping")); childList1.add(customerMap.get("feicheng")); childList1.add(customerMap.get("heji")); // resList.add(childList1); //低电压客户数 List childList2 = new ArrayList(); childList2.add("低电压客户数"); for(String name:childList0){ if("分类\\单位".equals(name)){ continue; } DwFileDetail03Example example03 = new DwFileDetail03Example(); if("合计".equals(name)){ example03.createCriteria().andSjrqBetween(beginTime, endTime); }else{ example03.createCriteria().andSjrqBetween(beginTime, endTime).andXgsmcLike(name+"%"); } List DateList = db.selectByExample(DwFileDetail03Mapper.class, example03); childList2.add(DateList.size()+""); } // resList.add(childList2); //低电压客户占比 List childList3 = new ArrayList(); childList3.add("低电压客户占比"); for(int i=1;i childList4 = new ArrayList(); childList4.add("昨日新增考核户数"); for(int i=1;i map = new HashMap(); if(!"合计".equals(childList0.get(i))){ map.put("area", childList0.get(i)); } map.put("beginTime", beginTime); map.put("endTime", endTimes); List> fileList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map); map.put("endTime", endTime); List> fileList1 = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map); childList4.add((fileList1.size()-fileList.size())+""); } // resList.add(childList4); //截至目前未治理完成户数 List childList5 = new ArrayList(); childList5.add("截至目前未治理完成户数"); //用户id List childList6 = new ArrayList(); for(int i=1;i map = new HashMap(); if(!"合计".equals(childList0.get(i))){ map.put("area", childList0.get(i)); } map.put("beginTime", beginTime); map.put("endTime", range); List> fileList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map); if(dayCount<6){ childList5.add(fileList.size()+""); }else{ for(Map maps:fileList){ childList6.add(maps.get("yhid")); } example.createCriteria().andSjrqBetween(beginTimes, range).andYhidIn(childList6); List DateList = db.selectByExample(DwFileDetail03Mapper.class, example); childList5.add(DateList.size()+""); } } String content = "昨日新增受考核低电压客户"+childList4.get(childList4.size()-1)+"户,按单位分:"; for(int i=1;i> reportTypeGDYZLFXB(String range, String reportTypeId) throws MINBusinessException, ParseException{ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); List> resList = new ArrayList>(); List titleList = new ArrayList(); titleList.add("序号"); titleList.add("县公司名称"); titleList.add("用户管理单位名称"); titleList.add("线路名称"); titleList.add("台区ID"); titleList.add("变压器名称"); titleList.add("用户编号"); titleList.add("过电压时长"); titleList.add("低电压主要原因(点选)"); titleList.add("具体原因"); titleList.add("治理措施"); titleList.add("是否治理(点选)"); titleList.add("治理完成时间"); titleList.add("是否消除"); range = range.replaceAll(" ", ""); String[] rangeArray = range.split("-"); String beginTime = rangeArray[0]; String endTime = rangeArray[1]; List childLists = new ArrayList(); String content = "1.数据来源:智能化供电服务指挥系统;因系统数据滞后,统计时间为:" + CommonUtil.dateFormat(beginTime,"yyyy年MM月dd日")+"——"+CommonUtil.dateFormat(endTime,"yyyy年MM月dd日")+";每日过电压时长24小时客户已标红,受考核用户已标黄(连续48小时过电压),需重点治理。2.反馈要求:" + "请各单位照实填写,按时反馈,具体原因请详细填写,现场治理完成的填写现场治理时间(格式为20200101),未填写或填写不详细的一律列入考核,请知悉。" + "3.过电压是否消除:以供电服务指挥系统数据为依据,连续7天未发生过电压视为过电压消除。"; childLists.add(content); resList.add(childLists); int count = DateUtil.diffDate(beginTime, endTime); //日期集合 List dateList = new ArrayList(); for(int i=0;i<=count;i++){ String beginDate = DateUtil.dateAddDay(endTime,-i); dateList.add(beginDate); beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6); titleList.add(beginDate+"过电压时长"); } //子类数据 resList.add(titleList); //查询累计天数以及累计时长 Map param = new HashMap(); param.put("beginTime", beginTime); param.put("endTime", endTime); List> GDYZLFXBList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail04ByGDYZLFXB(param); int a = 0; for(Map map :GDYZLFXBList){ List childList = new ArrayList(); String dysc = String.format("%.0f",map.get("gdysc")); a++; childList.add(a+""); childList.add(map.get("xgsmc")); childList.add(map.get("yhgldw")); childList.add(map.get("xlmc")); childList.add(map.get("tqid")); childList.add(map.get("byqmc")); childList.add(map.get("yhid")); childList.add(dysc); childList.add(""); childList.add(""); childList.add(""); childList.add(""); childList.add(""); //查询该用户低电压明细 DwFileDetail04Example example04 = new DwFileDetail04Example(); example04.createCriteria().andYhidEqualTo(map.get("yhid")).andSjrqBetween(beginTime, endTime); example04.setOrderByClause("DFD4_SJRQ desc"); List DateList = db.selectByExample(DwFileDetail04Mapper.class, example04); int countJg = DateUtil.diffDate(DateList.get(0).getSjrq(), endTime); //查询是否低电压已消除 if(countJg>=7){ childList.add("是"); }else{ childList.add(""); } int bs=0; //循环加载低电压时长 for(String date:dateList){ int b = 0; for(DwFileDetail04 detail:DateList){ if(date.equals(detail.getSjrq())){ childList.add(detail.getGdysc()); b=1; bs++; break; } } if(b == 0){ if(bs<2){ bs=0; } childList.add(""); } } childList.add(bs+""); resList.add(childList); } // resList.add(DDYZLFXBList); return resList; } public Map reportType95598YB(String range) throws MINBusinessException, ParseException{ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class); Map resMap = new HashMap(); range = range.replaceAll(" ", ""); String[] rangeArray = range.split("-"); String beginTime = rangeArray[0]; String endTime = rangeArray[1]; // 类型列表 List typeList = new ArrayList(); // 统计表格 List> tongjiList = new ArrayList>(); List titleList = new ArrayList(); titleList.add("类型"); titleList.add("去年同月"); titleList.add("上月"); titleList.add("本月"); titleList.add("同比"); titleList.add("环比"); tongjiList.add(titleList); Map param = new HashMap(); String totalBenyueNum = "0"; String totalShangyueNum = "0"; String totalQunianNum = "0"; // 本月数据 param.put("beginTime", beginTime); param.put("endTime", endTime); // 类型统计数据 List> benyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param); // 区域统计数据 List> benyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param); for (Map map : benyueTongjiMap) { String type = String.valueOf(map.get("type")); String num = String.valueOf(map.get("num")); // 不包含该类型,新增一个类型 if (!typeList.contains(type)) { typeList.add(type); List typeDataList = Arrays.asList(new String[6]); typeDataList.set(0,type); typeDataList.set(3, num); tongjiList.add(typeDataList); // 已包含该类型,原数据中增加数据 } else { int index = typeList.indexOf(type); List typeDataList = tongjiList.get(index + 1); typeDataList.set(3, num); } totalBenyueNum = CommonUtil.add(totalBenyueNum, num); } // 上月数据 String lastBeginTime = DateUtil.dateAddMonth(beginTime, -1); String lastEndTime = DateUtil.dateAddMonth(endTime, -1); param.put("beginTime", lastBeginTime); param.put("endTime", lastEndTime); List> shangyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param); // 区域统计数据 List> shangyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param); for (Map map : shangyueTongjiMap) { String type = String.valueOf(map.get("type")); String num = String.valueOf(map.get("num")); // 不包含该类型,新增一个类型 if (!typeList.contains(type)) { typeList.add(type); List typeDataList = Arrays.asList(new String[6]); typeDataList.set(0,type); typeDataList.set(2, num); tongjiList.add(typeDataList); // 已包含该类型,原数据中增加数据 } else { int index = typeList.indexOf(type); List typeDataList = tongjiList.get(index + 1); typeDataList.set(2, num); } totalShangyueNum = CommonUtil.add(totalShangyueNum, num); } // 去年同期数据 String qinianBeginTime = DateUtil.dateAddYear(beginTime, -1); String qunianEndTime = DateUtil.dateAddYear(endTime, -1); param.put("beginTime", qinianBeginTime); param.put("endTime", qunianEndTime); List> qunianTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param); // 区域统计数据 List> qunianByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param); for (Map map : qunianTongjiMap) { String type = String.valueOf(map.get("type")); String num = String.valueOf(map.get("num")); // 不包含该类型,新增一个类型 if (!typeList.contains(type)) { typeList.add(type); List typeDataList = Arrays.asList(new String[6]); typeDataList.set(0,type); typeDataList.set(1, num); tongjiList.add(typeDataList); // 已包含该类型,原数据中增加数据 } else { int index = typeList.indexOf(type); List typeDataList = tongjiList.get(index + 1); typeDataList.set(1, num); } totalQunianNum = CommonUtil.add(totalQunianNum, num); } // 合计 List hejiList = new ArrayList(); hejiList.add("总计"); hejiList.add(totalQunianNum); hejiList.add(totalShangyueNum); hejiList.add(totalBenyueNum); hejiList.add(""); hejiList.add(""); tongjiList.add(hejiList); // 计算同比环比 for (int i = 1; i < tongjiList.size(); i ++) { List childList = tongjiList.get(i); String qunianNum = CommonUtil.isEmpty(childList.get(1))?"0":childList.get(1); String shangyueNum = CommonUtil.isEmpty(childList.get(2))?"0":childList.get(2); String benyueNum = CommonUtil.isEmpty(childList.get(3))?"0":childList.get(3); // 本月有数据 if (CommonUtil.compare(benyueNum, "0") != 0) { // 去年有数据 if (CommonUtil.compare(qunianNum, "0") != 0) { String tongbi = CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueNum, qunianNum), qunianNum, 4), "100", 2) + "%"; childList.set(4, tongbi); } // 上月有数据 if (CommonUtil.compare(shangyueNum, "0") != 0) { String huanbi = CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueNum, shangyueNum), shangyueNum, 4), "100", 2) + "%"; childList.set(5, huanbi); } } } resMap.put("tongjiList", tongjiList); // 详细数据 param.put("benyueBeginTime", beginTime); param.put("benyueEndTime", endTime); param.put("lastBeginTime", lastBeginTime); param.put("lastEndTime", lastEndTime); param.put("qinianBeginTime", qinianBeginTime); param.put("qunianEndTime", qunianEndTime); List areaList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05GetArea(param); List>> areaDetailList = new ArrayList>>(); resMap.put("areaDetailList", areaDetailList); for (String type : typeList) { List> benyueDetailList = new ArrayList>(); List benyueTitleList = new ArrayList(); benyueTitleList.add(beginTime + "-" + endTime); benyueTitleList.add("业务类型"); benyueTitleList.add("一级分类"); benyueTitleList.add("二级分类"); benyueTitleList.add("业务子类"); benyueDetailList.add(benyueTitleList); List> shangyueDetailList = new ArrayList>(); List shangyueTitleList = new ArrayList(); shangyueTitleList.add(lastBeginTime + "-" + lastEndTime); shangyueTitleList.add("业务类型"); shangyueTitleList.add("一级分类"); shangyueTitleList.add("二级分类"); shangyueTitleList.add("业务子类"); shangyueDetailList.add(shangyueTitleList); List> qunianDetailList = new ArrayList>(); List qunianTitleList = new ArrayList(); qunianTitleList.add(qinianBeginTime + "-" + qunianEndTime); qunianTitleList.add("业务类型"); qunianTitleList.add("一级分类"); qunianTitleList.add("二级分类"); qunianTitleList.add("业务子类"); qunianDetailList.add(qunianTitleList); // 区域数据 for (String area : areaList) { benyueTitleList.add(area); shangyueTitleList.add(area); qunianTitleList.add(area); } benyueTitleList.add("总计"); shangyueTitleList.add("总计"); qunianTitleList.add("总计"); areaDetailList.add(benyueDetailList); areaDetailList.add(shangyueDetailList); areaDetailList.add(qunianDetailList); // 报表详情生成 until95598(benyueByAreaMap, type, benyueDetailList); until95598(shangyueByAreaMap, type, shangyueDetailList); until95598(qunianByAreaMap, type, qunianDetailList); } // 计算总计 for (int i = 0; i < areaDetailList.size(); i ++) { List> excelList = areaDetailList.get(i); List zongji = new ArrayList(); zongji.add("总计"); zongji.add(""); zongji.add(""); zongji.add(""); zongji.add(""); // 合计汇总 String[] zongjiNum = new String[excelList.get(0).size()- 5]; String totalNum = "0"; for (int j = 1; j < excelList.size(); j ++) { List childList = excelList.get(j); int index = 0; String zongjiType = "0"; for (int k = 5; k < childList.size(); k ++) { zongjiType = CommonUtil.add(zongjiType, childList.get(k)); zongjiNum[index] = CommonUtil.add(zongjiNum[index], childList.get(k)); index ++; } childList.set(childList.size() - 1, zongjiType); totalNum = CommonUtil.add(totalNum, zongjiType); } zongjiNum[zongjiNum.length - 1] = totalNum; for (int j = 0; j < zongjiNum.length; j++) { zongji.add(zongjiNum[j]); } excelList.add(zongji); } return resMap; } /** * 报表数据处理 * @param areaMap * @param type * @param detailList */ public void until95598(List> areaMap, String type, List> detailList) { for (int i = 0; i < areaMap.size(); i ++) { Map map = areaMap.get(i); String dataType = String.valueOf(map.get("type")); // 同一类型的数据 if (dataType.equals(type)) { // 供电单位 String gddw = String.valueOf(map.get("gddw")); // 数量 String num = String.valueOf(map.get("num")); // 业务类型 String ywlx = String.valueOf(map.get("ywlx")); // 一级分类 String yjfl = String.valueOf(map.get("yjfl")); // 二级分类 String ejfl = String.valueOf(map.get("ejfl")); // 业务子类 String ywzl = String.valueOf(map.get("ywzl")); // 不是第一条数据 if (i != 0) { // 下一条数据 Map lastMap = areaMap.get(i - 1); // 业务类型 String lastYwlx = String.valueOf(lastMap.get("ywlx")); // 一级分类 String lastYjfl = String.valueOf(lastMap.get("yjfl")); // 二级分类 String lastEjfl = String.valueOf(lastMap.get("ejfl")); // 业务子类 String lastYwzl = String.valueOf(lastMap.get("ywzl")); // 业务类型等数据相同,是同一行数据 if (lastYwlx.equals(ywlx) && lastYjfl.equals(yjfl) && lastEjfl.equals(ejfl) && lastYwzl.equals(ywzl)) { // 获取区域位置 int index = detailList.get(0).indexOf(gddw); // 获取最后一条数据 List childList = detailList.get(detailList.size() - 1); childList.set(index, num); // 数据不同,新增一条数据 } else { List childList = Arrays.asList(new String[detailList.get(0).size()]); childList.set(0, dataType); childList.set(1, ywlx); childList.set(2, yjfl); childList.set(3, ejfl); childList.set(4, ywzl); // 获取区域位置 int index = detailList.get(0).indexOf(gddw); childList.set(index, num); detailList.add(childList); } } else { List childList = Arrays.asList(new String[detailList.get(0).size()]); childList.set(0, dataType); childList.set(1, ywlx); childList.set(2, yjfl); childList.set(3, ejfl); childList.set(4, ywzl); // 获取区域位置 int index = detailList.get(0).indexOf(gddw); childList.set(index, num); detailList.add(childList); } } } } }