|
@@ -3,6 +3,7 @@ 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;
|
|
@@ -128,17 +129,19 @@ public class ReportServiceImpl implements IReportService {
|
|
|
List<List<String>> resList = reportTypeFADZBB(FADateRange, yearChoose);
|
|
|
resMap.put("resList", resList);
|
|
|
//低电压分析表
|
|
|
- }else if(Constant.REPORT_TYPE_05.equals(reportTypeId)){
|
|
|
+ } else if (Constant.REPORT_TYPE_05.equals(reportTypeId)){
|
|
|
List<List<String>> resList = reportTypeDDYZLFXB(range, reportTypeId);
|
|
|
resMap.put("resList", resList);
|
|
|
//低电压日报
|
|
|
- }else if(Constant.REPORT_TYPE_06.equals(reportTypeId)){
|
|
|
+ } else if (Constant.REPORT_TYPE_06.equals(reportTypeId)){
|
|
|
List<List<String>> resList = reportTypeDDYRB(DdyDateRange,yearChoose,range, reportTypeId);
|
|
|
resMap.put("resList", resList);
|
|
|
//过电压分析表
|
|
|
- }else if(Constant.REPORT_TYPE_07.equals(reportTypeId)){
|
|
|
+ } else if (Constant.REPORT_TYPE_07.equals(reportTypeId)){
|
|
|
List<List<String>> resList = reportTypeGDYZLFXB(range, reportTypeId);
|
|
|
resMap.put("resList", resList);
|
|
|
+ } else if (Constant.REPORT_TYPE_08.equals(reportTypeId)){
|
|
|
+ return reportType95598YB(range);
|
|
|
}
|
|
|
return resMap;
|
|
|
}
|
|
@@ -1759,4 +1762,319 @@ public class ReportServiceImpl implements IReportService {
|
|
|
|
|
|
return resList;
|
|
|
}
|
|
|
+
|
|
|
+ public Map<String, Object> reportType95598YB(String range) throws MINBusinessException, ParseException{
|
|
|
+ IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
|
|
|
+
|
|
|
+ Map<String, Object> resMap = new HashMap<String, Object>();
|
|
|
+
|
|
|
+ range = range.replaceAll(" ", "");
|
|
|
+ String[] rangeArray = range.split("-");
|
|
|
+ String beginTime = rangeArray[0];
|
|
|
+ String endTime = rangeArray[1];
|
|
|
+
|
|
|
+ // 类型列表
|
|
|
+ List<String> typeList = new ArrayList<String>();
|
|
|
+
|
|
|
+ // 统计表格
|
|
|
+ List<List<String>> tongjiList = new ArrayList<List<String>>();
|
|
|
+ List<String> titleList = new ArrayList<String>();
|
|
|
+ titleList.add("类型");
|
|
|
+ titleList.add("去年同月");
|
|
|
+ titleList.add("上月");
|
|
|
+ titleList.add("本月");
|
|
|
+ titleList.add("同比");
|
|
|
+ titleList.add("环比");
|
|
|
+ tongjiList.add(titleList);
|
|
|
+
|
|
|
+ Map<String, Object> param = new HashMap<String, Object>();
|
|
|
+
|
|
|
+ String totalBenyueNum = "0";
|
|
|
+ String totalShangyueNum = "0";
|
|
|
+ String totalQunianNum = "0";
|
|
|
+
|
|
|
+ // 本月数据
|
|
|
+ param.put("beginTime", beginTime);
|
|
|
+ param.put("endTime", endTime);
|
|
|
+ // 类型统计数据
|
|
|
+ List<Map<String, Object>> benyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
|
|
|
+ // 区域统计数据
|
|
|
+ List<Map<String, Object>> benyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
|
|
|
+
|
|
|
+ for (Map<String, Object> map : benyueTongjiMap) {
|
|
|
+ String type = String.valueOf(map.get("type"));
|
|
|
+ String num = String.valueOf(map.get("num"));
|
|
|
+ // 不包含该类型,新增一个类型
|
|
|
+ if (!typeList.contains(type)) {
|
|
|
+ typeList.add(type);
|
|
|
+ List<String> typeDataList = Arrays.asList(new String[6]);
|
|
|
+ typeDataList.set(0,type);
|
|
|
+ typeDataList.set(3, num);
|
|
|
+ tongjiList.add(typeDataList);
|
|
|
+ // 已包含该类型,原数据中增加数据
|
|
|
+ } else {
|
|
|
+ int index = typeList.indexOf(type);
|
|
|
+ List<String> 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<Map<String, Object>> shangyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
|
|
|
+ // 区域统计数据
|
|
|
+ List<Map<String, Object>> shangyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
|
|
|
+ for (Map<String, Object> map : shangyueTongjiMap) {
|
|
|
+ String type = String.valueOf(map.get("type"));
|
|
|
+ String num = String.valueOf(map.get("num"));
|
|
|
+ // 不包含该类型,新增一个类型
|
|
|
+ if (!typeList.contains(type)) {
|
|
|
+ typeList.add(type);
|
|
|
+ List<String> typeDataList = Arrays.asList(new String[6]);
|
|
|
+ typeDataList.set(0,type);
|
|
|
+ typeDataList.set(2, num);
|
|
|
+ tongjiList.add(typeDataList);
|
|
|
+ // 已包含该类型,原数据中增加数据
|
|
|
+ } else {
|
|
|
+ int index = typeList.indexOf(type);
|
|
|
+ List<String> 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<Map<String, Object>> qunianTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
|
|
|
+ // 区域统计数据
|
|
|
+ List<Map<String, Object>> qunianByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
|
|
|
+ for (Map<String, Object> map : qunianTongjiMap) {
|
|
|
+ String type = String.valueOf(map.get("type"));
|
|
|
+ String num = String.valueOf(map.get("num"));
|
|
|
+ // 不包含该类型,新增一个类型
|
|
|
+ if (!typeList.contains(type)) {
|
|
|
+ typeList.add(type);
|
|
|
+ List<String> typeDataList = Arrays.asList(new String[6]);
|
|
|
+ typeDataList.set(0,type);
|
|
|
+ typeDataList.set(1, num);
|
|
|
+ tongjiList.add(typeDataList);
|
|
|
+ // 已包含该类型,原数据中增加数据
|
|
|
+ } else {
|
|
|
+ int index = typeList.indexOf(type);
|
|
|
+ List<String> typeDataList = tongjiList.get(index + 1);
|
|
|
+ typeDataList.set(1, num);
|
|
|
+ }
|
|
|
+
|
|
|
+ totalQunianNum = CommonUtil.add(totalQunianNum, num);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 合计
|
|
|
+ List<String> hejiList = new ArrayList<String>();
|
|
|
+ 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<String> 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<String> areaList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05GetArea(param);
|
|
|
+
|
|
|
+ List<List<List<String>>> areaDetailList = new ArrayList<List<List<String>>>();
|
|
|
+ resMap.put("areaDetailList", areaDetailList);
|
|
|
+ for (String type : typeList) {
|
|
|
+ List<List<String>> benyueDetailList = new ArrayList<List<String>>();
|
|
|
+ List<String> benyueTitleList = new ArrayList<String>();
|
|
|
+ benyueTitleList.add(beginTime + "-" + endTime);
|
|
|
+ benyueTitleList.add("业务类型");
|
|
|
+ benyueTitleList.add("一级分类");
|
|
|
+ benyueTitleList.add("二级分类");
|
|
|
+ benyueTitleList.add("业务子类");
|
|
|
+ benyueDetailList.add(benyueTitleList);
|
|
|
+ List<List<String>> shangyueDetailList = new ArrayList<List<String>>();
|
|
|
+ List<String> shangyueTitleList = new ArrayList<String>();
|
|
|
+ shangyueTitleList.add(lastBeginTime + "-" + lastEndTime);
|
|
|
+ shangyueTitleList.add("业务类型");
|
|
|
+ shangyueTitleList.add("一级分类");
|
|
|
+ shangyueTitleList.add("二级分类");
|
|
|
+ shangyueTitleList.add("业务子类");
|
|
|
+ shangyueDetailList.add(shangyueTitleList);
|
|
|
+ List<List<String>> qunianDetailList = new ArrayList<List<String>>();
|
|
|
+ List<String> qunianTitleList = new ArrayList<String>();
|
|
|
+ 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<List<String>> excelList = areaDetailList.get(i);
|
|
|
+ List<String> zongji = new ArrayList<String>();
|
|
|
+ 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<String> 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<Map<String, Object>> areaMap, String type, List<List<String>> detailList) {
|
|
|
+ for (int i = 0; i < areaMap.size(); i ++) {
|
|
|
+ Map<String, Object> 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<String, Object> 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<String> childList = detailList.get(detailList.size() - 1);
|
|
|
+ childList.set(index, num);
|
|
|
+ // 数据不同,新增一条数据
|
|
|
+ } else {
|
|
|
+ List<String> 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<String> 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|