ReportServiceImpl.java 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080
  1. package com.minpay.common.service.impl;
  2. import java.text.ParseException;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import com.minpay.common.constant.Constant;
  10. import com.minpay.common.service.IReportService;
  11. import com.minpay.common.util.CommonUtil;
  12. import com.minpay.common.util.DateUtil;
  13. import com.minpay.db.table.mapper.DwFileDetail01Mapper;
  14. import com.minpay.db.table.mapper.DwFileDetail03Mapper;
  15. import com.minpay.db.table.mapper.DwFileDetail04Mapper;
  16. import com.minpay.db.table.mapper.PubAppparMapper;
  17. import com.minpay.db.table.model.DwFileDetail01;
  18. import com.minpay.db.table.model.DwFileDetail01Example;
  19. import com.minpay.db.table.model.DwFileDetail03;
  20. import com.minpay.db.table.model.DwFileDetail03Example;
  21. import com.minpay.db.table.model.DwFileDetail04;
  22. import com.minpay.db.table.model.DwFileDetail04Example;
  23. import com.minpay.db.table.model.PubApppar;
  24. import com.minpay.db.table.model.PubAppparExample;
  25. import com.minpay.db.table.own.mapper.ReportServiceMapper;
  26. import com.startup.minpay.frame.exception.MINBusinessException;
  27. import com.startup.minpay.frame.service.base.IMINDataBaseService;
  28. import com.startup.minpay.frame.service.base.Service;
  29. import com.startup.minpay.frame.target.MINComponent;
  30. @MINComponent
  31. public class ReportServiceImpl implements IReportService {
  32. static Map<String, String> totalMap = new HashMap<String, String>();
  33. //各区客户数
  34. static Map<String, String> customerMap = new HashMap<String, String>();
  35. // 台区停电停电时长
  36. static List<Map<String, String>> fenduanList = new ArrayList<Map<String, String>>();
  37. static {
  38. totalMap.put("xintai", "8382");
  39. totalMap.put("daiyue", "4188");
  40. totalMap.put("ningyang", "6292");
  41. totalMap.put("taishan", "3784");
  42. totalMap.put("dongping", "6212");
  43. totalMap.put("feicheng", "6547");
  44. totalMap.put("taishanjingqu", "1474");
  45. totalMap.put("gaoxin", "1945");
  46. totalMap.put("heji", "38824");
  47. //客户数
  48. customerMap.put("xintai", "593100");
  49. customerMap.put("daiyue", "323455");
  50. customerMap.put("ningyang", "301682");
  51. customerMap.put("taishan", "376298");
  52. customerMap.put("dongping", "298683");
  53. customerMap.put("feicheng", "375994");
  54. customerMap.put("jingqu", "120623");
  55. customerMap.put("gaoxin", "162627");
  56. customerMap.put("heji", "2552462");
  57. // 0-1小时
  58. Map<String, String> map0To60 = new HashMap<String, String>();
  59. map0To60.put("start", "0");
  60. map0To60.put("end", "60");
  61. map0To60.put("desc", "0-1小时");
  62. fenduanList.add(map0To60);
  63. // 1-6小时
  64. Map<String, String> map60To360 = new HashMap<String, String>();
  65. map60To360.put("start", "60");
  66. map60To360.put("end", "360");
  67. map60To360.put("desc", "1-6小时");
  68. fenduanList.add(map60To360);
  69. // 6-12小时
  70. Map<String, String> map360To720 = new HashMap<String, String>();
  71. map360To720.put("start", "360");
  72. map360To720.put("end", "720");
  73. map360To720.put("desc", "6-12小时");
  74. fenduanList.add(map360To720);
  75. // 12-24小时
  76. Map<String, String> map720To1440 = new HashMap<String, String>();
  77. map720To1440.put("start", "720");
  78. map720To1440.put("end", "1440");
  79. map720To1440.put("desc", "12-24小时");
  80. fenduanList.add(map720To1440);
  81. // 24小时以上
  82. Map<String, String> mapGT1440 = new HashMap<String, String>();
  83. mapGT1440.put("start", "1440");
  84. mapGT1440.put("desc", "24小时以上");
  85. fenduanList.add(mapGT1440);
  86. }
  87. @Override
  88. public Map<String, Object> reportNeedDetail(Map<String, String> param)
  89. throws MINBusinessException, ParseException {
  90. String range = param.get("range");
  91. String timeRange = param.get("timeRange");
  92. String reportTypeId = param.get("reportTypeId");
  93. String firstFileId = param.get("firstFileId");
  94. String secondFileId = param.get("secondFileId");
  95. String FADateRange = param.get("FADateRange");
  96. String yearChoose = param.get("yearChoose");
  97. String DdyDateRange = param.get("DdyDateRange");
  98. Map<String, Object> resMap = new HashMap<String, Object>();
  99. // 台区停电日报
  100. if (Constant.REPORT_TYPE_00.equals(reportTypeId)) {
  101. String monthNum = param.get("monthNum");
  102. String countNum = param.get("countNum");
  103. List<List<String>> resList = reportTypeTQTDRB(range, timeRange, monthNum, countNum);
  104. resMap.put("resList", resList);
  105. // 台区停电周报
  106. } else if (Constant.REPORT_TYPE_01.equals(reportTypeId)) {
  107. return reportTypeTQTDZB(range, timeRange);
  108. // 台区停电月报
  109. } else if (Constant.REPORT_TYPE_02.equals(reportTypeId)) {
  110. return reportTypeTQTDYB(range, timeRange);
  111. // 终端投托运报表
  112. } else if (Constant.REPORT_TYPE_03.equals(reportTypeId)) {
  113. List<List<String>> resList = reportTypeZDDTYBB(firstFileId, secondFileId);
  114. resMap.put("resList", resList);
  115. // FA动作正确率
  116. } else if (Constant.REPORT_TYPE_04.equals(reportTypeId)) {
  117. List<List<String>> resList = reportTypeFADZBB(FADateRange, yearChoose);
  118. resMap.put("resList", resList);
  119. //低电压分析表
  120. } else if (Constant.REPORT_TYPE_05.equals(reportTypeId)){
  121. List<List<String>> resList = reportTypeDDYZLFXB(range, reportTypeId);
  122. resMap.put("resList", resList);
  123. //低电压日报
  124. } else if (Constant.REPORT_TYPE_06.equals(reportTypeId)){
  125. List<List<String>> resList = reportTypeDDYRB(DdyDateRange,yearChoose,range, reportTypeId);
  126. resMap.put("resList", resList);
  127. //过电压分析表
  128. } else if (Constant.REPORT_TYPE_07.equals(reportTypeId)){
  129. List<List<String>> resList = reportTypeGDYZLFXB(range, reportTypeId);
  130. resMap.put("resList", resList);
  131. } else if (Constant.REPORT_TYPE_08.equals(reportTypeId)){
  132. return reportType95598YB(range);
  133. }
  134. return resMap;
  135. }
  136. /**
  137. * 台区停电日报
  138. * @param range 日期范围
  139. * @param timeRange 时间段范围
  140. * @param monthNum 几个月内停电
  141. * @param countNum 停电次数
  142. * @return
  143. * @throws MINBusinessException
  144. * @throws ParseException
  145. */
  146. public List<List<String>> reportTypeTQTDRB(String range, String timeRange, String monthNum, String countNum) throws MINBusinessException, ParseException {
  147. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  148. List<List<String>> resList = new ArrayList<List<String>>();
  149. Map<String, Object> param = new HashMap<String, Object>();
  150. String beginTime = null;
  151. String endTime = null;
  152. range = range.replaceAll(" ", "");
  153. String[] rangeArray = range.split("-");
  154. timeRange = timeRange.replaceAll(" ", "");
  155. if (CommonUtil.isEmpty(timeRange)) {
  156. beginTime = rangeArray[0] + "000000";
  157. endTime = rangeArray[1] + "235959";
  158. } else {
  159. String[] timeRangeArray = timeRange.split("-");
  160. beginTime = rangeArray[0] + timeRangeArray[0];
  161. endTime = rangeArray[1] + timeRangeArray[1];
  162. }
  163. param.put("beginTime", beginTime);
  164. param.put("endTime", endTime);
  165. List<Map<String, String>> fileList00 = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00(param);
  166. Map<String, String> countMap = new HashMap<String, String>();
  167. countMap.put("xintai", "0");
  168. countMap.put("daiyue", "0");
  169. countMap.put("ningyang", "0");
  170. countMap.put("taishan", "0");
  171. countMap.put("dongping", "0");
  172. countMap.put("feicheng", "0");
  173. countMap.put("taishanjingqu", "0");
  174. countMap.put("gaoxin", "0");
  175. countMap.put("heji", "0");
  176. for (Map<String, String> map : fileList00) {
  177. if ("新泰".equals(map.get("area"))) {
  178. countMap.put("xintai",CommonUtil.add(countMap.get("xintai"), "1"));
  179. } else if ("岱岳".equals(map.get("area"))) {
  180. countMap.put("daiyue",CommonUtil.add(countMap.get("daiyue"), "1"));
  181. } else if ("宁阳".equals(map.get("area"))) {
  182. countMap.put("ningyang",CommonUtil.add(countMap.get("ningyang"), "1"));
  183. } else if ("泰山".equals(map.get("area"))) {
  184. countMap.put("taishan",CommonUtil.add(countMap.get("taishan"), "1"));
  185. } else if ("东平".equals(map.get("area"))) {
  186. countMap.put("dongping",CommonUtil.add(countMap.get("dongping"), "1"));
  187. } else if ("肥城".equals(map.get("area"))) {
  188. countMap.put("feicheng",CommonUtil.add(countMap.get("feicheng"), "1"));
  189. } else if ("泰山景区".equals(map.get("area"))) {
  190. countMap.put("taishanjingqu",CommonUtil.add(countMap.get("taishanjingqu"), "1"));
  191. } else if ("高新".equals(map.get("area"))) {
  192. countMap.put("gaoxin",CommonUtil.add(countMap.get("gaoxin"), "1"));
  193. }
  194. countMap.put("heji",CommonUtil.add(countMap.get("heji"), "1"));
  195. }
  196. List<String> childList0 = new ArrayList<String>();
  197. childList0.add("分类\\单位");
  198. childList0.add("新泰");
  199. childList0.add("岱岳");
  200. childList0.add("宁阳");
  201. childList0.add("泰山");
  202. childList0.add("东平");
  203. childList0.add("肥城");
  204. childList0.add("泰山景区");
  205. childList0.add("高新");
  206. childList0.add("合计");
  207. resList.add(childList0);
  208. List<String> childList1 = new ArrayList<String>();
  209. childList1.add("管辖台区数量");
  210. childList1.add(totalMap.get("xintai"));
  211. childList1.add(totalMap.get("daiyue"));
  212. childList1.add(totalMap.get("ningyang"));
  213. childList1.add(totalMap.get("taishan"));
  214. childList1.add(totalMap.get("dongping"));
  215. childList1.add(totalMap.get("feicheng"));
  216. childList1.add(totalMap.get("taishanjingqu"));
  217. childList1.add(totalMap.get("gaoxin"));
  218. childList1.add(totalMap.get("heji"));
  219. resList.add(childList1);
  220. List<String> childList2 = new ArrayList<String>();
  221. childList2.add("台区停电次数");
  222. childList2.add(countMap.get("xintai"));
  223. childList2.add(countMap.get("daiyue"));
  224. childList2.add(countMap.get("ningyang"));
  225. childList2.add(countMap.get("taishan"));
  226. childList2.add(countMap.get("dongping"));
  227. childList2.add(countMap.get("feicheng"));
  228. childList2.add(countMap.get("taishanjingqu"));
  229. childList2.add(countMap.get("gaoxin"));
  230. childList2.add(countMap.get("heji"));
  231. resList.add(childList2);
  232. List<String> childList3 = new ArrayList<String>();
  233. childList3.add("台区停运率");
  234. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("xintai"), totalMap.get("xintai"), 4), "100", 2) + "%");
  235. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("daiyue"), totalMap.get("daiyue"), 4), "100", 2) + "%");
  236. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("ningyang"), totalMap.get("ningyang"), 4), "100", 2) + "%");
  237. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("taishan"), totalMap.get("taishan"), 4), "100", 2) + "%");
  238. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("dongping"), totalMap.get("dongping"), 4), "100", 2) + "%");
  239. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("feicheng"), totalMap.get("feicheng"), 4), "100", 2) + "%");
  240. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("taishanjingqu"), totalMap.get("taishanjingqu"), 4), "100", 2) + "%");
  241. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("gaoxin"), totalMap.get("gaoxin"), 4), "100", 2) + "%");
  242. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("heji"), totalMap.get("heji"), 4), "100", 2) + "%");
  243. resList.add(childList3);
  244. // 台区停电个数统计
  245. Map<String, String> tqtdGsMap = new HashMap<String, String>();
  246. tqtdGsMap.put("xintai", "0");
  247. tqtdGsMap.put("daiyue", "0");
  248. tqtdGsMap.put("ningyang", "0");
  249. tqtdGsMap.put("taishan", "0");
  250. tqtdGsMap.put("dongping", "0");
  251. tqtdGsMap.put("feicheng", "0");
  252. tqtdGsMap.put("taishanjingqu", "0");
  253. tqtdGsMap.put("gaoxin", "0");
  254. tqtdGsMap.put("heji", "0");
  255. List<Map<String, String>> tqtdGsList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  256. for (Map<String, String> map : tqtdGsList) {
  257. if ("新泰".equals(map.get("area"))) {
  258. tqtdGsMap.put("xintai", map.get("num"));
  259. } else if ("岱岳".equals(map.get("area"))) {
  260. tqtdGsMap.put("daiyue", map.get("num"));
  261. } else if ("宁阳".equals(map.get("area"))) {
  262. tqtdGsMap.put("ningyang", map.get("num"));
  263. } else if ("泰山".equals(map.get("area"))) {
  264. tqtdGsMap.put("taishan", map.get("num"));
  265. } else if ("东平".equals(map.get("area"))) {
  266. tqtdGsMap.put("dongping", map.get("num"));
  267. } else if ("肥城".equals(map.get("area"))) {
  268. tqtdGsMap.put("feicheng", map.get("num"));
  269. } else if ("泰山景区".equals(map.get("area"))) {
  270. tqtdGsMap.put("taishanjingqu", map.get("num"));
  271. } else if ("高新".equals(map.get("area"))) {
  272. tqtdGsMap.put("gaoxin", map.get("num"));
  273. }
  274. tqtdGsMap.put("heji",CommonUtil.add(tqtdGsMap.get("heji"), map.get("num")));
  275. }
  276. List<String> childList4 = new ArrayList<String>();
  277. childList4.add("台区停电个数");
  278. childList4.add(tqtdGsMap.get("xintai"));
  279. childList4.add(tqtdGsMap.get("daiyue"));
  280. childList4.add(tqtdGsMap.get("ningyang"));
  281. childList4.add(tqtdGsMap.get("taishan"));
  282. childList4.add(tqtdGsMap.get("dongping"));
  283. childList4.add(tqtdGsMap.get("feicheng"));
  284. childList4.add(tqtdGsMap.get("taishanjingqu"));
  285. childList4.add(tqtdGsMap.get("gaoxin"));
  286. childList4.add(tqtdGsMap.get("heji"));
  287. resList.add(childList4);
  288. // monthNum个月内停电 countNum次以上的台区
  289. String beginDay = DateUtil.dateAddMonth(rangeArray[1], Integer.parseInt("-" + monthNum));
  290. param.put("beginDay", beginDay);
  291. param.put("endDay", rangeArray[1]);
  292. param.put("countNum", countNum);
  293. List<Map<String, String>> mountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  294. Map<String, Integer> taiQuMap = new HashMap<String, Integer>();
  295. taiQuMap.put("xintai", 0);
  296. taiQuMap.put("daiyue", 0);
  297. taiQuMap.put("ningyang", 0);
  298. taiQuMap.put("taishan", 0);
  299. taiQuMap.put("dongping", 0);
  300. taiQuMap.put("feicheng", 0);
  301. taiQuMap.put("taishanjingqu", 0);
  302. taiQuMap.put("gaoxin", 0);
  303. taiQuMap.put("heji", 0);
  304. for (Map<String, String> map : mountCountList) {
  305. if ("新泰".equals(map.get("area"))) {
  306. taiQuMap.put("xintai",taiQuMap.get("xintai") + 1);
  307. } else if ("岱岳".equals(map.get("area"))) {
  308. taiQuMap.put("daiyue",taiQuMap.get("daiyue") + 1);
  309. } else if ("宁阳".equals(map.get("area"))) {
  310. taiQuMap.put("ningyang",taiQuMap.get("ningyang") + 1);
  311. } else if ("泰山".equals(map.get("area"))) {
  312. taiQuMap.put("taishan",taiQuMap.get("taishan") + 1);
  313. } else if ("东平".equals(map.get("area"))) {
  314. taiQuMap.put("dongping",taiQuMap.get("dongping") + 1);
  315. } else if ("肥城".equals(map.get("area"))) {
  316. taiQuMap.put("feicheng",taiQuMap.get("feicheng") + 1);
  317. } else if ("泰山景区".equals(map.get("area"))) {
  318. taiQuMap.put("taishanjingqu",taiQuMap.get("taishanjingqu") + 1);
  319. } else if ("高新".equals(map.get("area"))) {
  320. taiQuMap.put("gaoxin",taiQuMap.get("gaoxin") + 1);
  321. }
  322. taiQuMap.put("heji",taiQuMap.get("heji") + 1);
  323. }
  324. List<String> childList6 = new ArrayList<String>();
  325. childList6.add(monthNum+"个月停电" + countNum + "次及以上台区");
  326. childList6.add(taiQuMap.get("xintai").toString());
  327. childList6.add(taiQuMap.get("daiyue").toString());
  328. childList6.add(taiQuMap.get("ningyang").toString());
  329. childList6.add(taiQuMap.get("taishan").toString());
  330. childList6.add(taiQuMap.get("dongping").toString());
  331. childList6.add(taiQuMap.get("feicheng").toString());
  332. childList6.add(taiQuMap.get("taishanjingqu").toString());
  333. childList6.add(taiQuMap.get("gaoxin").toString());
  334. childList6.add(taiQuMap.get("heji").toString());
  335. resList.add(childList6);
  336. // 查询昨日停电的数据
  337. param.put("yesterday", DateUtil.dateAddDay(rangeArray[1], -1));
  338. List<Map<String, String>> yesterdayList = db.getMybatisMapper(ReportServiceMapper.class).queryYesterdayDetail(param);
  339. param.put("yesterdayDetail", yesterdayList);
  340. List<Map<String, String>> yesterdayAndTDData = null;
  341. if (yesterdayList.size() != 0) {
  342. yesterdayAndTDData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  343. } else {
  344. yesterdayAndTDData = new ArrayList<Map<String, String>>();
  345. }
  346. Map<String, Integer> yesterdayTaiQuMap = new HashMap<String, Integer>();
  347. yesterdayTaiQuMap.put("xintai", 0);
  348. yesterdayTaiQuMap.put("daiyue", 0);
  349. yesterdayTaiQuMap.put("ningyang", 0);
  350. yesterdayTaiQuMap.put("taishan", 0);
  351. yesterdayTaiQuMap.put("dongping", 0);
  352. yesterdayTaiQuMap.put("feicheng", 0);
  353. yesterdayTaiQuMap.put("taishanjingqu", 0);
  354. yesterdayTaiQuMap.put("gaoxin", 0);
  355. yesterdayTaiQuMap.put("heji", 0);
  356. for (Map<String, String> map : yesterdayAndTDData) {
  357. if ("新泰".equals(map.get("area"))) {
  358. yesterdayTaiQuMap.put("xintai",yesterdayTaiQuMap.get("xintai") + 1);
  359. } else if ("岱岳".equals(map.get("area"))) {
  360. yesterdayTaiQuMap.put("daiyue",yesterdayTaiQuMap.get("daiyue") + 1);
  361. } else if ("宁阳".equals(map.get("area"))) {
  362. yesterdayTaiQuMap.put("ningyang",yesterdayTaiQuMap.get("ningyang") + 1);
  363. } else if ("泰山".equals(map.get("area"))) {
  364. yesterdayTaiQuMap.put("taishan",yesterdayTaiQuMap.get("taishan") + 1);
  365. } else if ("东平".equals(map.get("area"))) {
  366. yesterdayTaiQuMap.put("dongping",yesterdayTaiQuMap.get("dongping") + 1);
  367. } else if ("肥城".equals(map.get("area"))) {
  368. yesterdayTaiQuMap.put("feicheng",yesterdayTaiQuMap.get("feicheng") + 1);
  369. } else if ("泰山景区".equals(map.get("area"))) {
  370. yesterdayTaiQuMap.put("taishanjingqu",yesterdayTaiQuMap.get("taishanjingqu") + 1);
  371. } else if ("高新".equals(map.get("area"))) {
  372. yesterdayTaiQuMap.put("gaoxin",yesterdayTaiQuMap.get("gaoxin") + 1);
  373. }
  374. yesterdayTaiQuMap.put("heji",yesterdayTaiQuMap.get("heji") + 1);
  375. }
  376. List<String> childList7 = new ArrayList<String>();
  377. childList7.add(monthNum+"个月停电" + countNum + "次及以上台区且昨日停电");
  378. childList7.add(yesterdayTaiQuMap.get("xintai").toString());
  379. childList7.add(yesterdayTaiQuMap.get("daiyue").toString());
  380. childList7.add(yesterdayTaiQuMap.get("ningyang").toString());
  381. childList7.add(yesterdayTaiQuMap.get("taishan").toString());
  382. childList7.add(yesterdayTaiQuMap.get("dongping").toString());
  383. childList7.add(yesterdayTaiQuMap.get("feicheng").toString());
  384. childList7.add(yesterdayTaiQuMap.get("taishanjingqu").toString());
  385. childList7.add(yesterdayTaiQuMap.get("gaoxin").toString());
  386. childList7.add(yesterdayTaiQuMap.get("heji").toString());
  387. resList.add(childList7);
  388. // 2个月停电1次及以上台区且昨日停电的台区数据
  389. beginDay = DateUtil.dateAddMonth(rangeArray[1], -2);
  390. param.put("beginDay", beginDay);
  391. param.put("countNum", 1);
  392. List<Map<String, String>> yiciData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  393. Map<String, Integer> yiciMap = new HashMap<String, Integer>();
  394. yiciMap.put("xintai", 0);
  395. yiciMap.put("daiyue", 0);
  396. yiciMap.put("ningyang", 0);
  397. yiciMap.put("taishan", 0);
  398. yiciMap.put("dongping", 0);
  399. yiciMap.put("feicheng", 0);
  400. yiciMap.put("taishanjingqu", 0);
  401. yiciMap.put("gaoxin", 0);
  402. yiciMap.put("heji", 0);
  403. for (Map<String, String> map : yiciData) {
  404. if ("新泰".equals(map.get("area"))) {
  405. yiciMap.put("xintai",yiciMap.get("xintai") + 1);
  406. } else if ("岱岳".equals(map.get("area"))) {
  407. yiciMap.put("daiyue",yiciMap.get("daiyue") + 1);
  408. } else if ("宁阳".equals(map.get("area"))) {
  409. yiciMap.put("ningyang",yiciMap.get("ningyang") + 1);
  410. } else if ("泰山".equals(map.get("area"))) {
  411. yiciMap.put("taishan",yiciMap.get("taishan") + 1);
  412. } else if ("东平".equals(map.get("area"))) {
  413. yiciMap.put("dongping",yiciMap.get("dongping") + 1);
  414. } else if ("肥城".equals(map.get("area"))) {
  415. yiciMap.put("feicheng",yiciMap.get("feicheng") + 1);
  416. } else if ("泰山景区".equals(map.get("area"))) {
  417. yiciMap.put("taishanjingqu",yiciMap.get("taishanjingqu") + 1);
  418. } else if ("高新".equals(map.get("area"))) {
  419. yiciMap.put("gaoxin",yiciMap.get("gaoxin") + 1);
  420. }
  421. yiciMap.put("heji",yiciMap.get("heji") + 1);
  422. }
  423. List<String> childList8 = new ArrayList<String>();
  424. childList8.add("2个月停电1次及以上台区且昨日停电");
  425. childList8.add(yiciMap.get("xintai").toString());
  426. childList8.add(yiciMap.get("daiyue").toString());
  427. childList8.add(yiciMap.get("ningyang").toString());
  428. childList8.add(yiciMap.get("taishan").toString());
  429. childList8.add(yiciMap.get("dongping").toString());
  430. childList8.add(yiciMap.get("feicheng").toString());
  431. childList8.add(yiciMap.get("taishanjingqu").toString());
  432. childList8.add(yiciMap.get("gaoxin").toString());
  433. childList8.add(yiciMap.get("heji").toString());
  434. resList.add(childList8);
  435. return resList;
  436. }
  437. /**
  438. * 台区停电周报
  439. * @param range
  440. * @param timeRange
  441. * @return
  442. * @throws MINBusinessException
  443. * @throws ParseException
  444. */
  445. public Map<String, Object> reportTypeTQTDZB(String range, String timeRange) throws MINBusinessException, ParseException {
  446. Map<String, Object> resMap = new HashMap<String, Object>();
  447. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  448. Map<String, Object> param = new HashMap<String, Object>();
  449. String beginTime = null;
  450. String endTime = null;
  451. range = range.replaceAll(" ", "");
  452. String[] rangeArray = range.split("-");
  453. timeRange = timeRange.replaceAll(" ", "");
  454. if (CommonUtil.isEmpty(timeRange)) {
  455. beginTime = rangeArray[0] + "000000";
  456. endTime = rangeArray[1] + "235959";
  457. } else {
  458. String[] timeRangeArray = timeRange.split("-");
  459. beginTime = rangeArray[0] + timeRangeArray[0];
  460. endTime = rangeArray[1] + timeRangeArray[1];
  461. }
  462. param.put("beginTime", beginTime);
  463. param.put("endTime", endTime);
  464. List<List<String>> resList = new ArrayList<List<String>>();
  465. List<String> title = new ArrayList<String>();
  466. title.add("单位\\分类");
  467. title.add("管理台区总数");
  468. title.add("本周累计停电台次");
  469. title.add("本周平均停电时长(小时)");
  470. title.add("本周重复停电台区数");
  471. title.add("本周督办频繁停电台次");
  472. title.add("本周督办频繁停电台区数");
  473. resList.add(title);
  474. List<String> xintai = new ArrayList<String>();
  475. xintai.add("新泰");
  476. xintai.add(totalMap.get("xintai"));
  477. List<String> daiyue = new ArrayList<String>();
  478. daiyue.add("岱岳");
  479. daiyue.add(totalMap.get("daiyue"));
  480. List<String> ningyang = new ArrayList<String>();
  481. ningyang.add("宁阳");
  482. ningyang.add(totalMap.get("ningyang"));
  483. List<String> taishan = new ArrayList<String>();
  484. taishan.add("泰山");
  485. taishan.add(totalMap.get("taishan"));
  486. List<String> dongping = new ArrayList<String>();
  487. dongping.add("东平");
  488. dongping.add(totalMap.get("dongping"));
  489. List<String> feicheng = new ArrayList<String>();
  490. feicheng.add("肥城");
  491. feicheng.add(totalMap.get("feicheng"));
  492. List<String> taishanjingqu = new ArrayList<String>();
  493. taishanjingqu.add("泰山景区");
  494. taishanjingqu.add(totalMap.get("taishanjingqu"));
  495. List<String> gaoxin = new ArrayList<String>();
  496. gaoxin.add("高新");
  497. gaoxin.add(totalMap.get("gaoxin"));
  498. List<String> heji = new ArrayList<String>();
  499. heji.add("合计");
  500. heji.add(totalMap.get("heji"));
  501. resList.add(xintai);
  502. resList.add(daiyue);
  503. resList.add(ningyang);
  504. resList.add(taishan);
  505. resList.add(dongping);
  506. resList.add(feicheng);
  507. resList.add(taishanjingqu);
  508. resList.add(gaoxin);
  509. resList.add(heji);
  510. //累计停电台次
  511. List<Map<String, String>> areaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  512. String totalCount = "0";
  513. for (Map<String, String> map : areaCountList) {
  514. String area = map.get("area");
  515. String count = map.get("count");
  516. if ("新泰".equals(area)) {
  517. xintai.add(count);
  518. } else if ("岱岳".equals(area)) {
  519. daiyue.add(count);
  520. } else if ("宁阳".equals(area)) {
  521. ningyang.add(count);
  522. } else if ("泰山".equals(area)) {
  523. taishan.add(count);
  524. } else if ("东平".equals(area)) {
  525. dongping.add(count);
  526. } else if ("肥城".equals(area)) {
  527. feicheng.add(count);
  528. } else if ("泰山景区".equals(area)) {
  529. taishanjingqu.add(count);
  530. } else if ("高新".equals(area)) {
  531. gaoxin.add(count);
  532. }
  533. totalCount = CommonUtil.add(totalCount, count);
  534. }
  535. heji.add(totalCount);
  536. // 没有数据的区域数值为0
  537. for (List<String> list : resList) {
  538. if (list.size() == 2) {
  539. list.add("0");
  540. }
  541. }
  542. // 平均停电时长
  543. String totalHour = "0";
  544. List<Map<String, String>> areaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  545. for (Map<String, String> map : areaTimeList) {
  546. String area = map.get("area");
  547. String timeMinute = map.get("timeMinute");
  548. String count = map.get("count");
  549. // 平均停电小时
  550. String hour = CommonUtil.divide(CommonUtil.divide(timeMinute, count, 2), "60", 2);
  551. if ("新泰".equals(area)) {
  552. xintai.add(hour);
  553. } else if ("岱岳".equals(area)) {
  554. daiyue.add(hour);
  555. } else if ("宁阳".equals(area)) {
  556. ningyang.add(hour);
  557. } else if ("泰山".equals(area)) {
  558. taishan.add(hour);
  559. } else if ("东平".equals(area)) {
  560. dongping.add(hour);
  561. } else if ("肥城".equals(area)) {
  562. feicheng.add(hour);
  563. } else if ("泰山景区".equals(area)) {
  564. taishanjingqu.add(hour);
  565. } else if ("高新".equals(area)) {
  566. gaoxin.add(hour);
  567. }
  568. totalHour = CommonUtil.add(totalHour, hour);
  569. }
  570. heji.add(CommonUtil.divide(totalHour, totalCount, 2));
  571. // 没有数据的区域数值为0
  572. for (List<String> list : resList) {
  573. if (list.size() == 3) {
  574. list.add("0");
  575. }
  576. }
  577. // 本周重复停电台区数
  578. param.put("beginDay", beginTime);
  579. param.put("endDay", endTime);
  580. param.put("countNum", "2");
  581. String totalChongfu = "0";
  582. List<Map<String, String>> twiceCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  583. for (Map<String, String> map : twiceCountList) {
  584. String area = map.get("area");
  585. if ("新泰".equals(area)) {
  586. if (xintai.size() >= 5) {
  587. xintai.set(4, CommonUtil.add(xintai.get(4), "1"));
  588. } else {
  589. xintai.add(4, "1");
  590. }
  591. } else if ("岱岳".equals(area)) {
  592. if (daiyue.size() >= 5) {
  593. daiyue.set(4, CommonUtil.add(daiyue.get(4), "1"));
  594. } else {
  595. daiyue.add(4, "1");
  596. }
  597. } else if ("宁阳".equals(area)) {
  598. if (ningyang.size() >= 5) {
  599. ningyang.set(4, CommonUtil.add(ningyang.get(4), "1"));
  600. } else {
  601. ningyang.add(4, "1");
  602. }
  603. } else if ("泰山".equals(area)) {
  604. if (taishan.size() >= 5) {
  605. taishan.set(4, CommonUtil.add(taishan.get(4), "1"));
  606. } else {
  607. taishan.add(4, "1");
  608. }
  609. } else if ("东平".equals(area)) {
  610. if (dongping.size() >= 5) {
  611. dongping.set(4, CommonUtil.add(dongping.get(4), "1"));
  612. } else {
  613. dongping.add(4, "1");
  614. }
  615. } else if ("肥城".equals(area)) {
  616. if (feicheng.size() >= 5) {
  617. feicheng.set(4, CommonUtil.add(feicheng.get(4), "1"));
  618. } else {
  619. feicheng.add(4, "1");
  620. }
  621. } else if ("泰山景区".equals(area)) {
  622. if (taishanjingqu.size() >= 5) {
  623. taishanjingqu.set(4, CommonUtil.add(taishanjingqu.get(4), "1"));
  624. } else {
  625. taishanjingqu.add(4, "1");
  626. }
  627. } else if ("高新".equals(area)) {
  628. if (gaoxin.size() >= 5) {
  629. gaoxin.set(4, CommonUtil.add(gaoxin.get(4), "1"));
  630. } else {
  631. gaoxin.add(4, "1");
  632. }
  633. }
  634. totalChongfu = CommonUtil.add(totalChongfu, "1");
  635. }
  636. heji.add(totalChongfu);
  637. // 没有数据的区域数值为0
  638. for (List<String> list : resList) {
  639. if (list.size() == 4) {
  640. list.add("0");
  641. }
  642. }
  643. String totalMonthChongfuTaici = "0";
  644. String totalMonthChongfuTaishu = "0";
  645. beginTime = DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1);
  646. if (CommonUtil.isEmpty(timeRange)) {
  647. param.put("beginDay", beginTime = DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1) + "000000");
  648. } else {
  649. String[] timeRangeArray = timeRange.split("-");
  650. param.put("beginDay", DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1) + timeRangeArray[0]);
  651. }
  652. param.put("endDay", endTime);
  653. param.put("countNum", "2");
  654. List<Map<String, String>> twiceMonthCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  655. // 本周督办频繁停电台次/本周督办频繁停电台区数
  656. for (Map<String, String> map : twiceMonthCountList) {
  657. String area = map.get("area");
  658. String num = map.get("num");
  659. if ("新泰".equals(area)) {
  660. if (xintai.size() >= 6) {
  661. xintai.set(5, CommonUtil.add(xintai.get(5), num));
  662. } else {
  663. xintai.add(5, num);
  664. }
  665. if (xintai.size() >= 7) {
  666. xintai.set(6, CommonUtil.add(xintai.get(6), "1"));
  667. } else {
  668. xintai.add(6, "1");
  669. }
  670. } else if ("岱岳".equals(area)) {
  671. if (daiyue.size() >= 6) {
  672. daiyue.set(5, CommonUtil.add(daiyue.get(5), num));
  673. } else {
  674. daiyue.add(5, num);
  675. }
  676. if (daiyue.size() >= 7) {
  677. daiyue.set(6, CommonUtil.add(daiyue.get(6), "1"));
  678. } else {
  679. daiyue.add(6, "1");
  680. }
  681. } else if ("宁阳".equals(area)) {
  682. if (ningyang.size() >= 6) {
  683. ningyang.set(5, CommonUtil.add(ningyang.get(5), num));
  684. } else {
  685. ningyang.add(5, num);
  686. }
  687. if (ningyang.size() >= 7) {
  688. ningyang.set(6, CommonUtil.add(ningyang.get(6), "1"));
  689. } else {
  690. ningyang.add(6, "1");
  691. }
  692. } else if ("泰山".equals(area)) {
  693. if (taishan.size() >= 6) {
  694. taishan.set(5, CommonUtil.add(taishan.get(5), num));
  695. } else {
  696. taishan.add(5, num);
  697. }
  698. if (taishan.size() >= 7) {
  699. taishan.set(6, CommonUtil.add(taishan.get(6), "1"));
  700. } else {
  701. taishan.add(6, "1");
  702. }
  703. } else if ("东平".equals(area)) {
  704. if (dongping.size() >= 6) {
  705. dongping.set(5, CommonUtil.add(dongping.get(5), num));
  706. } else {
  707. dongping.add(5, num);
  708. }
  709. if (dongping.size() >= 7) {
  710. dongping.set(6, CommonUtil.add(dongping.get(6), "1"));
  711. } else {
  712. dongping.add(6, "1");
  713. }
  714. } else if ("肥城".equals(area)) {
  715. if (feicheng.size() >= 6) {
  716. feicheng.set(5, CommonUtil.add(feicheng.get(5), num));
  717. } else {
  718. feicheng.add(5, num);
  719. }
  720. if (feicheng.size() >= 7) {
  721. feicheng.set(6, CommonUtil.add(feicheng.get(6), "1"));
  722. } else {
  723. feicheng.add(6, "1");
  724. }
  725. } else if ("泰山景区".equals(area)) {
  726. if (taishanjingqu.size() >= 6) {
  727. taishanjingqu.set(5, CommonUtil.add(taishanjingqu.get(5), num));
  728. } else {
  729. taishanjingqu.add(5, num);
  730. }
  731. if (taishanjingqu.size() >= 7) {
  732. taishanjingqu.set(6, CommonUtil.add(taishanjingqu.get(6), "1"));
  733. } else {
  734. taishanjingqu.add(6, "1");
  735. }
  736. } else if ("高新".equals(area)) {
  737. if (gaoxin.size() >= 6) {
  738. gaoxin.set(5, CommonUtil.add(gaoxin.get(5), num));
  739. } else {
  740. gaoxin.add(5, num);
  741. }
  742. if (gaoxin.size() >= 7) {
  743. gaoxin.set(6, CommonUtil.add(gaoxin.get(6), "1"));
  744. } else {
  745. gaoxin.add(6, "1");
  746. }
  747. }
  748. totalMonthChongfuTaici= CommonUtil.add(totalMonthChongfuTaici, num);
  749. totalMonthChongfuTaishu = CommonUtil.add(totalMonthChongfuTaishu, "1");
  750. }
  751. heji.add(totalMonthChongfuTaici);
  752. heji.add(totalMonthChongfuTaishu);
  753. // 环比
  754. String huanbi = "0";
  755. String huanbiBeginTime = DateUtil.dateAddMonth(rangeArray[1], -4); // 减四个月加一天
  756. String huanbiEndTime = DateUtil.dateAddMonth(rangeArray[1], -2); // 减两个月
  757. if (CommonUtil.isEmpty(timeRange)) {
  758. huanbiBeginTime = huanbiBeginTime + "000000";
  759. huanbiEndTime = huanbiEndTime + "235959";
  760. } else {
  761. String[] timeRangeArray = timeRange.split("-");
  762. huanbiBeginTime = huanbiBeginTime + timeRangeArray[0];
  763. huanbiEndTime = huanbiEndTime + timeRangeArray[1];
  764. }
  765. param.put("beginDay", huanbiBeginTime);
  766. param.put("endDay", huanbiEndTime);
  767. List<Map<String, String>> huanbiTwiceMonthCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  768. for (Map<String, String> map : huanbiTwiceMonthCountList) {
  769. String num = map.get("num");
  770. huanbi = CommonUtil.add(huanbi, num);
  771. }
  772. // 同比
  773. String tongbi = "0";
  774. String tongbiBeginTime = DateUtil.dateAddMonth(DateUtil.dateAddYear(rangeArray[1], -1), -2); // 减一年两个月
  775. String tongbiEndTime = DateUtil.dateAddYear(rangeArray[1], -1); // 减一年
  776. if (CommonUtil.isEmpty(timeRange)) {
  777. tongbiBeginTime = tongbiBeginTime + "000000";
  778. tongbiEndTime = tongbiEndTime + "235959";
  779. } else {
  780. String[] timeRangeArray = timeRange.split("-");
  781. tongbiBeginTime = tongbiBeginTime + timeRangeArray[0];
  782. tongbiEndTime = tongbiEndTime + timeRangeArray[1];
  783. }
  784. param.put("beginDay", tongbiBeginTime);
  785. param.put("endDay", tongbiEndTime);
  786. List<Map<String, String>> tongbiTwiceMonthCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  787. for (Map<String, String> map : tongbiTwiceMonthCountList) {
  788. String num = map.get("num");
  789. tongbi = CommonUtil.add(tongbi, num);
  790. }
  791. // 返回excel数据
  792. resMap.put("excelList", resList);
  793. // 描述数据
  794. Map<String, Object> dataMap = new HashMap<String, Object>();
  795. dataMap.put("totalCount", totalCount);
  796. dataMap.put("pingjun", CommonUtil.divide(totalHour, totalCount, 2));
  797. dataMap.put("twiceCount", totalChongfu);
  798. dataMap.put("dubanCount", totalMonthChongfuTaici);
  799. // 环比
  800. if (CommonUtil.compare(totalMonthChongfuTaici, huanbi) == 1) {
  801. dataMap.put("huanbi", "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalMonthChongfuTaici, huanbi), huanbi, 4), "100", 2) + "%");
  802. } else {
  803. dataMap.put("huanbi", "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(huanbi, totalMonthChongfuTaici), huanbi, 4), "100", 2) + "%");
  804. }
  805. // 同比
  806. if (CommonUtil.compare(totalMonthChongfuTaici, tongbi) == 1) {
  807. dataMap.put("tongbi", "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalMonthChongfuTaici, tongbi), tongbi, 4), "100", 2) + "%");
  808. } else {
  809. dataMap.put("tongbi", "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tongbi, totalMonthChongfuTaici), tongbi, 4), "100", 2) + "%");
  810. }
  811. resMap.put("dataMap", dataMap);
  812. String descStr = "<p>上周,台区累计停电${totalCount}台次,平均停电时长${pingjun}小时/台。停电两次及以上台区${twiceCount}个。</p>"
  813. +"上周,督办频繁停电(两个月内三次及以上)共计${dubanCount}台次,环比${huanbi},同比${tongbi}。";
  814. resMap.put("descStr", descStr);
  815. return resMap;
  816. }
  817. /**
  818. * 台区停电月报
  819. * @param range
  820. * @param timeRange
  821. * @return
  822. * @throws MINBusinessException
  823. * @throws ParseException
  824. */
  825. public Map<String, Object> reportTypeTQTDYB(String range, String timeRange) throws MINBusinessException, ParseException{
  826. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  827. Map<String, Object> param = new HashMap<String, Object>();
  828. String beginTime = null;
  829. String endTime = null;
  830. range = range.replaceAll(" ", "");
  831. String[] rangeArray = range.split("-");
  832. timeRange = timeRange.replaceAll(" ", "");
  833. if (CommonUtil.isEmpty(timeRange)) {
  834. beginTime = rangeArray[0] + "000000";
  835. endTime = rangeArray[1] + "235959";
  836. } else {
  837. String[] timeRangeArray = timeRange.split("-");
  838. beginTime = rangeArray[0] + timeRangeArray[0];
  839. endTime = rangeArray[1] + timeRangeArray[1];
  840. }
  841. param.put("beginTime", beginTime);
  842. param.put("endTime", endTime);
  843. /** 本月数据---- start ----*/
  844. //停电台次
  845. List<Map<String, String>> areaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  846. //停电时长
  847. List<Map<String, String>> areaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  848. //停电台区数
  849. param.put("beginDay", beginTime);
  850. param.put("endDay", endTime);
  851. param.put("countNum", "1");
  852. List<Map<String, String>> taiquCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  853. /** 本月数据---- end ----*/
  854. /** 去年同月数据---- start ----*/
  855. if (CommonUtil.isEmpty(timeRange)) {
  856. beginTime = DateUtil.dateAddYear(rangeArray[0], -1) + "000000";
  857. endTime = DateUtil.dateAddYear(rangeArray[1], -1) + "235959";
  858. } else {
  859. String[] timeRangeArray = timeRange.split("-");
  860. beginTime = DateUtil.dateAddYear(rangeArray[0], -1) + timeRangeArray[0];
  861. endTime = DateUtil.dateAddYear(rangeArray[1], -1) + timeRangeArray[1];
  862. }
  863. param.put("beginTime", beginTime);
  864. param.put("endTime", endTime);
  865. List<Map<String, String>> tbAreaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  866. List<Map<String, String>> tbAreaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  867. /** 去年同月数据---- end ----*/
  868. /** 上月月数据---- start ----*/
  869. if (CommonUtil.isEmpty(timeRange)) {
  870. beginTime = DateUtil.dateAddMonth(rangeArray[0], -1) + "000000";
  871. endTime = DateUtil.dateAddMonth(rangeArray[1], -1) + "235959";
  872. } else {
  873. String[] timeRangeArray = timeRange.split("-");
  874. beginTime = DateUtil.dateAddMonth(rangeArray[0], -1) + timeRangeArray[0];
  875. endTime = DateUtil.dateAddMonth(rangeArray[1], -1) + timeRangeArray[1];
  876. }
  877. param.put("beginTime", beginTime);
  878. param.put("endTime", endTime);
  879. List<Map<String, String>> hbAreaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  880. List<Map<String, String>> hbAreaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  881. /** 上月月数据---- end ----*/
  882. /** 停电台区数 ----start----*/
  883. String totalCount = "0";
  884. for (int i = 0; i < taiquCountList.size(); i++) {
  885. totalCount = CommonUtil.add(taiquCountList.get(i).get("num"), totalCount);
  886. }
  887. /** 停电台区数 ---- end ----*/
  888. /**停电次数数据处理----start----*/
  889. Integer month = Integer.parseInt(rangeArray[1].substring(4,6));
  890. String benyueCount = "0";
  891. String tbCount = "0";
  892. String hbCount = "0";
  893. for (int i = 0; i < areaCountList.size(); i++) {
  894. benyueCount = CommonUtil.add(areaCountList.get(i).get("num"), benyueCount);
  895. }
  896. for (int i = 0; i < tbAreaCountList.size(); i++) {
  897. tbCount = CommonUtil.add(tbAreaCountList.get(i).get("num"), tbCount);
  898. }
  899. for (int i = 0; i < hbAreaCountList.size(); i++) {
  900. hbCount = CommonUtil.add(hbAreaCountList.get(i).get("num"), hbCount);
  901. }
  902. // 同比描述
  903. String tongbi = null;
  904. if (CommonUtil.compare(benyueCount, tbCount) == 1) {
  905. tongbi = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueCount, tbCount), tbCount,4), "100", 2) + "%";
  906. } else {
  907. tongbi = "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbCount, benyueCount), tbCount,4), "100", 2) + "%";
  908. }
  909. // 环比描述
  910. String huanbi = null;
  911. if (CommonUtil.compare(benyueCount, hbCount) == 1) {
  912. huanbi = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueCount, hbCount), hbCount,4), "100", 2) + "%";
  913. } else {
  914. huanbi = "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(hbCount, benyueCount), hbCount,4), "100", 2) + "%";
  915. }
  916. int shejiNum = areaCountList.size();
  917. String shejiDesc = "";
  918. for (int i = 0; i < areaCountList.size(); i++) {
  919. if (i == areaCountList.size() - 1) {
  920. shejiDesc += areaCountList.get(i).get("area") +areaCountList.get(i).get("num")+"台次,占比"+CommonUtil.multiply(CommonUtil.divide(areaCountList.get(i).get("num"), benyueCount, 4), "100", 2)+"%。";
  921. } else {
  922. shejiDesc += areaCountList.get(i).get("area") +areaCountList.get(i).get("num")+"台次,占比"+CommonUtil.multiply(CommonUtil.divide(areaCountList.get(i).get("num"), benyueCount, 4), "100", 2)+"%,";
  923. }
  924. }
  925. /**停电次数数据处理----end----*/
  926. /**停电时长数据处理----start----*/
  927. String benyueTime = "0";
  928. String tbTime = "0";
  929. String hbTime = "0";
  930. for (int i = 0; i < areaTimeList.size(); i++) {
  931. benyueTime = CommonUtil.add(areaTimeList.get(i).get("timeMinute"), benyueTime);
  932. }
  933. for (int i = 0; i < tbAreaTimeList.size(); i++) {
  934. tbTime = CommonUtil.add(tbAreaTimeList.get(i).get("timeMinute"), tbTime);
  935. }
  936. for (int i = 0; i < hbAreaTimeList.size(); i++) {
  937. hbTime = CommonUtil.add(hbAreaTimeList.get(i).get("timeMinute"), hbTime);
  938. }
  939. // sql算的是分钟,转换成小时
  940. benyueTime = CommonUtil.divide(benyueTime, "60", 2);
  941. tbTime = CommonUtil.divide(tbTime, "60", 2);
  942. hbTime = CommonUtil.divide(hbTime, "60", 2);
  943. // 平均时长
  944. String pingjunHour = CommonUtil.divide(benyueTime, totalCount, 2);
  945. // 同比数据
  946. String tongbiPingjunHour = null;
  947. if (CommonUtil.compare(benyueTime, tbTime) == 1) {
  948. tongbiPingjunHour = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueTime, tbTime), tbTime, 4), "100", 2)+"%";
  949. } else {
  950. tongbiPingjunHour = "下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbTime, benyueTime), tbTime, 4), "100", 2)+"%";
  951. }
  952. // 环比数据
  953. String huanbiPingjunHour = null;
  954. if (CommonUtil.compare(benyueTime, hbTime) == 1) {
  955. huanbiPingjunHour = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueTime, hbTime), hbTime, 4), "100", 2)+"%";
  956. } else {
  957. huanbiPingjunHour = "下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(hbTime, benyueTime), hbTime, 4), "100", 2)+"%";
  958. }
  959. // 台区平均停电时长描述
  960. String areaPingjunDesc = "";
  961. for (int i = 0; i < areaTimeList.size(); i++) {
  962. String pingjunTime = CommonUtil.divide(CommonUtil.divide(areaTimeList.get(i).get("timeMinute"), areaTimeList.get(i).get("count"), 2),"60", 2);
  963. if (areaTimeList.size() - 1 == i) {
  964. areaPingjunDesc += areaTimeList.get(i).get("area")+pingjunTime+"小时;";
  965. } else {
  966. areaPingjunDesc += areaTimeList.get(i).get("area")+pingjunTime+"小时、";
  967. }
  968. }
  969. // 区域平均时长同比
  970. String tbAreaPingjunDesc = "";
  971. for (int i = 0; i < areaTimeList.size(); i++) {
  972. String pingjunTime = CommonUtil.divide(CommonUtil.divide(areaTimeList.get(i).get("timeMinute"), areaTimeList.get(i).get("count"), 2),"60", 2);
  973. for (int j = 0; j < tbAreaTimeList.size(); j++) {
  974. if (areaTimeList.get(i).get("area").equals(tbAreaTimeList.get(j).get("area"))) {
  975. String tbPingjunTime = CommonUtil.divide(CommonUtil.divide(tbAreaTimeList.get(j).get("timeMinute"), tbAreaTimeList.get(j).get("count"), 2),"60", 2);
  976. if (CommonUtil.compare(pingjunTime, tbPingjunTime) == 1) {
  977. if (i == areaTimeList.size() - 1) {
  978. tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比上升" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunTime, tbPingjunTime), tbPingjunTime, 4), "100", 2)+"%。";
  979. } else {
  980. tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比上升" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunTime, tbPingjunTime), tbPingjunTime, 4), "100", 2)+"%、";
  981. }
  982. } else {
  983. if (i == areaTimeList.size() - 1) {
  984. tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbPingjunTime, pingjunTime), tbPingjunTime, 4), "100", 2)+"%。";
  985. } else {
  986. tbAreaPingjunDesc += areaTimeList.get(i).get("area") + "同比下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbPingjunTime, pingjunTime), tbPingjunTime, 4), "100", 2)+"%、";
  987. }
  988. }
  989. break;
  990. }
  991. }
  992. }
  993. // 重新计算开始时间和结束时间
  994. if (CommonUtil.isEmpty(timeRange)) {
  995. beginTime = rangeArray[0] + "000000";
  996. endTime = rangeArray[1] + "235959";
  997. } else {
  998. String[] timeRangeArray = timeRange.split("-");
  999. beginTime = rangeArray[0] + timeRangeArray[0];
  1000. endTime = rangeArray[1] + timeRangeArray[1];
  1001. }
  1002. // 分段台区数
  1003. String fenduanDesc = "";
  1004. for (int i = 0; i < fenduanList.size(); i ++) {
  1005. Map<String, String> shiduanMap = fenduanList.get(i);
  1006. shiduanMap.put("beginTime", beginTime);
  1007. shiduanMap.put("endTime", endTime);
  1008. String num = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00FenDuan(shiduanMap);
  1009. String zhanbi = CommonUtil.multiply(CommonUtil.divide(num, totalCount, 4), "100", 2);
  1010. if (i == fenduanList.size() - 1) {
  1011. fenduanDesc += shiduanMap.get("desc")+ "的" + num+ "台,占比"+zhanbi+"%。";
  1012. } else {
  1013. fenduanDesc += shiduanMap.get("desc")+ "的" + num+ "台,占比"+zhanbi+"%;";
  1014. }
  1015. }
  1016. param.put("beginTime", beginTime);
  1017. param.put("endTime", endTime);
  1018. // 最长停电台区
  1019. List<Map<String, String>> zuichangTaiquList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00ZuichangTaiqu(param);
  1020. String zuichangTaiQu = "";
  1021. String zuichangTaiQuTime = "";
  1022. String qiciTaiQu = "";
  1023. String qiciTaiQuTime = "";
  1024. if (zuichangTaiquList.size() > 0) {
  1025. zuichangTaiQu = zuichangTaiquList.get(0).get("addressName");
  1026. zuichangTaiQuTime = CommonUtil.divide(zuichangTaiquList.get(0).get("timeMinute"), "60", 2);
  1027. if (zuichangTaiquList.size() > 1) {
  1028. qiciTaiQu = zuichangTaiquList.get(1).get("addressName");
  1029. qiciTaiQuTime = CommonUtil.divide(zuichangTaiquList.get(1).get("timeMinute"), "60", 2);
  1030. }
  1031. }
  1032. // 两个月内停电2次以上的数据
  1033. String beginDay = DateUtil.dateAddMonth(rangeArray[1], Integer.parseInt("-2"));
  1034. param.put("beginDay", beginDay);
  1035. param.put("endDay", rangeArray[1]);
  1036. param.put("countNum", "2");
  1037. List<Map<String, String>> twiceMountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  1038. Map<String, Integer> taiQuMapTwice = new HashMap<String, Integer>();//区域统计
  1039. String totalCountTwice = "0";
  1040. for (Map<String, String> map : twiceMountCountList) {
  1041. String area = map.get("area");
  1042. // 已存在
  1043. if (taiQuMapTwice.containsKey(area)) {
  1044. taiQuMapTwice.put(map.get("area"), taiQuMapTwice.get(map.get("area"))+1);
  1045. } else {
  1046. taiQuMapTwice.put(map.get("area"), 1);
  1047. }
  1048. totalCountTwice = CommonUtil.add(totalCountTwice, "1");
  1049. }
  1050. String totalCountTwiceDesc = "";
  1051. for (Map.Entry<String, Integer> entry : taiQuMapTwice.entrySet()) {
  1052. totalCountTwiceDesc += entry.getKey() + entry.getValue()+"台,占比"+CommonUtil.multiply(CommonUtil.divide(entry.getValue().toString(), totalCountTwice, 4), "100", 2)+"%;";
  1053. }
  1054. totalCountTwiceDesc = totalCountTwiceDesc.substring(0,totalCountTwiceDesc.length() - 1) + "。";
  1055. Map<String, Integer> countMapTwice = new HashMap<String, Integer>();
  1056. for (Map<String, String> map : twiceMountCountList) {
  1057. String num = map.get("num");
  1058. // 已存在
  1059. if (countMapTwice.containsKey(num)) {
  1060. countMapTwice.put(num, countMapTwice.get(num) + 1);
  1061. } else {
  1062. countMapTwice.put(num, 1);
  1063. }
  1064. }
  1065. String countMapTwiceDesc = "";
  1066. for (Map.Entry<String, Integer> entry : countMapTwice.entrySet()) {
  1067. countMapTwiceDesc += "停电" + entry.getKey() + "次的" + entry.getValue() + "台,占比" + CommonUtil.multiply(CommonUtil.divide(entry.getValue().toString(), totalCountTwice, 4), "100", 2)+"%;";
  1068. }
  1069. countMapTwiceDesc = countMapTwiceDesc.substring(0,countMapTwiceDesc.length() - 1) + "。";
  1070. // 两个月内停电3次以上的数据
  1071. param.put("countNum", "3");
  1072. List<Map<String, String>> thipleMountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  1073. String totalCountthiple = String.valueOf(thipleMountCountList.size());
  1074. /**停电次数数据处理----end----*/
  1075. String descStr = "<p>(1)台区停电总体情况${month}月份,台区累计停电${benyueCount}台次,同比${tongbi},环比${huanbi},涉及${shejiNum}个台区,${shejiDesc}</p>"
  1076. + "<p>(2)台区停电时长情况${totalCount}个台区累计停电时间${benyueTime}小时,平均停电时长${pingjunHour}小时,同比${tongbiPingjunHour},环比${huanbiPingjunHour}。台区平均停电时间为${areaPingjunDesc}从同比情况看,${tbAreaPingjunDesc}</p>"
  1077. + "<p>台区停电时长在${fenduanDesc}停电时长最长的为${zuichangTaiQu},停电${zuichangTaiQuTime}小时,其次是${qiciTaiQu},停电时长${qiciTaiQuTime}小时。</p>"
  1078. + "<p>(3)台区重复停电情况两个月内停电2次及以上的台变${totalCountTwice}个,其中${totalCountTwiceDesc}${totalCountTwice}个重复停电台变中,${countMapTwiceDesc}两个月内停电3次及以上的台变${totalCountthiple}个。</p>";
  1079. Map<String, Object> dataMap = new HashMap<String, Object>();
  1080. dataMap.put("month", month);
  1081. dataMap.put("benyueCount", benyueCount);
  1082. dataMap.put("tongbi", tongbi);
  1083. dataMap.put("huanbi", huanbi);
  1084. dataMap.put("shejiNum", shejiNum);
  1085. dataMap.put("shejiDesc", shejiDesc);
  1086. dataMap.put("totalCount", totalCount);
  1087. dataMap.put("benyueTime", benyueTime);
  1088. dataMap.put("pingjunHour", pingjunHour);
  1089. dataMap.put("tongbiPingjunHour", tongbiPingjunHour);
  1090. dataMap.put("huanbiPingjunHour", huanbiPingjunHour);
  1091. dataMap.put("areaPingjunDesc", areaPingjunDesc);
  1092. dataMap.put("tbAreaPingjunDesc", tbAreaPingjunDesc);
  1093. dataMap.put("fenduanDesc", fenduanDesc);
  1094. dataMap.put("zuichangTaiQu", zuichangTaiQu);
  1095. dataMap.put("zuichangTaiQuTime", zuichangTaiQuTime);
  1096. dataMap.put("qiciTaiQu", qiciTaiQu);
  1097. dataMap.put("qiciTaiQuTime", qiciTaiQuTime);
  1098. dataMap.put("totalCountTwice", totalCountTwice);
  1099. dataMap.put("totalCountTwiceDesc", totalCountTwiceDesc);
  1100. dataMap.put("countMapTwiceDesc", countMapTwiceDesc);
  1101. dataMap.put("totalCountthiple", totalCountthiple);
  1102. Map<String, Object> resMap = new HashMap<String, Object>();
  1103. resMap.put("dataMap", dataMap);
  1104. resMap.put("descStr", descStr);
  1105. return resMap;
  1106. }
  1107. public List<List<String>> reportTypeZDDTYBB(String firstFileId, String secondFileId) throws MINBusinessException{
  1108. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1109. List<List<String>> resList = new ArrayList<List<String>>();
  1110. List<String> titleList = new ArrayList<String>();
  1111. titleList.add("ID");
  1112. titleList.add("TNAME");
  1113. titleList.add("CMODE");
  1114. titleList.add("VALUE");
  1115. titleList.add("facname");
  1116. titleList.add("type");
  1117. titleList.add("fdid");
  1118. titleList.add("yxstatus");
  1119. titleList.add("tytime");
  1120. titleList.add("SRC");
  1121. resList.add(titleList);
  1122. DwFileDetail01Example fileDetail01Example = new DwFileDetail01Example();
  1123. fileDetail01Example.createCriteria().andFileIdEqualTo(firstFileId);
  1124. // 选择文件
  1125. List<DwFileDetail01> firstList = db.selectByExample(DwFileDetail01Mapper.class, fileDetail01Example);
  1126. fileDetail01Example.clear();
  1127. // 对比文件
  1128. fileDetail01Example.createCriteria().andFileIdEqualTo(secondFileId);
  1129. List<DwFileDetail01> secondList = db.selectByExample(DwFileDetail01Mapper.class, fileDetail01Example);
  1130. for (DwFileDetail01 first : firstList) {
  1131. String firstExcelId = first.getExcelId();
  1132. boolean flag = false;
  1133. for (DwFileDetail01 second : secondList) {
  1134. String secondExcelId = second.getExcelId();
  1135. if (firstExcelId.equals(secondExcelId)) {
  1136. flag = true;
  1137. break;
  1138. }
  1139. }
  1140. if (!flag) {
  1141. List<String> resChildList = new ArrayList<String>();
  1142. resChildList.add(first.getExcelId());
  1143. resChildList.add(first.getExcelTname());
  1144. resChildList.add(first.getExcelCmode());
  1145. resChildList.add(first.getExcelValue());
  1146. resChildList.add(first.getExcelFacname());
  1147. resChildList.add(first.getExcelFdid());
  1148. resChildList.add(first.getExcelType());
  1149. resChildList.add(first.getExcelYxstatus());
  1150. resChildList.add(first.getExcelTytime());
  1151. resChildList.add("退出");
  1152. resList.add(resChildList);
  1153. }
  1154. }
  1155. for (DwFileDetail01 second : secondList) {
  1156. String secondExcelId = second.getExcelId();
  1157. boolean flag = false;
  1158. for (DwFileDetail01 first : firstList) {
  1159. String firstExcelId = first.getExcelId();
  1160. if (secondExcelId.equals(firstExcelId)) {
  1161. flag = true;
  1162. break;
  1163. }
  1164. }
  1165. if (!flag) {
  1166. List<String> resChildList = new ArrayList<String>();
  1167. resChildList.add(second.getExcelId());
  1168. resChildList.add(second.getExcelTname());
  1169. resChildList.add(second.getExcelCmode());
  1170. resChildList.add(second.getExcelValue());
  1171. resChildList.add(second.getExcelFacname());
  1172. resChildList.add(second.getExcelFdid());
  1173. resChildList.add(second.getExcelType());
  1174. resChildList.add(second.getExcelYxstatus());
  1175. resChildList.add(second.getExcelTytime());
  1176. resChildList.add("投入");
  1177. resList.add(resChildList);
  1178. }
  1179. }
  1180. return resList;
  1181. }
  1182. public List<List<String>> reportTypeFADZBB(String FADateRange, String yearChoose) throws MINBusinessException, ParseException{
  1183. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1184. List<List<String>> resList = new ArrayList<List<String>>();
  1185. List<String> titleList = new ArrayList<String>();
  1186. titleList.add("故障区间判断正确率");
  1187. titleList.add("故障区间判断正确环比");
  1188. titleList.add("故障前后段恢复正确率");
  1189. titleList.add("故障前后段恢复正确环比");
  1190. titleList.add("配电线路故障自愈成功率");
  1191. titleList.add("配电线路故障自愈成功环比");
  1192. resList.add(titleList);
  1193. Date beginTimeDate = DateUtil.parseDate(yearChoose + FADateRange.substring(0, 4), "yyyyMMdd");
  1194. String beginTime = DateUtil.format(beginTimeDate, "yyyyMMdd");
  1195. String endTime = yearChoose + FADateRange.substring(4, 8);
  1196. // 开始月份是12,年份取下一年
  1197. if ("12".equals(beginTime.substring(0, 2))) {
  1198. endTime = CommonUtil.add(yearChoose, "1") + FADateRange.substring(4, 8);
  1199. }
  1200. Map<String, String> param = new HashMap<String, String>();
  1201. param.put("beginTime", beginTime);
  1202. param.put("endTime", endTime);
  1203. List<Map<String, String>> GZQJPDList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPD(param);
  1204. List<Map<String, String>> GZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQHDHF(param);
  1205. List<Map<String, String>> GZQJPDAndGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPDAndGZQHDHF(param);
  1206. // 环比日期
  1207. String huanbiEndTime = DateUtil.dateAddDay(beginTime, -1);
  1208. PubAppparExample appparExample = new PubAppparExample();
  1209. appparExample.createCriteria().andCodeEqualTo("FADateRange").andValueLike("%"+huanbiEndTime.substring(4, 8));
  1210. List<PubApppar> appparList = db.getMybatisMapper(PubAppparMapper.class).selectByExample(appparExample);
  1211. if (appparList.size() != 1) {
  1212. throw new MINBusinessException("FA动作正确率日期区间获取错误!");
  1213. }
  1214. PubApppar apppar = appparList.get(0);
  1215. String value = apppar.getValue();
  1216. String huanbiBeginTime = huanbiEndTime.substring(0, 4) + value.substring(0, 4);
  1217. // 结束月是1月,年份取上一年
  1218. if ("01".equals(huanbiBeginTime.substring(4, 6))) {
  1219. huanbiBeginTime = CommonUtil.subtract(huanbiEndTime.substring(0, 4), "1") + value.substring(0, 4);
  1220. }
  1221. List<Map<String, String>> huanbiGZQJPDList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPD(param);
  1222. List<Map<String, String>> huanbiGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQHDHF(param);
  1223. List<Map<String, String>> huanbiGZQJPDAndGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPDAndGZQHDHF(param);
  1224. List<String> childList = new ArrayList<String>();
  1225. // 故障区间判断正确率
  1226. if (GZQJPDList.size() == 0) {
  1227. childList.add("无数据");
  1228. } else {
  1229. String zhengqueCount = "0";
  1230. String totalNum = "0";
  1231. for (Map<String, String> dataMap : GZQJPDList) {
  1232. if ("正确".equals(dataMap.get("gzqjpd").trim())) {
  1233. zhengqueCount = dataMap.get("num");
  1234. }
  1235. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1236. }
  1237. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1238. }
  1239. // 故障区间判断正确环比
  1240. if (huanbiGZQJPDList.size() == 0) {
  1241. childList.add("无数据");
  1242. } else {
  1243. String zhengqueCount = "0";
  1244. String totalNum = "0";
  1245. for (Map<String, String> dataMap : huanbiGZQJPDList) {
  1246. if ("正确".equals(dataMap.get("gzqjpd").trim())) {
  1247. zhengqueCount = dataMap.get("num");
  1248. }
  1249. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1250. }
  1251. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1252. }
  1253. // 故障前后段恢复正确率
  1254. if (GZQHDHFList.size() == 0) {
  1255. childList.add("无数据");
  1256. } else {
  1257. String zhengqueCount = "0";
  1258. String totalNum = "0";
  1259. for (Map<String, String> dataMap : GZQHDHFList) {
  1260. if ("正确".equals(dataMap.get("gzqhdhf").trim())) {
  1261. zhengqueCount = dataMap.get("num");
  1262. }
  1263. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1264. }
  1265. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1266. }
  1267. // 故障前后段恢复正确环比
  1268. if (huanbiGZQHDHFList.size() == 0) {
  1269. childList.add("无数据");
  1270. } else {
  1271. String zhengqueCount = "0";
  1272. String totalNum = "0";
  1273. for (Map<String, String> dataMap : huanbiGZQHDHFList) {
  1274. if ("正确".equals(dataMap.get("gzqhdhf").trim())) {
  1275. zhengqueCount = dataMap.get("num");
  1276. }
  1277. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1278. }
  1279. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1280. }
  1281. // 配电线路故障自愈成功率
  1282. if (GZQJPDAndGZQHDHFList.size() == 0) {
  1283. childList.add("无数据");
  1284. } else {
  1285. String zhengqueCount = "0";
  1286. String totalNum = "0";
  1287. for (Map<String, String> dataMap : huanbiGZQHDHFList) {
  1288. // 故障区间判断、故障前后段恢复均为正确的数量/总数量
  1289. if ("正确".equals(dataMap.get("gzqhdhf")) && "正确".equals(dataMap.get("gzqjpd"))) {
  1290. zhengqueCount = dataMap.get("num");
  1291. }
  1292. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1293. }
  1294. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1295. }
  1296. // 配电线路故障自愈成功环比
  1297. if (huanbiGZQJPDAndGZQHDHFList.size() == 0) {
  1298. childList.add("无数据");
  1299. } else {
  1300. String zhengqueCount = "0";
  1301. String totalNum = "0";
  1302. for (Map<String, String> dataMap : huanbiGZQJPDAndGZQHDHFList) {
  1303. // 故障区间判断、故障前后段恢复均为正确的数量/总数量
  1304. if ("正确".equals(dataMap.get("gzqhdhf").trim()) && "正确".equals(dataMap.get("gzqjpd").trim())) {
  1305. zhengqueCount = dataMap.get("num");
  1306. }
  1307. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1308. }
  1309. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1310. }
  1311. resList.add(childList);
  1312. return resList;
  1313. }
  1314. /**
  1315. * 低电压治理分析表
  1316. * @param range
  1317. * @param reportTypeId
  1318. * @return
  1319. * @throws MINBusinessException
  1320. * @throws ParseException
  1321. */
  1322. public List<List<String>> reportTypeDDYZLFXB(String range, String reportTypeId) throws MINBusinessException, ParseException{
  1323. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1324. List<List<String>> resList = new ArrayList<List<String>>();
  1325. List<String> titleList = new ArrayList<String>();
  1326. titleList.add("序号");
  1327. titleList.add("县公司名称");
  1328. titleList.add("用户管理单位名称");
  1329. titleList.add("线路名称");
  1330. titleList.add("台区ID");
  1331. titleList.add("变压器名称");
  1332. titleList.add("用户编号");
  1333. titleList.add("低电压时长");
  1334. titleList.add("累计天数");
  1335. titleList.add("低电压主要原因(点选)");
  1336. titleList.add("具体原因");
  1337. titleList.add("治理措施");
  1338. titleList.add("是否治理(点选)");
  1339. titleList.add("治理完成时间");
  1340. titleList.add("是否消除");
  1341. range = range.replaceAll(" ", "");
  1342. String[] rangeArray = range.split("-");
  1343. String beginTime = rangeArray[0];
  1344. String endTime = rangeArray[1];
  1345. List<String> childLists = new ArrayList<String>();
  1346. childLists.add("1.数据来源:智能化供电服务指挥系统;因系统数据滞后,统计时间为:"+CommonUtil.dateFormat(beginTime,"yyyy年MM月dd日")+"——"+CommonUtil.dateFormat(endTime,"yyyy年MM月dd日")+",每日发生低电压客户已标红,受考核用户已标黄,累计时长≥15小时的预警用户标褐红色需重点治理。每日新增预警及考核用户编号已标红。2.反馈要求:请各单位照实填写,按时反馈,具体原因请填写详细,治理完成的填写治理完成时间。未填写或填写不详细的一律列入考核,请知悉。3.低电压是否消除:以供电服务指挥系统数据为依据,连续7天未发生低电压视为低电压消除。");
  1347. resList.add(childLists);
  1348. int count = DateUtil.diffDate(beginTime, endTime);
  1349. //日期集合
  1350. List<String> dateList = new ArrayList<String>();
  1351. for(int i=0;i<=count;i++){
  1352. String beginDate = DateUtil.dateAddDay(endTime,-i);
  1353. dateList.add(beginDate);
  1354. beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6);
  1355. titleList.add(beginDate+"低电压时长");
  1356. }
  1357. //子类数据
  1358. resList.add(titleList);
  1359. //查询累计天数以及累计时长
  1360. Map<String, String> param = new HashMap<String, String>();
  1361. param.put("beginTime", beginTime);
  1362. param.put("endTime", endTime);
  1363. List<Map<String, String>> DDYZLFXBList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYZLFXB(param);
  1364. int a = 0;
  1365. for(Map<String, String> map :DDYZLFXBList){
  1366. List<String> childList = new ArrayList<String>();
  1367. String dysc = String.format("%.0f",map.get("dysc"));
  1368. String ljts = String.format("%.0f",map.get("ljts"));
  1369. a++;
  1370. childList.add(a+"");
  1371. childList.add(map.get("xgsmc"));
  1372. childList.add(map.get("yhgldw"));
  1373. childList.add(map.get("xlmc"));
  1374. childList.add(map.get("tqid"));
  1375. childList.add(map.get("byqmc"));
  1376. childList.add(map.get("yhid"));
  1377. childList.add(dysc);
  1378. childList.add(ljts);
  1379. childList.add("");
  1380. childList.add("");
  1381. childList.add("");
  1382. childList.add("");
  1383. childList.add("");
  1384. //查询该用户低电压明细
  1385. DwFileDetail03Example example03 = new DwFileDetail03Example();
  1386. example03.createCriteria().andYhidEqualTo(map.get("yhid")).andSjrqBetween(beginTime, endTime);
  1387. example03.setOrderByClause("DFD3_SJRQ desc");
  1388. List<DwFileDetail03> DateList = db.selectByExample(DwFileDetail03Mapper.class, example03);
  1389. int countJg = DateUtil.diffDate(DateList.get(0).getSjrq(), endTime);
  1390. //查询是否低电压已消除
  1391. if(countJg>=7){
  1392. childList.add("是");
  1393. }else{
  1394. childList.add("");
  1395. }
  1396. //循环加载低电压时长
  1397. for(String date:dateList){
  1398. int b = 0;
  1399. for(DwFileDetail03 detail:DateList){
  1400. if(date.equals(detail.getSjrq())){
  1401. childList.add(detail.getDysc());
  1402. b=1;
  1403. break;
  1404. }
  1405. }
  1406. if(b == 0){
  1407. childList.add("");
  1408. }
  1409. }
  1410. resList.add(childList);
  1411. }
  1412. // resList.add(DDYZLFXBList);
  1413. return resList;
  1414. }
  1415. /**
  1416. * 低电压日报
  1417. * @param range
  1418. * @param reportTypeId
  1419. * @return
  1420. * @throws MINBusinessException
  1421. * @throws ParseException
  1422. */
  1423. public List<List<String>> reportTypeDDYRB(String DdyDateRange, String yearChoose,String range, String reportTypeId) throws MINBusinessException, ParseException{
  1424. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1425. List<List<String>> resList = new ArrayList<List<String>>();
  1426. List<String> titleList = new ArrayList<String>();
  1427. Date beginTimeDate = DateUtil.parseDate(yearChoose + DdyDateRange.substring(0, 4), "yyyyMMdd");
  1428. String beginTime = DateUtil.format(beginTimeDate, "yyyyMMdd");
  1429. String endTime = yearChoose + DdyDateRange.substring(4, 8);
  1430. // 开始月份是12,年份取下一年
  1431. if ("12".equals(beginTime.substring(0, 2))) {
  1432. endTime = CommonUtil.add(yearChoose, "1") + DdyDateRange.substring(4, 8);
  1433. }
  1434. Map<String, String> countMap = new HashMap<String, String>();
  1435. countMap.put("xintai", "0");
  1436. countMap.put("daiyue", "0");
  1437. countMap.put("ningyang", "0");
  1438. countMap.put("taishan", "0");
  1439. countMap.put("dongping", "0");
  1440. countMap.put("feicheng", "0");
  1441. countMap.put("taishanjingqu", "0");
  1442. countMap.put("gaoxin", "0");
  1443. countMap.put("heji", "0");
  1444. List<String> title = new ArrayList<String>();
  1445. //标题
  1446. List<String> childList0 = new ArrayList<String>();
  1447. childList0.add("分类\\单位");
  1448. childList0.add("岱岳");
  1449. childList0.add("新泰");
  1450. childList0.add("高新");
  1451. childList0.add("泰山");
  1452. childList0.add("宁阳");
  1453. childList0.add("景区");
  1454. childList0.add("东平");
  1455. childList0.add("肥城");
  1456. childList0.add("合计");
  1457. // resList.add(childList0);
  1458. //客户总数
  1459. List<String> childList1 = new ArrayList<String>();
  1460. childList1.add("客户总数");
  1461. childList1.add(customerMap.get("daiyue"));
  1462. childList1.add(customerMap.get("xintai"));
  1463. childList1.add(customerMap.get("gaoxin"));
  1464. childList1.add(customerMap.get("taishan"));
  1465. childList1.add(customerMap.get("ningyang"));
  1466. childList1.add(customerMap.get("jingqu"));
  1467. childList1.add(customerMap.get("dongping"));
  1468. childList1.add(customerMap.get("feicheng"));
  1469. childList1.add(customerMap.get("heji"));
  1470. // resList.add(childList1);
  1471. //低电压客户数
  1472. List<String> childList2 = new ArrayList<String>();
  1473. childList2.add("低电压客户数");
  1474. for(String name:childList0){
  1475. if("分类\\单位".equals(name)){
  1476. continue;
  1477. }
  1478. DwFileDetail03Example example03 = new DwFileDetail03Example();
  1479. if("合计".equals(name)){
  1480. example03.createCriteria().andSjrqBetween(beginTime, endTime);
  1481. }else{
  1482. example03.createCriteria().andSjrqBetween(beginTime, endTime).andXgsmcLike(name+"%");
  1483. }
  1484. List<DwFileDetail03> DateList = db.selectByExample(DwFileDetail03Mapper.class, example03);
  1485. childList2.add(DateList.size()+"");
  1486. }
  1487. // resList.add(childList2);
  1488. //低电压客户占比
  1489. List<String> childList3 = new ArrayList<String>();
  1490. childList3.add("低电压客户占比");
  1491. for(int i=1;i<childList1.size();i++){
  1492. //客户总数
  1493. String count = childList1.get(i);
  1494. //昨日客户数
  1495. String dayCount = childList2.get(i);
  1496. childList3.add(CommonUtil.multiply(CommonUtil.divide(dayCount, count, 4), "100", 2) + "%");
  1497. }
  1498. // resList.add(childList3);
  1499. //昨日新增考核数
  1500. List<String> childList4 = new ArrayList<String>();
  1501. childList4.add("昨日新增考核户数");
  1502. for(int i=1;i<childList0.size();i++){
  1503. String endTimes = DateUtil.dateAddDay(range,-1);
  1504. Map<String, String> map = new HashMap<String, String>();
  1505. if(!"合计".equals(childList0.get(i))){
  1506. map.put("area", childList0.get(i));
  1507. }
  1508. map.put("beginTime", beginTime);
  1509. map.put("endTime", endTimes);
  1510. List<Map<String, String>> fileList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map);
  1511. map.put("endTime", endTime);
  1512. List<Map<String, String>> fileList1 = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map);
  1513. childList4.add((fileList1.size()-fileList.size())+"");
  1514. }
  1515. // resList.add(childList4);
  1516. //截至目前未治理完成户数
  1517. List<String> childList5 = new ArrayList<String>();
  1518. childList5.add("截至目前未治理完成户数");
  1519. //用户id
  1520. List<String> childList6 = new ArrayList<String>();
  1521. for(int i=1;i<childList0.size();i++){
  1522. int dayCount = DateUtil.diffDate(range,beginTime);
  1523. String beginTimes = DateUtil.dateAddDay(range,-6);
  1524. DwFileDetail03Example example = new DwFileDetail03Example();
  1525. Map<String, String> map = new HashMap<String, String>();
  1526. if(!"合计".equals(childList0.get(i))){
  1527. map.put("area", childList0.get(i));
  1528. }
  1529. map.put("beginTime", beginTime);
  1530. map.put("endTime", range);
  1531. List<Map<String, String>> fileList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map);
  1532. if(dayCount<6){
  1533. childList5.add(fileList.size()+"");
  1534. }else{
  1535. for(Map<String, String> maps:fileList){
  1536. childList6.add(maps.get("yhid"));
  1537. }
  1538. example.createCriteria().andSjrqBetween(beginTimes, range).andYhidIn(childList6);
  1539. List<DwFileDetail03> DateList = db.selectByExample(DwFileDetail03Mapper.class, example);
  1540. childList5.add(DateList.size()+"");
  1541. }
  1542. }
  1543. String content = "昨日新增受考核低电压客户"+childList4.get(childList4.size()-1)+"户,按单位分:";
  1544. for(int i=1;i<childList0.size()-1;i++){
  1545. content=content+childList0.get(i)+childList4.get(i)+"户,";
  1546. if(childList0.size()-1==i){
  1547. content=content+childList0.get(i)+childList4.get(i)+"户。";
  1548. }
  1549. }
  1550. content = content+"昨日新增未治理完成客户_户,截至目前未治理完成"+childList5.get(childList5.size()-1)+"户,_户正在治理;_户治理后再次出现,其中_各_户;"
  1551. + "_户未开始治理,其中__户。其中全年累计受考核30天及以上且未治理完成的_户:为_户(户号:_)。";
  1552. title.add(content);
  1553. resList.add(title);
  1554. resList.add(childList0);
  1555. resList.add(childList1);
  1556. resList.add(childList2);
  1557. resList.add(childList3);
  1558. resList.add(childList4);
  1559. resList.add(childList5);
  1560. return resList;
  1561. }
  1562. /**
  1563. * 过电压治理分析表
  1564. * @param range
  1565. * @param reportTypeId
  1566. * @return
  1567. * @throws MINBusinessException
  1568. * @throws ParseException
  1569. */
  1570. public List<List<String>> reportTypeGDYZLFXB(String range, String reportTypeId) throws MINBusinessException, ParseException{
  1571. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1572. List<List<String>> resList = new ArrayList<List<String>>();
  1573. List<String> titleList = new ArrayList<String>();
  1574. titleList.add("序号");
  1575. titleList.add("县公司名称");
  1576. titleList.add("用户管理单位名称");
  1577. titleList.add("线路名称");
  1578. titleList.add("台区ID");
  1579. titleList.add("变压器名称");
  1580. titleList.add("用户编号");
  1581. titleList.add("过电压时长");
  1582. titleList.add("低电压主要原因(点选)");
  1583. titleList.add("具体原因");
  1584. titleList.add("治理措施");
  1585. titleList.add("是否治理(点选)");
  1586. titleList.add("治理完成时间");
  1587. titleList.add("是否消除");
  1588. range = range.replaceAll(" ", "");
  1589. String[] rangeArray = range.split("-");
  1590. String beginTime = rangeArray[0];
  1591. String endTime = rangeArray[1];
  1592. List<String> childLists = new ArrayList<String>();
  1593. String content = "1.数据来源:智能化供电服务指挥系统;因系统数据滞后,统计时间为:"
  1594. + CommonUtil.dateFormat(beginTime,"yyyy年MM月dd日")+"——"+CommonUtil.dateFormat(endTime,"yyyy年MM月dd日")+";每日过电压时长24小时客户已标红,受考核用户已标黄(连续48小时过电压),需重点治理。2.反馈要求:"
  1595. + "请各单位照实填写,按时反馈,具体原因请详细填写,现场治理完成的填写现场治理时间(格式为20200101),未填写或填写不详细的一律列入考核,请知悉。"
  1596. + "3.过电压是否消除:以供电服务指挥系统数据为依据,连续7天未发生过电压视为过电压消除。";
  1597. childLists.add(content);
  1598. resList.add(childLists);
  1599. int count = DateUtil.diffDate(beginTime, endTime);
  1600. //日期集合
  1601. List<String> dateList = new ArrayList<String>();
  1602. for(int i=0;i<=count;i++){
  1603. String beginDate = DateUtil.dateAddDay(endTime,-i);
  1604. dateList.add(beginDate);
  1605. beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6);
  1606. titleList.add(beginDate+"过电压时长");
  1607. }
  1608. //子类数据
  1609. resList.add(titleList);
  1610. //查询累计天数以及累计时长
  1611. Map<String, String> param = new HashMap<String, String>();
  1612. param.put("beginTime", beginTime);
  1613. param.put("endTime", endTime);
  1614. List<Map<String, String>> GDYZLFXBList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail04ByGDYZLFXB(param);
  1615. int a = 0;
  1616. for(Map<String, String> map :GDYZLFXBList){
  1617. List<String> childList = new ArrayList<String>();
  1618. String dysc = String.format("%.0f",map.get("gdysc"));
  1619. a++;
  1620. childList.add(a+"");
  1621. childList.add(map.get("xgsmc"));
  1622. childList.add(map.get("yhgldw"));
  1623. childList.add(map.get("xlmc"));
  1624. childList.add(map.get("tqid"));
  1625. childList.add(map.get("byqmc"));
  1626. childList.add(map.get("yhid"));
  1627. childList.add(dysc);
  1628. childList.add("");
  1629. childList.add("");
  1630. childList.add("");
  1631. childList.add("");
  1632. childList.add("");
  1633. //查询该用户低电压明细
  1634. DwFileDetail04Example example04 = new DwFileDetail04Example();
  1635. example04.createCriteria().andYhidEqualTo(map.get("yhid")).andSjrqBetween(beginTime, endTime);
  1636. example04.setOrderByClause("DFD4_SJRQ desc");
  1637. List<DwFileDetail04> DateList = db.selectByExample(DwFileDetail04Mapper.class, example04);
  1638. int countJg = DateUtil.diffDate(DateList.get(0).getSjrq(), endTime);
  1639. //查询是否低电压已消除
  1640. if(countJg>=7){
  1641. childList.add("是");
  1642. }else{
  1643. childList.add("");
  1644. }
  1645. int bs=0;
  1646. //循环加载低电压时长
  1647. for(String date:dateList){
  1648. int b = 0;
  1649. for(DwFileDetail04 detail:DateList){
  1650. if(date.equals(detail.getSjrq())){
  1651. childList.add(detail.getGdysc());
  1652. b=1;
  1653. bs++;
  1654. break;
  1655. }
  1656. }
  1657. if(b == 0){
  1658. if(bs<2){
  1659. bs=0;
  1660. }
  1661. childList.add("");
  1662. }
  1663. }
  1664. childList.add(bs+"");
  1665. resList.add(childList);
  1666. }
  1667. // resList.add(DDYZLFXBList);
  1668. return resList;
  1669. }
  1670. public Map<String, Object> reportType95598YB(String range) throws MINBusinessException, ParseException{
  1671. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1672. Map<String, Object> resMap = new HashMap<String, Object>();
  1673. range = range.replaceAll(" ", "");
  1674. String[] rangeArray = range.split("-");
  1675. String beginTime = rangeArray[0];
  1676. String endTime = rangeArray[1];
  1677. // 类型列表
  1678. List<String> typeList = new ArrayList<String>();
  1679. // 统计表格
  1680. List<List<String>> tongjiList = new ArrayList<List<String>>();
  1681. List<String> titleList = new ArrayList<String>();
  1682. titleList.add("类型");
  1683. titleList.add("去年同月");
  1684. titleList.add("上月");
  1685. titleList.add("本月");
  1686. titleList.add("同比");
  1687. titleList.add("环比");
  1688. tongjiList.add(titleList);
  1689. Map<String, Object> param = new HashMap<String, Object>();
  1690. String totalBenyueNum = "0";
  1691. String totalShangyueNum = "0";
  1692. String totalQunianNum = "0";
  1693. // 本月数据
  1694. param.put("beginTime", beginTime);
  1695. param.put("endTime", endTime);
  1696. // 类型统计数据
  1697. List<Map<String, Object>> benyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
  1698. // 区域统计数据
  1699. List<Map<String, Object>> benyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
  1700. for (Map<String, Object> map : benyueTongjiMap) {
  1701. String type = String.valueOf(map.get("type"));
  1702. String num = String.valueOf(map.get("num"));
  1703. // 不包含该类型,新增一个类型
  1704. if (!typeList.contains(type)) {
  1705. typeList.add(type);
  1706. List<String> typeDataList = Arrays.asList(new String[6]);
  1707. typeDataList.set(0,type);
  1708. typeDataList.set(3, num);
  1709. tongjiList.add(typeDataList);
  1710. // 已包含该类型,原数据中增加数据
  1711. } else {
  1712. int index = typeList.indexOf(type);
  1713. List<String> typeDataList = tongjiList.get(index + 1);
  1714. typeDataList.set(3, num);
  1715. }
  1716. totalBenyueNum = CommonUtil.add(totalBenyueNum, num);
  1717. }
  1718. // 上月数据
  1719. String lastBeginTime = DateUtil.dateAddMonth(beginTime, -1);
  1720. String lastEndTime = DateUtil.dateAddMonth(endTime, -1);
  1721. param.put("beginTime", lastBeginTime);
  1722. param.put("endTime", lastEndTime);
  1723. List<Map<String, Object>> shangyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
  1724. // 区域统计数据
  1725. List<Map<String, Object>> shangyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
  1726. for (Map<String, Object> map : shangyueTongjiMap) {
  1727. String type = String.valueOf(map.get("type"));
  1728. String num = String.valueOf(map.get("num"));
  1729. // 不包含该类型,新增一个类型
  1730. if (!typeList.contains(type)) {
  1731. typeList.add(type);
  1732. List<String> typeDataList = Arrays.asList(new String[6]);
  1733. typeDataList.set(0,type);
  1734. typeDataList.set(2, num);
  1735. tongjiList.add(typeDataList);
  1736. // 已包含该类型,原数据中增加数据
  1737. } else {
  1738. int index = typeList.indexOf(type);
  1739. List<String> typeDataList = tongjiList.get(index + 1);
  1740. typeDataList.set(2, num);
  1741. }
  1742. totalShangyueNum = CommonUtil.add(totalShangyueNum, num);
  1743. }
  1744. // 去年同期数据
  1745. String qinianBeginTime = DateUtil.dateAddYear(beginTime, -1);
  1746. String qunianEndTime = DateUtil.dateAddYear(endTime, -1);
  1747. param.put("beginTime", qinianBeginTime);
  1748. param.put("endTime", qunianEndTime);
  1749. List<Map<String, Object>> qunianTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
  1750. // 区域统计数据
  1751. List<Map<String, Object>> qunianByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
  1752. for (Map<String, Object> map : qunianTongjiMap) {
  1753. String type = String.valueOf(map.get("type"));
  1754. String num = String.valueOf(map.get("num"));
  1755. // 不包含该类型,新增一个类型
  1756. if (!typeList.contains(type)) {
  1757. typeList.add(type);
  1758. List<String> typeDataList = Arrays.asList(new String[6]);
  1759. typeDataList.set(0,type);
  1760. typeDataList.set(1, num);
  1761. tongjiList.add(typeDataList);
  1762. // 已包含该类型,原数据中增加数据
  1763. } else {
  1764. int index = typeList.indexOf(type);
  1765. List<String> typeDataList = tongjiList.get(index + 1);
  1766. typeDataList.set(1, num);
  1767. }
  1768. totalQunianNum = CommonUtil.add(totalQunianNum, num);
  1769. }
  1770. // 合计
  1771. List<String> hejiList = new ArrayList<String>();
  1772. hejiList.add("总计");
  1773. hejiList.add(totalQunianNum);
  1774. hejiList.add(totalShangyueNum);
  1775. hejiList.add(totalBenyueNum);
  1776. hejiList.add("");
  1777. hejiList.add("");
  1778. tongjiList.add(hejiList);
  1779. // 计算同比环比
  1780. for (int i = 1; i < tongjiList.size(); i ++) {
  1781. List<String> childList = tongjiList.get(i);
  1782. String qunianNum = CommonUtil.isEmpty(childList.get(1))?"0":childList.get(1);
  1783. String shangyueNum = CommonUtil.isEmpty(childList.get(2))?"0":childList.get(2);
  1784. String benyueNum = CommonUtil.isEmpty(childList.get(3))?"0":childList.get(3);
  1785. // 本月有数据
  1786. if (CommonUtil.compare(benyueNum, "0") != 0) {
  1787. // 去年有数据
  1788. if (CommonUtil.compare(qunianNum, "0") != 0) {
  1789. String tongbi = CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueNum, qunianNum), qunianNum, 4), "100", 2) + "%";
  1790. childList.set(4, tongbi);
  1791. }
  1792. // 上月有数据
  1793. if (CommonUtil.compare(shangyueNum, "0") != 0) {
  1794. String huanbi = CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueNum, shangyueNum), shangyueNum, 4), "100", 2) + "%";
  1795. childList.set(5, huanbi);
  1796. }
  1797. }
  1798. }
  1799. resMap.put("tongjiList", tongjiList);
  1800. // 详细数据
  1801. param.put("benyueBeginTime", beginTime);
  1802. param.put("benyueEndTime", endTime);
  1803. param.put("lastBeginTime", lastBeginTime);
  1804. param.put("lastEndTime", lastEndTime);
  1805. param.put("qinianBeginTime", qinianBeginTime);
  1806. param.put("qunianEndTime", qunianEndTime);
  1807. List<String> areaList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05GetArea(param);
  1808. List<List<List<String>>> areaDetailList = new ArrayList<List<List<String>>>();
  1809. resMap.put("areaDetailList", areaDetailList);
  1810. for (String type : typeList) {
  1811. List<List<String>> benyueDetailList = new ArrayList<List<String>>();
  1812. List<String> benyueTitleList = new ArrayList<String>();
  1813. benyueTitleList.add(beginTime + "-" + endTime);
  1814. benyueTitleList.add("业务类型");
  1815. benyueTitleList.add("一级分类");
  1816. benyueTitleList.add("二级分类");
  1817. benyueTitleList.add("业务子类");
  1818. benyueDetailList.add(benyueTitleList);
  1819. List<List<String>> shangyueDetailList = new ArrayList<List<String>>();
  1820. List<String> shangyueTitleList = new ArrayList<String>();
  1821. shangyueTitleList.add(lastBeginTime + "-" + lastEndTime);
  1822. shangyueTitleList.add("业务类型");
  1823. shangyueTitleList.add("一级分类");
  1824. shangyueTitleList.add("二级分类");
  1825. shangyueTitleList.add("业务子类");
  1826. shangyueDetailList.add(shangyueTitleList);
  1827. List<List<String>> qunianDetailList = new ArrayList<List<String>>();
  1828. List<String> qunianTitleList = new ArrayList<String>();
  1829. qunianTitleList.add(qinianBeginTime + "-" + qunianEndTime);
  1830. qunianTitleList.add("业务类型");
  1831. qunianTitleList.add("一级分类");
  1832. qunianTitleList.add("二级分类");
  1833. qunianTitleList.add("业务子类");
  1834. qunianDetailList.add(qunianTitleList);
  1835. // 区域数据
  1836. for (String area : areaList) {
  1837. benyueTitleList.add(area);
  1838. shangyueTitleList.add(area);
  1839. qunianTitleList.add(area);
  1840. }
  1841. benyueTitleList.add("总计");
  1842. shangyueTitleList.add("总计");
  1843. qunianTitleList.add("总计");
  1844. areaDetailList.add(benyueDetailList);
  1845. areaDetailList.add(shangyueDetailList);
  1846. areaDetailList.add(qunianDetailList);
  1847. // 报表详情生成
  1848. until95598(benyueByAreaMap, type, benyueDetailList);
  1849. until95598(shangyueByAreaMap, type, shangyueDetailList);
  1850. until95598(qunianByAreaMap, type, qunianDetailList);
  1851. }
  1852. // 计算总计
  1853. for (int i = 0; i < areaDetailList.size(); i ++) {
  1854. List<List<String>> excelList = areaDetailList.get(i);
  1855. List<String> zongji = new ArrayList<String>();
  1856. zongji.add("总计");
  1857. zongji.add("");
  1858. zongji.add("");
  1859. zongji.add("");
  1860. zongji.add("");
  1861. // 合计汇总
  1862. String[] zongjiNum = new String[excelList.get(0).size()- 5];
  1863. String totalNum = "0";
  1864. for (int j = 1; j < excelList.size(); j ++) {
  1865. List<String> childList = excelList.get(j);
  1866. int index = 0;
  1867. String zongjiType = "0";
  1868. for (int k = 5; k < childList.size(); k ++) {
  1869. zongjiType = CommonUtil.add(zongjiType, childList.get(k));
  1870. zongjiNum[index] = CommonUtil.add(zongjiNum[index], childList.get(k));
  1871. index ++;
  1872. }
  1873. childList.set(childList.size() - 1, zongjiType);
  1874. totalNum = CommonUtil.add(totalNum, zongjiType);
  1875. }
  1876. zongjiNum[zongjiNum.length - 1] = totalNum;
  1877. for (int j = 0; j < zongjiNum.length; j++) {
  1878. zongji.add(zongjiNum[j]);
  1879. }
  1880. excelList.add(zongji);
  1881. }
  1882. return resMap;
  1883. }
  1884. /**
  1885. * 报表数据处理
  1886. * @param areaMap
  1887. * @param type
  1888. * @param detailList
  1889. */
  1890. public void until95598(List<Map<String, Object>> areaMap, String type, List<List<String>> detailList) {
  1891. for (int i = 0; i < areaMap.size(); i ++) {
  1892. Map<String, Object> map = areaMap.get(i);
  1893. String dataType = String.valueOf(map.get("type"));
  1894. // 同一类型的数据
  1895. if (dataType.equals(type)) {
  1896. // 供电单位
  1897. String gddw = String.valueOf(map.get("gddw"));
  1898. // 数量
  1899. String num = String.valueOf(map.get("num"));
  1900. // 业务类型
  1901. String ywlx = String.valueOf(map.get("ywlx"));
  1902. // 一级分类
  1903. String yjfl = String.valueOf(map.get("yjfl"));
  1904. // 二级分类
  1905. String ejfl = String.valueOf(map.get("ejfl"));
  1906. // 业务子类
  1907. String ywzl = String.valueOf(map.get("ywzl"));
  1908. // 不是第一条数据
  1909. if (i != 0) {
  1910. // 下一条数据
  1911. Map<String, Object> lastMap = areaMap.get(i - 1);
  1912. // 业务类型
  1913. String lastYwlx = String.valueOf(lastMap.get("ywlx"));
  1914. // 一级分类
  1915. String lastYjfl = String.valueOf(lastMap.get("yjfl"));
  1916. // 二级分类
  1917. String lastEjfl = String.valueOf(lastMap.get("ejfl"));
  1918. // 业务子类
  1919. String lastYwzl = String.valueOf(lastMap.get("ywzl"));
  1920. // 业务类型等数据相同,是同一行数据
  1921. if (lastYwlx.equals(ywlx) && lastYjfl.equals(yjfl) && lastEjfl.equals(ejfl) && lastYwzl.equals(ywzl)) {
  1922. // 获取区域位置
  1923. int index = detailList.get(0).indexOf(gddw);
  1924. // 获取最后一条数据
  1925. List<String> childList = detailList.get(detailList.size() - 1);
  1926. childList.set(index, num);
  1927. // 数据不同,新增一条数据
  1928. } else {
  1929. List<String> childList = Arrays.asList(new String[detailList.get(0).size()]);
  1930. childList.set(0, dataType);
  1931. childList.set(1, ywlx);
  1932. childList.set(2, yjfl);
  1933. childList.set(3, ejfl);
  1934. childList.set(4, ywzl);
  1935. // 获取区域位置
  1936. int index = detailList.get(0).indexOf(gddw);
  1937. childList.set(index, num);
  1938. detailList.add(childList);
  1939. }
  1940. } else {
  1941. List<String> childList = Arrays.asList(new String[detailList.get(0).size()]);
  1942. childList.set(0, dataType);
  1943. childList.set(1, ywlx);
  1944. childList.set(2, yjfl);
  1945. childList.set(3, ejfl);
  1946. childList.set(4, ywzl);
  1947. // 获取区域位置
  1948. int index = detailList.get(0).indexOf(gddw);
  1949. childList.set(index, num);
  1950. detailList.add(childList);
  1951. }
  1952. }
  1953. }
  1954. }
  1955. }