ReportServiceImpl.java 149 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826
  1. package com.minpay.common.service.impl;
  2. import java.io.IOException;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.text.ParseException;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.Date;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. import com.minpay.common.util.*;
  12. import com.minpay.db.table.own.mapper.IReportBatchMapper;
  13. import net.sf.json.JSONObject;
  14. import net.sf.json.JsonConfig;
  15. import org.apache.commons.fileupload.FileItem;
  16. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  17. import com.minpay.common.constant.Constant;
  18. import com.minpay.common.service.IReportService;
  19. import com.minpay.db.table.mapper.DwDdyFxbDetailMapper;
  20. import com.minpay.db.table.mapper.DwDdyFxbMapper;
  21. import com.minpay.db.table.mapper.DwFileDetail00Mapper;
  22. import com.minpay.db.table.mapper.DwFileDetail01Mapper;
  23. import com.minpay.db.table.mapper.DwFileDetail03Mapper;
  24. import com.minpay.db.table.mapper.DwFileDetail04Mapper;
  25. import com.minpay.db.table.mapper.DwFileDetail07Mapper;
  26. import com.minpay.db.table.mapper.DwReportDataMapper;
  27. import com.minpay.db.table.mapper.DwReportInfMapper;
  28. import com.minpay.db.table.mapper.PubAppparMapper;
  29. import com.minpay.db.table.mapper.PubSysparMapper;
  30. import com.minpay.db.table.model.DwDdyFxb;
  31. import com.minpay.db.table.model.DwDdyFxbDetail;
  32. import com.minpay.db.table.model.DwDdyFxbDetailExample;
  33. import com.minpay.db.table.model.DwDdyFxbExample;
  34. import com.minpay.db.table.model.DwFileDetail00;
  35. import com.minpay.db.table.model.DwFileDetail00Example;
  36. import com.minpay.db.table.model.DwFileDetail01;
  37. import com.minpay.db.table.model.DwFileDetail01Example;
  38. import com.minpay.db.table.model.DwFileDetail03;
  39. import com.minpay.db.table.model.DwFileDetail03Example;
  40. import com.minpay.db.table.model.DwFileDetail04;
  41. import com.minpay.db.table.model.DwFileDetail04Example;
  42. import com.minpay.db.table.model.DwFileDetail07;
  43. import com.minpay.db.table.model.DwFileDetail07Example;
  44. import com.minpay.db.table.model.DwReportData;
  45. import com.minpay.db.table.model.DwReportInf;
  46. import com.minpay.db.table.model.PubApppar;
  47. import com.minpay.db.table.model.PubAppparExample;
  48. import com.minpay.db.table.model.PubSyspar;
  49. import com.minpay.db.table.own.mapper.ReportServiceMapper;
  50. import com.startup.minpay.frame.business.MINHttpServletRequestContext;
  51. import com.startup.minpay.frame.exception.MINBusinessException;
  52. import com.startup.minpay.frame.jdbc.MINRowBounds;
  53. import com.startup.minpay.frame.service.base.IMINDataBaseService;
  54. import com.startup.minpay.frame.service.base.Service;
  55. import com.startup.minpay.frame.target.MINComponent;
  56. import net.sf.json.JSONArray;
  57. @MINComponent
  58. public class ReportServiceImpl implements IReportService {
  59. private static final int DEF_DIV_SCALE =10;
  60. static Map<String, String> totalMap = new HashMap<String, String>();
  61. static String systemCode = null;
  62. //各区客户数
  63. static Map<String, String> customerMap = new HashMap<String, String>();
  64. // 各区域管辖台区数
  65. static Map<String, String> guanxiaTaiqu = new HashMap<String, String>();
  66. // 台区停电停电时长
  67. static List<Map<String, String>> fenduanList = new ArrayList<Map<String, String>>();
  68. static {
  69. //客户数
  70. customerMap.put("新泰", "593100");
  71. customerMap.put("岱岳", "323455");
  72. customerMap.put("宁阳", "301682");
  73. customerMap.put("泰山", "376298");
  74. customerMap.put("东平", "298683");
  75. customerMap.put("肥城", "375994");
  76. customerMap.put("泰山景区", "120623");
  77. customerMap.put("高新", "162627");
  78. customerMap.put("直供区", "593000");
  79. customerMap.put("陵城区", "278900");
  80. customerMap.put("宁津", "232000");
  81. customerMap.put("庆云", "130500");
  82. customerMap.put("临邑", "220200");
  83. customerMap.put("齐河", "221200");
  84. customerMap.put("平原", "235000");
  85. customerMap.put("夏津", "237200");
  86. customerMap.put("武城", "191200");
  87. customerMap.put("乐陵", "228400");
  88. customerMap.put("禹城", "268100");
  89. // 管辖台区数
  90. guanxiaTaiqu.put("高新", "2308");
  91. guanxiaTaiqu.put("岱岳", "3043");
  92. guanxiaTaiqu.put("新泰", "4286");
  93. guanxiaTaiqu.put("东平", "4000");
  94. guanxiaTaiqu.put("宁阳", "3913");
  95. guanxiaTaiqu.put("肥城", "1000");
  96. guanxiaTaiqu.put("泰山景区", "2000");
  97. guanxiaTaiqu.put("泰山", "1950");
  98. guanxiaTaiqu.put("直供区", "3640");
  99. guanxiaTaiqu.put("陵城区", "2672");
  100. guanxiaTaiqu.put("宁津", "2293");
  101. guanxiaTaiqu.put("庆云", "1538");
  102. guanxiaTaiqu.put("临邑", "2858");
  103. guanxiaTaiqu.put("齐河", "2972");
  104. guanxiaTaiqu.put("平原", "2759");
  105. guanxiaTaiqu.put("夏津", "2736");
  106. guanxiaTaiqu.put("武城", "2311");
  107. guanxiaTaiqu.put("乐陵", "2620");
  108. guanxiaTaiqu.put("禹城", "2755");
  109. // 0-1小时
  110. Map<String, String> map0To60 = new HashMap<String, String>();
  111. map0To60.put("start", "0");
  112. map0To60.put("end", "3600");
  113. map0To60.put("desc", "0-1小时");
  114. fenduanList.add(map0To60);
  115. // 1-6小时
  116. Map<String, String> map60To360 = new HashMap<String, String>();
  117. map60To360.put("start", "3600");
  118. map60To360.put("end", "21600");
  119. map60To360.put("desc", "1-6小时");
  120. fenduanList.add(map60To360);
  121. // 6-12小时
  122. Map<String, String> map360To720 = new HashMap<String, String>();
  123. map360To720.put("start", "21600");
  124. map360To720.put("end", "43200");
  125. map360To720.put("desc", "6-12小时");
  126. fenduanList.add(map360To720);
  127. // 12-24小时
  128. Map<String, String> map720To1440 = new HashMap<String, String>();
  129. map720To1440.put("start", "43200");
  130. map720To1440.put("end", "86400");
  131. map720To1440.put("desc", "12-24小时");
  132. fenduanList.add(map720To1440);
  133. // 24小时以上
  134. Map<String, String> mapGT1440 = new HashMap<String, String>();
  135. mapGT1440.put("start", "86400");
  136. mapGT1440.put("desc", "24小时以上");
  137. fenduanList.add(mapGT1440);
  138. }
  139. @Override
  140. public void init() throws MINBusinessException {
  141. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  142. //查询系统市级编号
  143. PubSyspar systemCodeSys = db.selectByPrimaryKey(PubSysparMapper.class, "SYSTEM_CODE");
  144. systemCode = systemCodeSys.getValue();
  145. PubAppparExample appparExample = new PubAppparExample();
  146. appparExample.createCriteria().andCodeEqualTo("tqtd_num_" + systemCode);
  147. String hejiNum = "0";
  148. try {
  149. List<PubApppar> appparList = db.selectByExample(PubAppparMapper.class, appparExample);
  150. for (PubApppar pub : appparList) {
  151. totalMap.put(pub.getValue(), pub.getShowmsg());
  152. hejiNum = CommonUtil.add(hejiNum, pub.getShowmsg());
  153. }
  154. } catch (MINBusinessException e) {
  155. e.printStackTrace();
  156. }
  157. totalMap.put("合计", hejiNum);
  158. }
  159. public void reflush() {
  160. try {
  161. init();
  162. } catch (MINBusinessException e) {
  163. e.printStackTrace();
  164. }
  165. }
  166. @Override
  167. public Map<String, Object> reportNeedDetail(Map<String, Object> param)
  168. throws MINBusinessException, ParseException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InvalidFormatException, IOException {
  169. String range = (String)param.get("range");
  170. String timeRange = (String)param.get("timeRange");
  171. String reportTypeId = (String)param.get("reportTypeId");
  172. String firstFileId = (String)param.get("firstFileId");
  173. String secondFileId = (String)param.get("secondFileId");
  174. String FADateRange = (String)param.get("FADateRange");
  175. String yearChoose = (String)param.get("yearChoose");
  176. String DdyDateRange = (String)param.get("DdyDateRange");
  177. String ddyFxbId = (String)param.get("ddyFxbId");
  178. MINHttpServletRequestContext request = (MINHttpServletRequestContext)param.get("request");
  179. Map<String, Object> resMap = new HashMap<String, Object>();
  180. // 台区停电日报
  181. if (Constant.REPORT_TYPE_00.equals(reportTypeId)) {
  182. String monthNum = (String)param.get("monthNum");
  183. String countNum = (String)param.get("countNum");
  184. return reportTypeTQTDRB(range, timeRange, monthNum, countNum);
  185. // 台区停电周报
  186. } else if (Constant.REPORT_TYPE_01.equals(reportTypeId)) {
  187. return reportTypeTQTDZB(range, timeRange);
  188. // 台区停电月报
  189. } else if (Constant.REPORT_TYPE_02.equals(reportTypeId)) {
  190. return reportTypeTQTDYB(range, timeRange);
  191. // 终端投托运报表
  192. } else if (Constant.REPORT_TYPE_03.equals(reportTypeId)) {
  193. List<List<String>> resList = reportTypeZDDTYBB(firstFileId, secondFileId);
  194. resMap.put("resList", resList);
  195. // FA动作正确率
  196. } else if (Constant.REPORT_TYPE_04.equals(reportTypeId)) {
  197. List<List<String>> resList = reportTypeFADZBB(FADateRange, yearChoose);
  198. resMap.put("resList", resList);
  199. // 低电压分析表
  200. } else if (Constant.REPORT_TYPE_05.equals(reportTypeId)){
  201. return reportTypeDDYZLFXB(range, reportTypeId, 1, 100);
  202. // 低电压日报
  203. } else if (Constant.REPORT_TYPE_06.equals(reportTypeId)){
  204. List<List<String>> resList = reportTypeDDYRB(DdyDateRange,yearChoose,range, reportTypeId);
  205. resMap.put("resList", resList);
  206. // 过电压分析表
  207. } else if (Constant.REPORT_TYPE_07.equals(reportTypeId)){
  208. List<List<String>> resList = reportTypeGDYZLFXB(range, reportTypeId);
  209. resMap.put("resList", resList);
  210. // 95598工单月报
  211. } else if (Constant.REPORT_TYPE_08.equals(reportTypeId)){
  212. return reportType95598YB(range);
  213. // 低电压未治理完成
  214. } else if (Constant.REPORT_TYPE_09.equals(reportTypeId)) {
  215. List<List<String>> resList = reportTypeDDYWZL(ddyFxbId);
  216. resMap.put("resList", resList);
  217. // 低电压昨日新增
  218. } else if (Constant.REPORT_TYPE_10.equals(reportTypeId)) {
  219. List<List<String>> resList = reportTypeDDYZRXZ(ddyFxbId);
  220. resMap.put("resList", resList);
  221. // 低电压周报
  222. } else if (Constant.REPORT_TYPE_11.equals(reportTypeId)) {
  223. return reportTypeDDYZB(ddyFxbId, range);
  224. // 低电压超30天
  225. } else if (Constant.REPORT_TYPE_12.equals(reportTypeId)) {
  226. List<List<String>> resList = reportTypeDDY30T(ddyFxbId);
  227. resMap.put("resList", resList);
  228. // 低电压月报
  229. } else if (Constant.REPORT_TYPE_13.equals(reportTypeId)) {
  230. return reportTypeDDYYB(ddyFxbId);
  231. // 计停非计停周报
  232. } else if (Constant.REPORT_TYPE_14.equals(reportTypeId)) {
  233. return reportTypeJTFJTRB(range,timeRange);
  234. // 终端投退运报表II
  235. } else if (Constant.REPORT_TYPE_15.equals(reportTypeId)) {
  236. List<List<String>> resList = reportTypeZDDTYBBII(firstFileId, request);
  237. resMap.put("resList", resList);
  238. } else if(Constant.REPORT_TYPE_17.equals(reportTypeId)){//过重载日报
  239. Map<String,Object> mm = new HashMap<String,Object>();
  240. mm.put("range",range);
  241. mm.put("timeRange",timeRange);
  242. mm.put("reportTypeId",reportTypeId);
  243. Map<String,Object> resList = reportTypeXlgzzRb(mm, request);
  244. resMap.put("resList", resList);
  245. } else if(Constant.REPORT_TYPE_18.equals(reportTypeId)){//过重载周报
  246. Map<String,Object> mm = new HashMap<String,Object>();
  247. mm.put("range",range);
  248. mm.put("timeRange",timeRange);
  249. mm.put("reportTypeId",reportTypeId);
  250. Map<String,Object> resList = reportTypeXlgzzRb(mm, request);
  251. resMap.put("resList", resList);
  252. }
  253. return resMap;
  254. }
  255. /**
  256. *获取日报数据数据解析规则-重过载时长累加,平均负债率(?)
  257. * @param map
  258. * @param request
  259. * @return
  260. */
  261. private Map<String,Object> reportTypeXlgzzRb(Map<String,Object> map, MINHttpServletRequestContext request) throws MINBusinessException {
  262. String range = StringUtil.ObjectToString(map.get("range"));//日期范围
  263. String timeRange = StringUtil.ObjectToString(map.get("timeRange"));//时间范围
  264. String[] s1 = range.split("-");
  265. String[] s2 = timeRange.split("-");
  266. String startDay = s1[0].trim();
  267. String endDay = s1[1].trim();
  268. String startTime = s2[0].trim();
  269. String endTime = s2[1].trim();
  270. String start =startDay.substring(0,4) + "-" + startDay.substring(4,6)+"-"+startDay.substring(6,8)+" "
  271. +startTime.substring(0,2) + ":" + startTime.substring(2,4)+":"+startTime.substring(4,6);
  272. String end =endDay.substring(0,4) + "-" + endDay.substring(4,6)+"-"+endDay.substring(6,8)+" "
  273. +endTime.substring(0,2) + ":" + endTime.substring(2,4)+":"+endTime.substring(4,6);
  274. Map<String,Object> rstMap = new HashMap();
  275. if("".equals(range) || "".equals(timeRange)){
  276. return new HashMap();
  277. } else{
  278. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  279. map.put("start",start);
  280. map.put("end",end);
  281. map.put("type","1");
  282. List<Map<String, String>> DDYZLFXBList = db.getMybatisMapper(IReportBatchMapper.class).selectXlgzzData(map);
  283. //线路重载
  284. Float maxZzsc = 0f;//
  285. String maxXlName = "";//最长时长线路
  286. Map<String,Object> ttMap = new HashMap();
  287. JSONArray ja = new JSONArray();
  288. if(DDYZLFXBList != null && !DDYZLFXBList.isEmpty()){
  289. int size = DDYZLFXBList.size();
  290. rstMap.put("total",size);
  291. JSONObject jo = new JSONObject();
  292. for (int i = 0; i < size; i++) {
  293. Map<String,String> temp2 = DDYZLFXBList.get(i);
  294. String key = temp2.get("KEYSS");
  295. if(ttMap.containsKey(key)){
  296. continue;
  297. }else{
  298. jo = JSONObject.fromObject(temp2);
  299. ttMap.put(key,"1");
  300. float f = StringUtil.ObjToFloat(jo.get("DFD10_GZSC"));
  301. if(maxZzsc < f){
  302. maxZzsc = f;
  303. maxXlName = key;
  304. }
  305. jo.remove("DFD10_GZSC");
  306. jo.remove("DFD10_FZL");
  307. Map<String,String> str = AuxiliaryTools.getXlgzzTjByParam(DDYZLFXBList,key);
  308. jo.put("sum",str.get("sc"));
  309. jo.put("avg",ArithUtils.div(str.get("pjfzl"),str.get("xlts")));
  310. ja.add(jo);
  311. }
  312. }
  313. }
  314. map.put("type",null);
  315. //线路过载
  316. List<Map<String, String>> DDYZLFXBList2 = db.getMybatisMapper(IReportBatchMapper.class).selectXlgzzData(map);
  317. Float maxZzsc2 = 0f;//
  318. String maxXlName2 = "";//最长时长线路
  319. Map<String,Object> ttMap2 = new HashMap();
  320. JSONArray ja2 = new JSONArray();
  321. if(DDYZLFXBList2 != null && !DDYZLFXBList2.isEmpty()){
  322. int size = DDYZLFXBList2.size();
  323. rstMap.put("total2",size);
  324. JSONObject jo2 = new JSONObject();
  325. for (int i = 0; i < size; i++) {
  326. Map<String,String> temp2 = DDYZLFXBList.get(i);
  327. String key = temp2.get("KEYSS");
  328. if(ttMap2.containsKey(key)){
  329. continue;
  330. }else{
  331. jo2 = JSONObject.fromObject(temp2);
  332. ttMap2.put(key,"1");
  333. float f = StringUtil.ObjToFloat(jo2.get("DFD10_GZSC"));
  334. if(maxZzsc2 < f){
  335. maxZzsc2 = f;
  336. maxXlName2 = key;
  337. }
  338. jo2.remove("DFD10_GZSC");
  339. jo2.remove("DFD10_FZL");
  340. Map<String,String> str = AuxiliaryTools.getXlgzzTjByParam(DDYZLFXBList,key);
  341. jo2.put("sum",str.get("sc"));
  342. jo2.put("avg",ArithUtils.div(str.get("pjfzl"),str.get("xlts")));
  343. ja2.add(jo2);
  344. }
  345. }
  346. }
  347. //配变
  348. List<Map<String, String>> pbgzzList = db.getMybatisMapper(IReportBatchMapper.class).selectPbgzzData(map);
  349. Map<String,Object> pbTemp = new HashMap<String,Object>();
  350. Map<String,Object> pbTemp2 = new HashMap<String,Object>();
  351. JSONArray ja3 = new JSONArray();
  352. JSONArray ja4 = new JSONArray();
  353. JSONObject jo3 = new JSONObject();
  354. JSONObject jo4 = new JSONObject();
  355. if(pbgzzList != null && !pbgzzList.isEmpty()){
  356. int size = pbgzzList.size();
  357. for (int i = 0; i < pbgzzList.size(); i++) {
  358. Map<String,String> temp = pbgzzList.get(i);
  359. Object fzl = temp.get("DFD9_FZL");
  360. String key = temp.get("KEYSS");
  361. if(StringUtil.ObjToFloat(fzl) > 100){//过载
  362. if(pbTemp.containsKey(key)){
  363. continue;
  364. }else{
  365. jo3 = JSONObject.fromObject(temp);
  366. pbTemp.put(key,"1");
  367. Map<String,String> str = AuxiliaryTools.getXlPbgzzTjByParam(pbgzzList,key,"1");
  368. jo3.put("sum",str.get("sc"));
  369. jo3.put("avg",ArithUtils.div(str.get("pjfzl"),str.get("xlts")));
  370. ja3.add(jo3);
  371. }
  372. }else if(StringUtil.ObjToFloat(fzl) <= 100 && StringUtil.ObjToFloat(fzl) >= 80){//重载
  373. if(pbTemp2.containsKey(key)){
  374. continue;
  375. }else{
  376. jo4 = JSONObject.fromObject(temp);
  377. pbTemp2.put(key,"1");
  378. Map<String,String> str = AuxiliaryTools.getXlPbgzzTjByParam(pbgzzList,key,"2");
  379. jo4.put("sum",str.get("sc"));
  380. jo4.put("avg",ArithUtils.div(str.get("pjfzl"),str.get("xlts")));
  381. ja4.add(jo4);
  382. }
  383. }
  384. }
  385. }
  386. //抢修类工单报表
  387. List<Map<String, String>> qxlgdbbbList = db.getMybatisMapper(IReportBatchMapper.class).selectQxlgdbbData(map);
  388. JSONArray jagd = new JSONArray();
  389. if (qxlgdbbbList != null && !qxlgdbbbList.isEmpty()){
  390. Map<String,Object> gdTemp = new HashMap<String,Object>();
  391. Map<String,String> temp = null;
  392. String unit = "";
  393. for (int i = 0; i < qxlgdbbbList.size(); i++) {
  394. temp = qxlgdbbbList.get(i);
  395. unit = temp.get("DFD11_GDDW");//单位
  396. if (unit ==null || "".equals(unit) || gdTemp.containsKey(unit)){
  397. continue;
  398. } else {
  399. gdTemp.put(unit,"1");
  400. JSONObject tempjo = JSONObject.fromObject(temp);
  401. AuxiliaryTools.getQxgdByParam(qxlgdbbbList,unit,tempjo);
  402. jagd.add(tempjo);
  403. }
  404. }
  405. }
  406. JSONObject temp1 ,temp2 = new JSONObject();
  407. temp2.put("DFD11_GDDW","公司累计");
  408. temp2.put("KHZS","");
  409. temp2.put("DDXCSJ","");
  410. temp2.put("GDCLSJ","");
  411. temp2.put("DDXCCSS","");
  412. temp2.put("GDCSZS","");
  413. temp2.put("YSXJHD","");
  414. temp2.put("GDZS","");
  415. temp2.put("WH","");
  416. temp2.put("GZLS-A","");
  417. temp2.put("GZLS-B","");
  418. temp2.put("GZLS-C","");
  419. temp2.put("GZLS-D","");
  420. for (int i = 0; i < jagd.size(); i++) {
  421. temp1 = jagd.getJSONObject(i);
  422. temp2.put("KHZS",ArithUtils.addToInt(temp2.getString("KHZS"),temp1.getString("KHZS")));
  423. temp2.put("DDXCSJ",ArithUtils.add(temp2.getString("DDXCSJ"),temp1.getString("DDXCSJ")));
  424. temp2.put("GDCLSJ",ArithUtils.add(temp2.getString("GDCLSJ"),temp1.getString("GDCLSJ")));
  425. temp2.put("DDXCCSS",ArithUtils.addToInt(temp2.getString("DDXCCSS"),temp1.getString("DDXCCSS")));
  426. temp2.put("GDCSZS",ArithUtils.add(temp2.getString("GDCSZS"),temp1.getString("GDCSZS")));
  427. temp2.put("GDZS",ArithUtils.addToInt(temp2.getString("GDZS"),temp1.getString("GDZS")));
  428. temp2.put("YSXJHD",ArithUtils.add(temp2.getString("YSXJHD"),temp1.getString("YSXJHD")));
  429. temp2.put("GZLS-A",ArithUtils.add(temp2.getString("GZLS-A"),temp1.getString("GZLS-A")));
  430. temp2.put("GZLS-B",ArithUtils.add(temp2.getString("GZLS-B"),temp1.getString("GZLS-B")));
  431. temp2.put("GZLS-C",ArithUtils.add(temp2.getString("GZLS-C"),temp1.getString("GZLS-C")));
  432. temp2.put("GZLS-D",ArithUtils.add(temp2.getString("GZLS-D"),temp1.getString("GZLS-D")));
  433. }
  434. jagd.add(temp2);
  435. for (int i = 0; i < jagd.size(); i++) {
  436. temp1 = jagd.getJSONObject(i);
  437. temp1.put("GDCLSJ",ArithUtils.div(temp1.getString("GDCLSJ"),temp1.getString("GDZS")));//工单处理时长平均
  438. temp1.put("DDXCSJ",ArithUtils.div(temp1.getString("DDXCSJ"),temp1.getString("GDZS")));//到达现场平均
  439. temp1.put("WH",ArithUtils.div(temp1.getString("GDZS"),temp1.getString("KHZS"))*1000);
  440. }
  441. rstMap.put("result",ja);//线路重载
  442. rstMap.put("result2",ja2);//线路过载
  443. rstMap.put("result3",ja3);//配变过载
  444. rstMap.put("result4",ja4);//配变重载
  445. rstMap.put("result5",jagd);//抢修工单
  446. Map<String,Object> param = new HashMap<String,Object>();
  447. param.put("maxZzsc",maxZzsc);
  448. param.put("maxXlName",maxXlName);
  449. param.put("maxZzsc2",maxZzsc2);
  450. param.put("maxXlName2",maxXlName2);
  451. //获取配变过载数据最大值
  452. AuxiliaryTools.getMaxPbByParam(pbgzzList,param);
  453. //获取配变重载数据最大值
  454. rstMap.put("descStr",AuxiliaryTools.getXlgzzDesc(ja,ja2,param));
  455. rstMap.put("descStr2",AuxiliaryTools.getXlPbgzzDesc(ja3,ja4,param));
  456. rstMap.put("descStr3",AuxiliaryTools.getQxgdDesc(jagd,param));
  457. }
  458. return rstMap;
  459. }
  460. /**
  461. * 台区停电日报
  462. * @param range 日期范围
  463. * @param timeRange 时间段范围
  464. * @param monthNum 几个月内停电
  465. * @param countNum 停电次数
  466. * @return
  467. * @throws MINBusinessException
  468. * @throws ParseException
  469. */
  470. public Map<String, Object> reportTypeTQTDRB(String range, String timeRange, String monthNum, String countNum) throws MINBusinessException, ParseException {
  471. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  472. Map<String, Object> resMap = new HashMap<String, Object>();
  473. List<List<String>> resList = new ArrayList<List<String>>();
  474. resMap.put("excelList", resList);
  475. Map<String, Object> param = new HashMap<String, Object>();
  476. String beginTime = null;
  477. String endTime = null;
  478. range = range.replaceAll(" ", "");
  479. String[] rangeArray = range.split("-");
  480. timeRange = timeRange.replaceAll(" ", "");
  481. if (CommonUtil.isEmpty(timeRange)) {
  482. beginTime = rangeArray[0] + "000000";
  483. endTime = rangeArray[1] + "235959";
  484. } else {
  485. String[] timeRangeArray = timeRange.split("-");
  486. beginTime = rangeArray[0] + timeRangeArray[0];
  487. endTime = rangeArray[1] + timeRangeArray[1];
  488. }
  489. param.put("beginTime", beginTime);
  490. param.put("endTime", endTime);
  491. List<Map<String, String>> fileList00 = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00(param);
  492. PubAppparExample appparExample = new PubAppparExample();
  493. appparExample.createCriteria().andCodeEqualTo("tqtd_num_" + systemCode);
  494. appparExample.setOrderByClause("APR_TYPE");
  495. List<PubApppar> appparList = db.selectByExample(PubAppparMapper.class, appparExample);
  496. Map<String, String> countMap = new HashMap<String, String>();
  497. Map<String, String> shihuMap = new HashMap<String, String>();
  498. for (PubApppar apppar : appparList) {
  499. countMap.put(apppar.getValue(), "0");
  500. shihuMap.put(apppar.getValue(), "0");
  501. }
  502. countMap.put("合计", "0");
  503. shihuMap.put("合计", "0");
  504. for (Map<String, String> map : fileList00) {
  505. String minute = map.get("time");
  506. String area = map.get("area");
  507. if (countMap.containsKey(area)) {
  508. countMap.put(area,CommonUtil.add(countMap.get(area), "1"));
  509. shihuMap.put(area,CommonUtil.add(shihuMap.get(area), minute));
  510. } else {
  511. continue;
  512. }
  513. countMap.put("合计",CommonUtil.add(countMap.get("合计"), "1"));
  514. shihuMap.put("合计",CommonUtil.add(shihuMap.get("合计"), minute));
  515. }
  516. List<String> childList0 = new ArrayList<String>();
  517. childList0.add("分类\\单位");
  518. for (PubApppar apppar : appparList) {
  519. childList0.add(apppar.getValue());
  520. }
  521. childList0.add("合计");
  522. resList.add(childList0);
  523. List<String> childList1 = new ArrayList<String>();
  524. childList1.add("管辖台区数量");
  525. for (PubApppar apppar : appparList) {
  526. childList1.add(totalMap.get(apppar.getValue()));
  527. }
  528. childList1.add(totalMap.get("合计"));
  529. resList.add(childList1);
  530. List<String> childList2 = new ArrayList<String>();
  531. childList2.add("台区停电次数");
  532. for (PubApppar apppar : appparList) {
  533. childList2.add(countMap.get(apppar.getValue()));
  534. }
  535. childList2.add(countMap.get("合计"));
  536. resList.add(childList2);
  537. List<String> childList9 = new ArrayList<String>();
  538. childList9.add("台区停电时户数");
  539. for (PubApppar apppar : appparList) {
  540. childList9.add(CommonUtil.divide(shihuMap.get(apppar.getValue()), "60", 2));
  541. }
  542. childList9.add(CommonUtil.divide(shihuMap.get("合计"), "60", 2));
  543. resList.add(childList9);
  544. List<String> childList3 = new ArrayList<String>();
  545. childList3.add("台区停运率");
  546. for (PubApppar apppar : appparList) {
  547. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get(apppar.getValue()), totalMap.get(apppar.getValue()), 4), "100", 2) + "%");
  548. }
  549. childList3.add(CommonUtil.multiply(CommonUtil.divide(countMap.get("合计"), totalMap.get("合计"), 4), "100", 2) + "%");
  550. resList.add(childList3);
  551. // 台区停电个数统计
  552. Map<String, String> tqtdGsMap = new HashMap<String, String>();
  553. for (PubApppar apppar : appparList) {
  554. tqtdGsMap.put(apppar.getValue(), "0");
  555. }
  556. tqtdGsMap.put("合计", "0");
  557. List<Map<String, String>> tqtdGsList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  558. for (Map<String, String> map : tqtdGsList) {
  559. String area = map.get("area");
  560. if (tqtdGsMap.containsKey(area)) {
  561. tqtdGsMap.put(area, CommonUtil.add(tqtdGsMap.get(area), map.get("num")));
  562. } else {
  563. continue;
  564. }
  565. tqtdGsMap.put("合计",CommonUtil.add(tqtdGsMap.get("合计"), map.get("num")));
  566. }
  567. List<String> childList4 = new ArrayList<String>();
  568. childList4.add("台区停电个数");
  569. for (PubApppar apppar : appparList) {
  570. childList4.add(tqtdGsMap.get(apppar.getValue()));
  571. }
  572. childList4.add(tqtdGsMap.get("合计"));
  573. resList.add(childList4);
  574. // monthNum个月内停电 countNum次以上的台区
  575. String beginDay = DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], Integer.parseInt("-" + monthNum)), 1);
  576. param.put("beginDay", beginDay + beginTime.substring(8, 14));
  577. param.put("endDay", rangeArray[1] + endTime.substring(8, 14));
  578. param.put("countNum", countNum);
  579. List<Map<String, String>> mountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  580. Map<String, Integer> taiQuMap = new HashMap<String, Integer>();
  581. for (PubApppar apppar : appparList) {
  582. taiQuMap.put(apppar.getValue(), 0);
  583. }
  584. taiQuMap.put("合计", 0);
  585. for (Map<String, String> map : mountCountList) {
  586. String area = map.get("area");
  587. if (taiQuMap.containsKey(area)) {
  588. taiQuMap.put(area,taiQuMap.get(area) + 1);
  589. } else {
  590. continue;
  591. }
  592. taiQuMap.put("合计",taiQuMap.get("合计") + 1);
  593. }
  594. List<String> childList6 = new ArrayList<String>();
  595. childList6.add(monthNum+"个月停电" + countNum + "次及以上台区");
  596. for (PubApppar apppar : appparList) {
  597. childList6.add(taiQuMap.get(apppar.getValue()).toString());
  598. }
  599. childList6.add(taiQuMap.get("合计").toString());
  600. resList.add(childList6);
  601. // 查询昨日停电的数据 改为当日停电
  602. param.put("yesterday", rangeArray[1]);
  603. List<Map<String, String>> yesterdayList = db.getMybatisMapper(ReportServiceMapper.class).queryYesterdayDetail(param);
  604. List<Map<String, String>> yesterdayAndTDData = null;
  605. if (yesterdayList.size() != 0) {
  606. param.put("yesterdayDetail", yesterdayList);
  607. yesterdayAndTDData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  608. } else {
  609. yesterdayAndTDData = new ArrayList<Map<String, String>>();
  610. }
  611. Map<String, Integer> yesterdayTaiQuMap = new HashMap<String, Integer>();
  612. for (PubApppar apppar : appparList) {
  613. yesterdayTaiQuMap.put(apppar.getValue(), 0);
  614. }
  615. yesterdayTaiQuMap.put("合计", 0);
  616. for (Map<String, String> map : yesterdayAndTDData) {
  617. String area = map.get("area");
  618. if (yesterdayTaiQuMap.containsKey(area)) {
  619. yesterdayTaiQuMap.put(area,yesterdayTaiQuMap.get(area) + 1);
  620. } else {
  621. continue;
  622. }
  623. yesterdayTaiQuMap.put("合计",yesterdayTaiQuMap.get("合计") + 1);
  624. }
  625. List<String> childList7 = new ArrayList<String>();
  626. childList7.add(monthNum+"个月停电" + countNum + "次及以上台区且当日停电");
  627. for (PubApppar apppar : appparList) {
  628. childList7.add(yesterdayTaiQuMap.get(apppar.getValue()).toString());
  629. }
  630. childList7.add(yesterdayTaiQuMap.get("合计").toString());
  631. resList.add(childList7);
  632. // 2个月停电2次台区且昨日停电的台区数据 改为且当日停电
  633. beginDay = DateUtil.dateAddMonth(rangeArray[1], -2);
  634. param.put("beginDay", beginDay + beginTime.substring(8, 14));
  635. param.put("countNum", 2);
  636. List<Map<String, String>> yiciData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  637. Map<String, Integer> yiciMap = new HashMap<String, Integer>();
  638. for (PubApppar apppar : appparList) {
  639. yiciMap.put(apppar.getValue(), 0);
  640. }
  641. yiciMap.put("合计", 0);
  642. for (Map<String, String> map : yiciData) {
  643. String area = map.get("area");
  644. if (yiciMap.containsKey(area)) {
  645. yiciMap.put(area,yiciMap.get(area) + 1);
  646. } else {
  647. continue;
  648. }
  649. yiciMap.put("合计",yiciMap.get("合计") + 1);
  650. }
  651. List<String> childList8 = new ArrayList<String>();
  652. childList8.add("2个月停电2次台区且当日停电");
  653. for (PubApppar apppar : appparList) {
  654. childList8.add(yiciMap.get(apppar.getValue()).toString());
  655. }
  656. childList8.add(yiciMap.get("合计").toString());
  657. resList.add(childList8);
  658. // 2个月停电1次台区且昨日停电的台区数据 改为且当日停电
  659. beginDay = DateUtil.dateAddMonth(rangeArray[1], -2);
  660. param.put("beginDay", beginDay + beginTime.substring(8, 14));
  661. param.put("countNum", 1);
  662. List<Map<String, String>> yiciData00 = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  663. Map<String, Integer> yici00Map = new HashMap<String, Integer>();
  664. for (PubApppar apppar : appparList) {
  665. yici00Map.put(apppar.getValue(), 0);
  666. }
  667. yici00Map.put("合计", 0);
  668. for (Map<String, String> map : yiciData00) {
  669. String area = map.get("area");
  670. if (yici00Map.containsKey(area)) {
  671. yici00Map.put(area,yici00Map.get(area) + 1);
  672. } else {
  673. continue;
  674. }
  675. yici00Map.put("合计",yici00Map.get("合计") + 1);
  676. }
  677. List<String> childList10 = new ArrayList<String>();
  678. childList10.add("2个月停电1次台区且当日停电");
  679. for (PubApppar apppar : appparList) {
  680. childList10.add(yici00Map.get(apppar.getValue()).toString());
  681. }
  682. childList10.add(yici00Map.get("合计").toString());
  683. resList.add(childList10);
  684. //合计
  685. String tingdianNum = countMap.get("合计");
  686. String tingdianNumDesc = "";
  687. for (Map.Entry<String, String> entry : countMap.entrySet()) {
  688. String mapKey = entry.getKey();
  689. String mapValue = entry.getValue();
  690. tingdianNumDesc += mapKey + mapValue + "个,";
  691. }
  692. String sanciyishangNum = String.valueOf(taiQuMap.get("合计"));
  693. String sanciyishangNumDesc = "";
  694. for (Map.Entry<String, Integer> entry : taiQuMap.entrySet()) {
  695. String mapKey = entry.getKey();
  696. Integer mapValue = entry.getValue();
  697. sanciyishangNumDesc += mapKey + mapValue + "个,";
  698. }
  699. // 恢复供电时间
  700. DwFileDetail00Example example = new DwFileDetail00Example();
  701. example.createCriteria().andEndTimeGreaterThanOrEqualTo(beginTime).andEndTimeLessThanOrEqualTo(endTime);
  702. List<DwFileDetail00> selectByExample = db.selectByExample(DwFileDetail00Mapper.class, example, new MINRowBounds(1, 1));
  703. String huifu = "";
  704. if (selectByExample.size() != 0) {
  705. System.out.println(selectByExample.get(0).getEndTime());
  706. String hour = selectByExample.get(0).getEndTime().substring(8, 10);
  707. String min = selectByExample.get(0).getEndTime().substring(10, 12);
  708. if ("00".equals(min)) {
  709. huifu = hour;
  710. } else {
  711. huifu = CommonUtil.add(hour, "1");
  712. }
  713. }
  714. Map<String, Object> dataMap = new HashMap<String, Object>();
  715. dataMap.put("tingdianNum", tingdianNum);
  716. dataMap.put("tingdianNumDesc", tingdianNumDesc);
  717. dataMap.put("monthNum", monthNum);
  718. dataMap.put("countNum", countNum);
  719. dataMap.put("sanciyishangNum", sanciyishangNum);
  720. dataMap.put("sanciyishangNumDesc", sanciyishangNumDesc);
  721. dataMap.put("huifu", huifu);
  722. String descStr = "<p>监测发现台区停电${tingdianNum}个,按单位分:${tingdianNumDesc}其中${monthNum}个月内重复停电${countNum}次及以上的台区${sanciyishangNum},按单位分:${sanciyishangNumDesc}截止今日${huifu}时已全部恢复送电。</p>";
  723. resMap.put("dataMap", dataMap);
  724. resMap.put("descStr", descStr);
  725. return resMap;
  726. }
  727. /**
  728. * 台区停电周报
  729. * @param range
  730. * @param timeRange
  731. * @return
  732. * @throws MINBusinessException
  733. * @throws ParseException
  734. */
  735. public Map<String, Object> reportTypeTQTDZB(String range, String timeRange) throws MINBusinessException, ParseException {
  736. Map<String, Object> resMap = new HashMap<String, Object>();
  737. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  738. Map<String, Object> param = new HashMap<String, Object>();
  739. String beginTime = null;
  740. String endTime = null;
  741. range = range.replaceAll(" ", "");
  742. String[] rangeArray = range.split("-");
  743. timeRange = timeRange.replaceAll(" ", "");
  744. if (CommonUtil.isEmpty(timeRange)) {
  745. beginTime = rangeArray[0] + "000000";
  746. endTime = rangeArray[1] + "235959";
  747. } else {
  748. String[] timeRangeArray = timeRange.split("-");
  749. beginTime = rangeArray[0] + timeRangeArray[0];
  750. endTime = rangeArray[1] + timeRangeArray[1];
  751. }
  752. param.put("beginTime", beginTime);
  753. param.put("endTime", endTime);
  754. List<List<String>> resList = new ArrayList<List<String>>();
  755. List<String> title = new ArrayList<String>();
  756. title.add("单位\\分类");
  757. title.add("管理台区总数");
  758. title.add("本周累计停电台次");
  759. title.add("停电时户数");
  760. title.add("本周平均停电时长(小时)");
  761. title.add("本周重复停电台区数");
  762. title.add("本周督办频繁停电台次");
  763. title.add("本周督办频繁停电台区数");
  764. resList.add(title);
  765. List<String> areaList = new ArrayList<String>();
  766. PubAppparExample appparExample = new PubAppparExample();
  767. appparExample.createCriteria().andCodeEqualTo("tqtd_num_" + systemCode);
  768. appparExample.setOrderByClause("APR_TYPE");
  769. List<PubApppar> appparList = db.selectByExample(PubAppparMapper.class, appparExample);
  770. for (PubApppar apppar : appparList) {
  771. areaList.add(apppar.getValue());
  772. List<String> list = new ArrayList<String>();
  773. list.add(apppar.getValue());
  774. list.add(totalMap.get(apppar.getValue()));
  775. resList.add(list);
  776. }
  777. List<String> heji = new ArrayList<String>();
  778. heji.add("合计");
  779. heji.add(totalMap.get("合计"));
  780. resList.add(heji);
  781. //累计停电台次
  782. List<Map<String, String>> areaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  783. String totalCount = "0";
  784. for (Map<String, String> map : areaCountList) {
  785. String area = map.get("area");
  786. String count = map.get("count");
  787. if (areaList.contains(area)) {
  788. int index = areaList.indexOf(area);
  789. List<String> child = resList.get(index + 1);
  790. child.add(count);
  791. } else {
  792. continue;
  793. }
  794. totalCount = CommonUtil.add(totalCount, count);
  795. }
  796. heji.add(totalCount);
  797. // 没有数据的区域数值为0
  798. for (List<String> list : resList) {
  799. if (list.size() == 2) {
  800. list.add("0");
  801. }
  802. }
  803. // 平均停电时长
  804. String shihuArea = ""; // 时户最大区域
  805. String shihuNum = "0"; // 时户最大数
  806. String totalHour = "0"; //总时长
  807. String totalCountSC = "0";
  808. List<Map<String, String>> areaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  809. for (Map<String, String> map : areaTimeList) {
  810. String area = map.get("area");
  811. String timeMinute = map.get("timeMinute");
  812. String count = map.get("count");
  813. // 平均停电小时
  814. String hour = CommonUtil.divide(timeMinute, "60", 2); // 时户
  815. String hourPJ = CommonUtil.divide(hour, count, 2); // 平均时长
  816. if (areaList.contains(area)) {
  817. int index = areaList.indexOf(area);
  818. List<String> child = resList.get(index + 1);
  819. child.add(hour);
  820. child.add(hourPJ);
  821. } else {
  822. continue;
  823. }
  824. if (CommonUtil.compare(shihuNum, hour) == -1) {
  825. shihuNum = hour;
  826. shihuArea = area;
  827. }
  828. totalHour = CommonUtil.add(totalHour, hour);
  829. totalCountSC = CommonUtil.add(totalCountSC, count);
  830. }
  831. heji.add(totalHour);
  832. heji.add(CommonUtil.divide(totalHour, totalCountSC, 2));
  833. // 没有数据的区域数值为0
  834. for (List<String> list : resList) {
  835. if (list.size() == 3) {
  836. list.add("0");
  837. list.add("0");
  838. }
  839. }
  840. // 本周重复停电台区数
  841. param.put("beginDay", beginTime);
  842. param.put("endDay", endTime);
  843. param.put("countNum", "2");
  844. // 停电次数最多的台区
  845. String mostAddressNumDesc = "";
  846. // 停电最多的次数
  847. String mostAddressNum = "";
  848. String totalChongfu = "0";
  849. List<Map<String, String>> twiceCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  850. for (Map<String, String> map : twiceCountList) {
  851. String area = map.get("area");
  852. String num = map.get("num");
  853. String addressName = map.get("addressName");
  854. if (areaList.contains(area)) {
  855. int index = areaList.indexOf(area);
  856. List<String> child = resList.get(index + 1);
  857. if (child.size() >= 6) {
  858. child.set(5, CommonUtil.add(child.get(5), "1"));
  859. } else {
  860. child.add(5, "1");
  861. }
  862. } else {
  863. continue;
  864. }
  865. totalChongfu = CommonUtil.add(totalChongfu, "1");
  866. if (CommonUtil.isEmpty(mostAddressNum)) {
  867. mostAddressNum = num;
  868. }
  869. if (mostAddressNum.equals(num)) {
  870. mostAddressNumDesc += addressName + "、";
  871. }
  872. }
  873. // 去除最后一个符号
  874. if (!CommonUtil.isEmpty(mostAddressNumDesc)) {
  875. mostAddressNumDesc = mostAddressNumDesc.substring(0, mostAddressNumDesc.length() - 1);
  876. }
  877. heji.add(totalChongfu);
  878. // 没有数据的区域数值为0
  879. for (List<String> list : resList) {
  880. if (list.size() == 5) {
  881. list.add("0");
  882. }
  883. }
  884. // 最长时长
  885. List<Map<String, String>> zuichangTaiquList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00ZuichangTaiqu(param);
  886. String zuichangTaiqu = "";
  887. String zuichangSj = "";
  888. if (zuichangTaiquList.size() > 1) {
  889. zuichangTaiqu = zuichangTaiquList.get(0).get("addressName");
  890. zuichangSj = CommonUtil.divide(zuichangTaiquList.get(0).get("timeMinute"), "60", 2);
  891. }
  892. // 本周督办频繁停电台次
  893. String begin = rangeArray[0];
  894. String end = rangeArray[1];
  895. List<List<String>> dubanList = new ArrayList<List<String>>();
  896. for (PubApppar apppar : appparList) {
  897. List<String> childList = new ArrayList<String>();
  898. dubanList.add(childList);
  899. }
  900. // 查询每天的停电三次以上且当日停电的台次
  901. while (CommonUtil.compare(begin, end) != 1) {
  902. param.put("yesterday", begin);
  903. List<Map<String, String>> yesterdayList = db.getMybatisMapper(ReportServiceMapper.class).queryYesterdayDetail(param);
  904. if (yesterdayList.size() == 0) {
  905. begin = DateUtil.dateAddDay(begin, 1);
  906. continue;
  907. }
  908. param.put("yesterdayDetail", yesterdayList);
  909. param.put("beginDay", DateUtil.dateAddDay(DateUtil.dateAddMonth(begin, -2), 1) + beginTime.substring(8, 14));
  910. param.put("endDay", begin + endTime.substring(8, 14));
  911. param.put("countNum", 3);
  912. List<Map<String, String>> sanciData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  913. for (Map<String, String> map : sanciData) {
  914. String area = map.get("area");
  915. if (areaList.contains(area)) {
  916. int index = areaList.indexOf(area);
  917. List<String> child = resList.get(index + 1);
  918. if (child.size() >= 7) {
  919. child.set(6, CommonUtil.add(child.get(6), "1"));
  920. } else {
  921. child.add("1");
  922. }
  923. List<String> dubanChildList = dubanList.get(index);
  924. if (!dubanChildList.contains(map.get("addressNum"))) {
  925. dubanChildList.add(map.get("addressNum"));
  926. }
  927. } else {
  928. continue;
  929. }
  930. // 合计
  931. if (heji.size() >= 7) {
  932. heji.set(6, CommonUtil.add(heji.get(6), "1"));
  933. } else {
  934. heji.add("1");
  935. }
  936. }
  937. // 天数 + 1
  938. begin = DateUtil.dateAddDay(begin, 1);
  939. }
  940. // 没有数据的区域数值为0
  941. for (List<String> list : resList) {
  942. if (list.size() == 6) {
  943. list.add("0");
  944. }
  945. }
  946. int totalDuban = 0;
  947. for (int i = 1; i < resList.size() - 1; i ++) {
  948. List<String> child = resList.get(i);
  949. child.add(String .valueOf(dubanList.get(i - 1).size()));
  950. totalDuban = totalDuban + dubanList.get(i - 1).size();
  951. }
  952. heji.add(String.valueOf(totalDuban));
  953. // 督办总次数
  954. String totalMonthChongfuTaici = heji.get(6);
  955. if (CommonUtil.isEmpty(timeRange)) {
  956. param.put("beginDay", DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1) + "000000");
  957. } else {
  958. String[] timeRangeArray = timeRange.split("-");
  959. param.put("beginDay", DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], -2), 1) + timeRangeArray[0]);
  960. }
  961. param.put("endDay", endTime);
  962. param.put("countNum", "1");
  963. param.put("yesterdayDetail", null);
  964. List<Map<String, String>> twiceMonthCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  965. // 停电次数最多的台区
  966. String liangyueMostAddressNumDesc = "";
  967. // 停电最多的次数
  968. String liangyueMostAddressNum = "";
  969. // 本周督办频繁停电台区数
  970. for (Map<String, String> map : twiceMonthCountList) {
  971. String addressName = map.get("addressName");
  972. String num = map.get("num");
  973. if (CommonUtil.isEmpty(liangyueMostAddressNum)) {
  974. liangyueMostAddressNum = num;
  975. }
  976. if (liangyueMostAddressNum.equals(num)) {
  977. liangyueMostAddressNumDesc += addressName + "、";
  978. }
  979. }
  980. if(!"".equals(liangyueMostAddressNumDesc)){
  981. // 去除最后一个符号
  982. liangyueMostAddressNumDesc = liangyueMostAddressNumDesc.substring(0, liangyueMostAddressNumDesc.length() - 1);
  983. }
  984. // 环比
  985. String huanbi = "0";
  986. String huanbiBegin = DateUtil.dateAddMonth(rangeArray[0], -2); // 环比周开始时间
  987. String huanbiEnd = DateUtil.dateAddMonth(rangeArray[1], -2); // 环比周结束时间
  988. while (CommonUtil.compare(huanbiBegin, huanbiEnd) != 1) {
  989. param.put("yesterday", huanbiBegin);
  990. List<Map<String, String>> yesterdayList = db.getMybatisMapper(ReportServiceMapper.class).queryYesterdayDetail(param);
  991. if (yesterdayList.size() == 0) {
  992. huanbiBegin = DateUtil.dateAddDay(huanbiBegin, 1);
  993. continue;
  994. }
  995. param.put("yesterdayDetail", yesterdayList);
  996. param.put("beginDay", DateUtil.dateAddDay(DateUtil.dateAddMonth(huanbiBegin, -2), 1) + beginTime.substring(8, 14));
  997. param.put("endDay", huanbiBegin + endTime.substring(8, 14));
  998. param.put("countNum", 3);
  999. List<Map<String, String>> sanciData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  1000. huanbi = CommonUtil.add(huanbi, String.valueOf(sanciData.size()));
  1001. // 天数 + 1
  1002. huanbiBegin = DateUtil.dateAddDay(huanbiBegin, 1);
  1003. }
  1004. // 同比
  1005. String tongbi = "0";
  1006. String tongbiBegin = DateUtil.dateAddYear(rangeArray[0], -1); // 同比周开始时间
  1007. String tongbiEnd = DateUtil.dateAddYear(rangeArray[1], -1); // 同比周结束时间
  1008. while (CommonUtil.compare(tongbiBegin, tongbiEnd) != 1) {
  1009. param.put("yesterday", tongbiBegin);
  1010. List<Map<String, String>> yesterdayList = db.getMybatisMapper(ReportServiceMapper.class).queryYesterdayDetail(param);
  1011. if (yesterdayList.size() == 0) {
  1012. tongbiBegin = DateUtil.dateAddDay(tongbiBegin, 1);
  1013. continue;
  1014. }
  1015. param.put("yesterdayDetail", yesterdayList);
  1016. param.put("beginDay", DateUtil.dateAddDay(DateUtil.dateAddMonth(tongbiBegin, -2), 1) + beginTime.substring(8, 14));
  1017. param.put("endDay", tongbiBegin + endTime.substring(8, 14));
  1018. param.put("countNum", 3);
  1019. List<Map<String, String>> sanciData = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  1020. tongbi = CommonUtil.add(tongbi, String.valueOf(sanciData.size()));
  1021. // 天数 + 1
  1022. tongbiBegin = DateUtil.dateAddDay(tongbiBegin, 1);
  1023. }
  1024. // 返回excel数据
  1025. resMap.put("excelList", resList);
  1026. // 描述数据
  1027. Map<String, Object> dataMap = new HashMap<String, Object>();
  1028. dataMap.put("totalCount", totalCount);
  1029. dataMap.put("totalHour", totalHour);
  1030. dataMap.put("shihuArea", shihuArea);
  1031. dataMap.put("shihuNum", shihuNum);
  1032. dataMap.put("pingjun", CommonUtil.divide(totalHour, totalCount, 2));
  1033. dataMap.put("twiceCount", totalChongfu);
  1034. dataMap.put("mostAddressNumDesc", mostAddressNumDesc);
  1035. dataMap.put("mostAddressNum", mostAddressNum);
  1036. dataMap.put("dubanCount", totalMonthChongfuTaici);
  1037. dataMap.put("zuichangTaiqu", zuichangTaiqu);
  1038. dataMap.put("zuichangSj", zuichangSj);
  1039. dataMap.put("liangyueMostAddressNumDesc", liangyueMostAddressNumDesc);
  1040. dataMap.put("liangyueMostAddressNum", liangyueMostAddressNum);
  1041. // 停电两次描述
  1042. String twiceCountDesc = "";
  1043. // 督办台次
  1044. String dubantaiciDesc = "";
  1045. // 重复停电台区描述
  1046. for (int i = 1; i < resList.size(); i ++) {
  1047. List<String> childList = resList.get(i);
  1048. String area = childList.get(0);
  1049. String num = childList.get(5);
  1050. if (CommonUtil.compare(num, "0") != 0) {
  1051. twiceCountDesc += area + num + "个,";
  1052. }
  1053. num = childList.get(6);
  1054. if (CommonUtil.compare(num, "0") != 0) {
  1055. dubantaiciDesc += area + num + "次,";
  1056. }
  1057. }
  1058. dataMap.put("twiceCountDesc", twiceCountDesc);
  1059. dataMap.put("dubantaiciDesc", dubantaiciDesc);
  1060. // 环比
  1061. if (CommonUtil.compare(totalMonthChongfuTaici, huanbi) == 1) {
  1062. dataMap.put("huanbi", "环比增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalMonthChongfuTaici, huanbi), huanbi, 4), "100", 2) + "%");
  1063. } else {
  1064. dataMap.put("huanbi", "环比减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(huanbi, totalMonthChongfuTaici), huanbi, 4), "100", 2) + "%");
  1065. }
  1066. // 同比
  1067. if (CommonUtil.compare(totalMonthChongfuTaici, tongbi) == 1) {
  1068. dataMap.put("tongbi", "同比增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalMonthChongfuTaici, tongbi), tongbi, 4), "100", 2) + "%。");
  1069. } else {
  1070. dataMap.put("tongbi", "同比减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tongbi, totalMonthChongfuTaici), tongbi, 4), "100", 2) + "%。");
  1071. }
  1072. resMap.put("dataMap", dataMap);
  1073. String descStr = "<p>上周,台区累计停电${totalCount}台次(${totalHour}时户),平均停电时长${pingjun}小时/台,${shihuArea}停电时户数最多为${shihuNum}时户。停电两次及以上台区${twiceCount}个,${twiceCountDesc}${mostAddressNumDesc}重复停电次数最多为${mostAddressNum}次。${zuichangTaiqu}停电时长最长为${zuichangSj}小时。</p>"
  1074. +"上周,督办频繁停电(两个月内三次及以上)共计${dubanCount}台次,${huanbi},${tongbi}${dubantaiciDesc}${liangyueMostAddressNumDesc}两个月内频繁停电次数最多为${liangyueMostAddressNum}次。";
  1075. resMap.put("descStr", descStr);
  1076. return resMap;
  1077. }
  1078. /**
  1079. * 台区停电月报
  1080. * @param range
  1081. * @param timeRange
  1082. * @return
  1083. * @throws MINBusinessException
  1084. * @throws ParseException
  1085. */
  1086. public Map<String, Object> reportTypeTQTDYB(String range, String timeRange) throws MINBusinessException, ParseException{
  1087. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1088. Map<String, Object> param = new HashMap<String, Object>();
  1089. String beginTime = null;
  1090. String endTime = null;
  1091. range = range.replaceAll(" ", "");
  1092. String[] rangeArray = range.split("-");
  1093. timeRange = timeRange.replaceAll(" ", "");
  1094. if (CommonUtil.isEmpty(timeRange)) {
  1095. beginTime = rangeArray[0] + "000000";
  1096. endTime = rangeArray[1] + "235959";
  1097. } else {
  1098. String[] timeRangeArray = timeRange.split("-");
  1099. beginTime = rangeArray[0] + timeRangeArray[0];
  1100. endTime = rangeArray[1] + timeRangeArray[1];
  1101. }
  1102. param.put("beginTime", beginTime);
  1103. param.put("endTime", endTime);
  1104. /** 本月数据---- start ----*/
  1105. //停电台次
  1106. List<Map<String, String>> areaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  1107. //停电时长
  1108. List<Map<String, String>> areaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  1109. // 台次数
  1110. List<Map<String, String>> tcList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByAddress(param);
  1111. //停电台区数
  1112. param.put("beginDay", beginTime);
  1113. param.put("endDay", endTime);
  1114. param.put("countNum", "1");
  1115. List<Map<String, String>> taiquCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  1116. /** 本月数据---- end ----*/
  1117. /** 去年同月数据---- start ----*/
  1118. if (CommonUtil.isEmpty(timeRange)) {
  1119. beginTime = DateUtil.dateAddYear(rangeArray[0], -1) + "000000";
  1120. endTime = DateUtil.dateAddYear(rangeArray[1], -1) + "235959";
  1121. } else {
  1122. String[] timeRangeArray = timeRange.split("-");
  1123. beginTime = DateUtil.dateAddYear(rangeArray[0], -1) + timeRangeArray[0];
  1124. endTime = DateUtil.dateAddYear(rangeArray[1], -1) + timeRangeArray[1];
  1125. }
  1126. param.put("beginTime", beginTime);
  1127. param.put("endTime", endTime);
  1128. List<Map<String, String>> tbAreaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  1129. List<Map<String, String>> tbAreaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  1130. List<Map<String, String>> tbTcList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByAddress(param); // 台次
  1131. /** 去年同月数据---- end ----*/
  1132. /** 上月月数据---- start ----*/
  1133. if (CommonUtil.isEmpty(timeRange)) {
  1134. beginTime = DateUtil.dateAddMonth(rangeArray[0], -1) + "000000";
  1135. endTime = DateUtil.dateAddMonth(rangeArray[1], -1) + "235959";
  1136. } else {
  1137. String[] timeRangeArray = timeRange.split("-");
  1138. beginTime = DateUtil.dateAddMonth(rangeArray[0], -1) + timeRangeArray[0];
  1139. endTime = DateUtil.dateAddMonth(rangeArray[1], -1) + timeRangeArray[1];
  1140. }
  1141. param.put("beginTime", beginTime);
  1142. param.put("endTime", endTime);
  1143. List<Map<String, String>> hbAreaCountList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00TqtdGS(param);
  1144. List<Map<String, String>> hbAreaTimeList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByArea(param);
  1145. List<Map<String, String>> hbTcList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail00ByAddress(param); // 台次
  1146. /** 上月月数据---- end ----*/
  1147. /** 停电台区数 ----start----*/
  1148. String totalCount = "0";
  1149. for (int i = 0; i < taiquCountList.size(); i++) {
  1150. totalCount = CommonUtil.add(taiquCountList.get(i).get("num"), totalCount);
  1151. }
  1152. /** 停电台区数 ---- end ----*/
  1153. /**停电次数数据处理----start----*/
  1154. Integer month = Integer.parseInt(rangeArray[1].substring(4,6));
  1155. String benyueCount = "0";
  1156. String tbCount = "0";
  1157. String hbCount = "0";
  1158. for (int i = 0; i < areaCountList.size(); i++) {
  1159. benyueCount = CommonUtil.add(areaCountList.get(i).get("num"), benyueCount);
  1160. }
  1161. for (int i = 0; i < tbAreaCountList.size(); i++) {
  1162. tbCount = CommonUtil.add(tbAreaCountList.get(i).get("num"), tbCount);
  1163. }
  1164. for (int i = 0; i < hbAreaCountList.size(); i++) {
  1165. hbCount = CommonUtil.add(hbAreaCountList.get(i).get("num"), hbCount);
  1166. }
  1167. // 同比描述
  1168. String tongbi = "";
  1169. if (CommonUtil.compare(tbCount, "0") != 0) {
  1170. if (CommonUtil.compare(benyueCount, tbCount) == 1) {
  1171. tongbi = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueCount, tbCount), tbCount,4), "100", 2) + "%";
  1172. } else {
  1173. tongbi = "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbCount, benyueCount), tbCount,4), "100", 2) + "%";
  1174. }
  1175. }
  1176. // 环比描述
  1177. String huanbi = "";
  1178. if (CommonUtil.compare(hbCount, "0") != 0) {
  1179. if (CommonUtil.compare(benyueCount, hbCount) == 1) {
  1180. huanbi = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueCount, hbCount), hbCount,4), "100", 2) + "%";
  1181. } else {
  1182. huanbi = "减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(hbCount, benyueCount), hbCount,4), "100", 2) + "%";
  1183. }
  1184. }
  1185. // 台次数
  1186. String shejiNum = "0";
  1187. for (Map<String, String> map : tcList) {
  1188. shejiNum = CommonUtil.add(shejiNum, map.get("num"));
  1189. }
  1190. // 去年数据台次数
  1191. String tbShejiNum = "0";
  1192. for (Map<String, String> map : tbTcList) {
  1193. tbShejiNum = CommonUtil.add(tbShejiNum, map.get("num"));
  1194. }
  1195. // 上月数据台次数
  1196. String hbShejiNum = "0";
  1197. for (Map<String, String> map : hbTcList) {
  1198. hbShejiNum = CommonUtil.add(hbShejiNum, map.get("num"));
  1199. }
  1200. String shejiDesc = "";
  1201. for (int i = 0; i < areaCountList.size(); i++) {
  1202. if (i == areaCountList.size() - 1) {
  1203. shejiDesc += areaCountList.get(i).get("area") +areaCountList.get(i).get("num")+"台次,占比"+CommonUtil.multiply(CommonUtil.divide(areaCountList.get(i).get("num"), benyueCount, 4), "100", 2)+"%。";
  1204. } else {
  1205. shejiDesc += areaCountList.get(i).get("area") +areaCountList.get(i).get("num")+"台次,占比"+CommonUtil.multiply(CommonUtil.divide(areaCountList.get(i).get("num"), benyueCount, 4), "100", 2)+"%,";
  1206. }
  1207. }
  1208. /**停电次数数据处理----end----*/
  1209. /**停电时长数据处理----start----*/
  1210. String benyueTime = "0";
  1211. String tbTime = "0";
  1212. String hbTime = "0";
  1213. for (int i = 0; i < areaTimeList.size(); i++) {
  1214. benyueTime = CommonUtil.add(areaTimeList.get(i).get("timeMinute"), benyueTime);
  1215. }
  1216. for (int i = 0; i < tbAreaTimeList.size(); i++) {
  1217. tbTime = CommonUtil.add(tbAreaTimeList.get(i).get("timeMinute"), tbTime);
  1218. }
  1219. for (int i = 0; i < hbAreaTimeList.size(); i++) {
  1220. hbTime = CommonUtil.add(hbAreaTimeList.get(i).get("timeMinute"), hbTime);
  1221. }
  1222. // sql算的是分钟,转换成小时
  1223. benyueTime = CommonUtil.divide(benyueTime, "60", 2);
  1224. tbTime = CommonUtil.divide(tbTime, "60", 2);
  1225. hbTime = CommonUtil.divide(hbTime, "60", 2);
  1226. // 平均时长
  1227. String pingjunHour = "0";
  1228. if (CommonUtil.compare(shejiNum, "0") != 0) {
  1229. pingjunHour = CommonUtil.divide(benyueTime, shejiNum, 2);
  1230. }
  1231. // 同比数据
  1232. String tongbiPingjunHour = "";
  1233. if (CommonUtil.compare(tbTime, "0") != 0) {
  1234. tongbiPingjunHour = CommonUtil.divide(tbTime, tbShejiNum, 2);
  1235. if (CommonUtil.compare(pingjunHour, tongbiPingjunHour) == 1) {
  1236. tongbiPingjunHour = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunHour, tongbiPingjunHour), tongbiPingjunHour, 4), "100", 2)+"%";
  1237. } else {
  1238. tongbiPingjunHour = "下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tongbiPingjunHour, pingjunHour), tongbiPingjunHour, 4), "100", 2)+"%";
  1239. }
  1240. }
  1241. // 环比数据
  1242. String huanbiPingjunHour = "";
  1243. if (CommonUtil.compare(hbTime, "0") != 0) {
  1244. huanbiPingjunHour = CommonUtil.divide(hbTime, hbShejiNum, 2);
  1245. if (CommonUtil.compare(pingjunHour, huanbiPingjunHour) == 1) {
  1246. huanbiPingjunHour = "增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunHour, huanbiPingjunHour), huanbiPingjunHour, 4), "100", 2)+"%";
  1247. } else {
  1248. huanbiPingjunHour = "下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(huanbiPingjunHour, pingjunHour), huanbiPingjunHour, 4), "100", 2)+"%";
  1249. }
  1250. }
  1251. // 台区平均停电时长描述
  1252. String areaPingjunDesc = "";
  1253. for (int i = 0; i < tcList.size(); i++) {
  1254. String pingjunTime = CommonUtil.divide(CommonUtil.divide(tcList.get(i).get("time"), tcList.get(i).get("num"), 2),"60", 2);
  1255. if (tcList.size() - 1 == i) {
  1256. areaPingjunDesc += tcList.get(i).get("area")+pingjunTime+"小时;";
  1257. } else {
  1258. areaPingjunDesc += tcList.get(i).get("area")+pingjunTime+"小时、";
  1259. }
  1260. }
  1261. // 区域平均时长同比
  1262. String tbAreaPingjunDesc = "";
  1263. for (int i = 0; i < tcList.size(); i++) {
  1264. String pingjunTime = CommonUtil.divide(CommonUtil.divide(tcList.get(i).get("time"), tcList.get(i).get("num"), 2),"60", 2);
  1265. for (int j = 0; j < tbTcList.size(); j++) {
  1266. if (tcList.get(i).get("area").equals(tbTcList.get(j).get("area"))) {
  1267. String tbPingjunTime = CommonUtil.divide(CommonUtil.divide(tbTcList.get(j).get("time"), tbTcList.get(j).get("num"), 2),"60", 2);
  1268. if (CommonUtil.compare(pingjunTime, tbPingjunTime) == 1) {
  1269. if (i == tcList.size() - 1) {
  1270. tbAreaPingjunDesc += tcList.get(i).get("area") + "同比上升" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunTime, tbPingjunTime), tbPingjunTime, 4), "100", 2)+"%。";
  1271. } else {
  1272. tbAreaPingjunDesc += tcList.get(i).get("area") + "同比上升" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(pingjunTime, tbPingjunTime), tbPingjunTime, 4), "100", 2)+"%、";
  1273. }
  1274. } else {
  1275. if (i == tcList.size() - 1) {
  1276. tbAreaPingjunDesc += tcList.get(i).get("area") + "同比下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbPingjunTime, pingjunTime), tbPingjunTime, 4), "100", 2)+"%。";
  1277. } else {
  1278. tbAreaPingjunDesc += tcList.get(i).get("area") + "同比下降" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(tbPingjunTime, pingjunTime), tbPingjunTime, 4), "100", 2)+"%、";
  1279. }
  1280. }
  1281. break;
  1282. }
  1283. }
  1284. }
  1285. // 重新计算开始时间和结束时间
  1286. if (CommonUtil.isEmpty(timeRange)) {
  1287. beginTime = rangeArray[0] + "000000";
  1288. endTime = rangeArray[1] + "235959";
  1289. } else {
  1290. String[] timeRangeArray = timeRange.split("-");
  1291. beginTime = rangeArray[0] + timeRangeArray[0];
  1292. endTime = rangeArray[1] + timeRangeArray[1];
  1293. }
  1294. // 分段台区数
  1295. String fenduanDesc = "";
  1296. for (int i = 0; i < fenduanList.size(); i ++) {
  1297. Map<String, String> shiduanMap = fenduanList.get(i);
  1298. shiduanMap.put("beginTime", beginTime);
  1299. shiduanMap.put("endTime", endTime);
  1300. String num = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00FenDuan(shiduanMap);
  1301. String zhanbi = CommonUtil.multiply(CommonUtil.divide(num, totalCount, 4), "100", 2);
  1302. if (i == fenduanList.size() - 1) {
  1303. fenduanDesc += shiduanMap.get("desc")+ "的" + num+ "台,占比"+zhanbi+"%。";
  1304. } else {
  1305. fenduanDesc += shiduanMap.get("desc")+ "的" + num+ "台,占比"+zhanbi+"%;";
  1306. }
  1307. }
  1308. param.put("beginTime", beginTime);
  1309. param.put("endTime", endTime);
  1310. // 最长停电台区
  1311. List<Map<String, String>> zuichangTaiquList = db.getMybatisMapper(ReportServiceMapper.class).selectReportType00ZuichangTaiqu(param);
  1312. String zuichangTaiQu = "";
  1313. String zuichangTaiQuTime = "";
  1314. String qiciTaiQu = "";
  1315. String qiciTaiQuTime = "";
  1316. if (zuichangTaiquList.size() > 0) {
  1317. zuichangTaiQu = zuichangTaiquList.get(0).get("addressName");
  1318. zuichangTaiQuTime = CommonUtil.divide(zuichangTaiquList.get(0).get("timeMinute"), "60", 2);
  1319. if (zuichangTaiquList.size() > 1) {
  1320. qiciTaiQu = zuichangTaiquList.get(1).get("addressName");
  1321. qiciTaiQuTime = CommonUtil.divide(zuichangTaiquList.get(1).get("timeMinute"), "60", 2);
  1322. }
  1323. }
  1324. // 两个月内停电2次以上的数据
  1325. String beginDay = DateUtil.dateAddDay(DateUtil.dateAddMonth(rangeArray[1], Integer.parseInt("-2")), 1);
  1326. param.put("beginDay", beginDay + beginTime.substring(8,14));
  1327. param.put("endDay", rangeArray[1] + endTime.substring(8,14));
  1328. param.put("countNum", "2");
  1329. List<Map<String, String>> twiceMountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  1330. Map<String, Integer> taiQuMapTwice = new HashMap<String, Integer>();//区域统计
  1331. String totalCountTwice = "0";
  1332. for (Map<String, String> map : twiceMountCountList) {
  1333. String area = map.get("area");
  1334. // 已存在
  1335. if (taiQuMapTwice.containsKey(area)) {
  1336. taiQuMapTwice.put(map.get("area"), taiQuMapTwice.get(map.get("area"))+1);
  1337. } else {
  1338. taiQuMapTwice.put(map.get("area"), 1);
  1339. }
  1340. totalCountTwice = CommonUtil.add(totalCountTwice, "1");
  1341. }
  1342. String totalCountTwiceDesc = "";
  1343. for (Map.Entry<String, Integer> entry : taiQuMapTwice.entrySet()) {
  1344. totalCountTwiceDesc += entry.getKey() + entry.getValue()+"台,占比"+CommonUtil.multiply(CommonUtil.divide(entry.getValue().toString(), totalCountTwice, 4), "100", 2)+"%;";
  1345. }
  1346. if(!"".equals(totalCountTwiceDesc)){
  1347. totalCountTwiceDesc = totalCountTwiceDesc.substring(0,totalCountTwiceDesc.length() - 1) + "。";
  1348. }
  1349. Map<String, Integer> countMapTwice = new HashMap<String, Integer>();
  1350. for (Map<String, String> map : twiceMountCountList) {
  1351. String num = map.get("num");
  1352. // 已存在
  1353. if (countMapTwice.containsKey(num)) {
  1354. countMapTwice.put(num, countMapTwice.get(num) + 1);
  1355. } else {
  1356. countMapTwice.put(num, 1);
  1357. }
  1358. }
  1359. String countMapTwiceDesc = "";
  1360. for (Map.Entry<String, Integer> entry : countMapTwice.entrySet()) {
  1361. countMapTwiceDesc += "停电" + entry.getKey() + "次的" + entry.getValue() + "台,占比" + CommonUtil.multiply(CommonUtil.divide(entry.getValue().toString(), totalCountTwice, 4), "100", 2)+"%;";
  1362. }
  1363. if(!"".equals(countMapTwiceDesc)){
  1364. countMapTwiceDesc = countMapTwiceDesc.substring(0,countMapTwiceDesc.length() - 1) + "。";
  1365. }
  1366. // 两个月内停电3次以上的数据
  1367. param.put("countNum", "3");
  1368. List<Map<String, String>> thipleMountCountList = db.getMybatisMapper(ReportServiceMapper.class).selectMountCount00(param);
  1369. String totalCountthiple = String.valueOf(thipleMountCountList.size());
  1370. /**停电次数数据处理----end----*/
  1371. String descStr = "<p>(1)台区停电总体情况${month}月份,台区累计停电${benyueCount}台次,同比${tongbi},环比${huanbi},涉及${shejiNum}个台区,${shejiDesc}</p>"
  1372. + "<p>(2)台区停电时长情况${shejiNum}个台区累计停电时间${benyueTime}小时,平均停电时长${pingjunHour}小时,同比${tongbiPingjunHour},环比${huanbiPingjunHour}。台区平均停电时间为${areaPingjunDesc}从同比情况看,${tbAreaPingjunDesc}</p>"
  1373. + "<p>台区停电时长在${fenduanDesc}停电时长最长的为${zuichangTaiQu},停电${zuichangTaiQuTime}小时,其次是${qiciTaiQu},停电时长${qiciTaiQuTime}小时。</p>"
  1374. + "<p>(3)台区重复停电情况两个月内停电2次及以上的台变${totalCountTwice}个,其中${totalCountTwiceDesc}${totalCountTwice}个重复停电台变中,${countMapTwiceDesc}两个月内停电3次及以上的台变${totalCountthiple}个。</p>";
  1375. Map<String, Object> dataMap = new HashMap<String, Object>();
  1376. dataMap.put("month", month);
  1377. dataMap.put("benyueCount", benyueCount);
  1378. dataMap.put("tongbi", tongbi);
  1379. dataMap.put("huanbi", huanbi);
  1380. dataMap.put("shejiNum", shejiNum);
  1381. dataMap.put("shejiDesc", shejiDesc);
  1382. dataMap.put("totalCount", totalCount);
  1383. dataMap.put("benyueTime", benyueTime);
  1384. dataMap.put("pingjunHour", pingjunHour);
  1385. dataMap.put("tongbiPingjunHour", tongbiPingjunHour);
  1386. dataMap.put("huanbiPingjunHour", huanbiPingjunHour);
  1387. dataMap.put("areaPingjunDesc", areaPingjunDesc);
  1388. dataMap.put("tbAreaPingjunDesc", tbAreaPingjunDesc);
  1389. dataMap.put("fenduanDesc", fenduanDesc);
  1390. dataMap.put("zuichangTaiQu", zuichangTaiQu);
  1391. dataMap.put("zuichangTaiQuTime", zuichangTaiQuTime);
  1392. dataMap.put("qiciTaiQu", qiciTaiQu);
  1393. dataMap.put("qiciTaiQuTime", qiciTaiQuTime);
  1394. dataMap.put("totalCountTwice", totalCountTwice);
  1395. dataMap.put("totalCountTwiceDesc", totalCountTwiceDesc);
  1396. dataMap.put("countMapTwiceDesc", countMapTwiceDesc);
  1397. dataMap.put("totalCountthiple", totalCountthiple);
  1398. Map<String, Object> resMap = new HashMap<String, Object>();
  1399. resMap.put("dataMap", dataMap);
  1400. resMap.put("descStr", descStr);
  1401. return resMap;
  1402. }
  1403. public List<List<String>> reportTypeZDDTYBB(String firstFileId, String secondFileId) throws MINBusinessException{
  1404. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1405. List<List<String>> resList = new ArrayList<List<String>>();
  1406. List<String> titleList = new ArrayList<String>();
  1407. titleList.add("ID");
  1408. titleList.add("TNAME");
  1409. titleList.add("SRC");
  1410. resList.add(titleList);
  1411. DwFileDetail01Example fileDetail01Example = new DwFileDetail01Example();
  1412. fileDetail01Example.createCriteria().andFileIdEqualTo(firstFileId);
  1413. // 选择文件
  1414. List<DwFileDetail01> firstList = db.selectByExample(DwFileDetail01Mapper.class, fileDetail01Example);
  1415. fileDetail01Example.clear();
  1416. // 对比文件
  1417. fileDetail01Example.createCriteria().andFileIdEqualTo(secondFileId);
  1418. List<DwFileDetail01> secondList = db.selectByExample(DwFileDetail01Mapper.class, fileDetail01Example);
  1419. for (DwFileDetail01 first : firstList) {
  1420. String firstExcelId = first.getExcelId();
  1421. boolean flag = false;
  1422. for (DwFileDetail01 second : secondList) {
  1423. String secondExcelId = second.getExcelId();
  1424. if (firstExcelId.equals(secondExcelId)) {
  1425. flag = true;
  1426. break;
  1427. }
  1428. }
  1429. if (!flag) {
  1430. List<String> resChildList = new ArrayList<String>();
  1431. resChildList.add(first.getExcelId());
  1432. resChildList.add(first.getExcelTname());
  1433. resChildList.add("退出");
  1434. resList.add(resChildList);
  1435. }
  1436. }
  1437. for (DwFileDetail01 second : secondList) {
  1438. String secondExcelId = second.getExcelId();
  1439. boolean flag = false;
  1440. for (DwFileDetail01 first : firstList) {
  1441. String firstExcelId = first.getExcelId();
  1442. if (secondExcelId.equals(firstExcelId)) {
  1443. flag = true;
  1444. break;
  1445. }
  1446. }
  1447. if (!flag) {
  1448. List<String> resChildList = new ArrayList<String>();
  1449. resChildList.add(second.getExcelId());
  1450. resChildList.add(second.getExcelTname());
  1451. resChildList.add("投入");
  1452. resList.add(resChildList);
  1453. }
  1454. }
  1455. return resList;
  1456. }
  1457. public List<List<String>> reportTypeFADZBB(String FADateRange, String yearChoose) throws MINBusinessException, ParseException{
  1458. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1459. List<List<String>> resList = new ArrayList<List<String>>();
  1460. List<String> titleList = new ArrayList<String>();
  1461. titleList.add("故障区间判断正确率");
  1462. titleList.add("故障区间判断正确环比");
  1463. titleList.add("故障前后段恢复正确率");
  1464. titleList.add("故障前后段恢复正确环比");
  1465. titleList.add("配电线路故障自愈成功率");
  1466. titleList.add("配电线路故障自愈成功环比");
  1467. resList.add(titleList);
  1468. Date beginTimeDate = DateUtil.parseDate(yearChoose + FADateRange.substring(0, 4), "yyyyMMdd");
  1469. String beginTime = DateUtil.format(beginTimeDate, "yyyyMMdd");
  1470. String endTime = yearChoose + FADateRange.substring(4, 8);
  1471. // 开始月份是12,年份取下一年
  1472. if ("12".equals(beginTime.substring(0, 2))) {
  1473. endTime = CommonUtil.add(yearChoose, "1") + FADateRange.substring(4, 8);
  1474. }
  1475. Map<String, String> param = new HashMap<String, String>();
  1476. param.put("beginTime", beginTime);
  1477. param.put("endTime", endTime);
  1478. List<Map<String, String>> GZQJPDList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPD(param);
  1479. List<Map<String, String>> GZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQHDHF(param);
  1480. List<Map<String, String>> GZQJPDAndGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPDAndGZQHDHF(param);
  1481. // 环比日期
  1482. String huanbiEndTime = DateUtil.dateAddDay(beginTime, -1);
  1483. PubAppparExample appparExample = new PubAppparExample();
  1484. appparExample.createCriteria().andCodeEqualTo("FADateRange").andValueLike("%"+huanbiEndTime.substring(4, 8));
  1485. List<PubApppar> appparList = db.getMybatisMapper(PubAppparMapper.class).selectByExample(appparExample);
  1486. if (appparList.size() != 1) {
  1487. throw new MINBusinessException("FA动作正确率日期区间获取错误!");
  1488. }
  1489. PubApppar apppar = appparList.get(0);
  1490. String value = apppar.getValue();
  1491. String huanbiBeginTime = huanbiEndTime.substring(0, 4) + value.substring(0, 4);
  1492. // 结束月是1月,年份取上一年
  1493. if ("01".equals(huanbiBeginTime.substring(4, 6))) {
  1494. huanbiBeginTime = CommonUtil.subtract(huanbiEndTime.substring(0, 4), "1") + value.substring(0, 4);
  1495. }
  1496. List<Map<String, String>> huanbiGZQJPDList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPD(param);
  1497. List<Map<String, String>> huanbiGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQHDHF(param);
  1498. List<Map<String, String>> huanbiGZQJPDAndGZQHDHFList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail02ByGZQJPDAndGZQHDHF(param);
  1499. List<String> childList = new ArrayList<String>();
  1500. // 故障区间判断正确率
  1501. if (GZQJPDList.size() == 0) {
  1502. childList.add("无数据");
  1503. } else {
  1504. String zhengqueCount = "0";
  1505. String totalNum = "0";
  1506. for (Map<String, String> dataMap : GZQJPDList) {
  1507. if ("正确".equals(dataMap.get("gzqjpd").trim())) {
  1508. zhengqueCount = dataMap.get("num");
  1509. }
  1510. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1511. }
  1512. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1513. }
  1514. // 故障区间判断正确环比
  1515. if (huanbiGZQJPDList.size() == 0) {
  1516. childList.add("无数据");
  1517. } else {
  1518. String zhengqueCount = "0";
  1519. String totalNum = "0";
  1520. for (Map<String, String> dataMap : huanbiGZQJPDList) {
  1521. if ("正确".equals(dataMap.get("gzqjpd").trim())) {
  1522. zhengqueCount = dataMap.get("num");
  1523. }
  1524. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1525. }
  1526. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1527. }
  1528. // 故障前后段恢复正确率
  1529. if (GZQHDHFList.size() == 0) {
  1530. childList.add("无数据");
  1531. } else {
  1532. String zhengqueCount = "0";
  1533. String totalNum = "0";
  1534. for (Map<String, String> dataMap : GZQHDHFList) {
  1535. if ("正确".equals(dataMap.get("gzqhdhf").trim())) {
  1536. zhengqueCount = dataMap.get("num");
  1537. }
  1538. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1539. }
  1540. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1541. }
  1542. // 故障前后段恢复正确环比
  1543. if (huanbiGZQHDHFList.size() == 0) {
  1544. childList.add("无数据");
  1545. } else {
  1546. String zhengqueCount = "0";
  1547. String totalNum = "0";
  1548. for (Map<String, String> dataMap : huanbiGZQHDHFList) {
  1549. if ("正确".equals(dataMap.get("gzqhdhf").trim())) {
  1550. zhengqueCount = dataMap.get("num");
  1551. }
  1552. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1553. }
  1554. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1555. }
  1556. // 配电线路故障自愈成功率
  1557. if (GZQJPDAndGZQHDHFList.size() == 0) {
  1558. childList.add("无数据");
  1559. } else {
  1560. String zhengqueCount = "0";
  1561. String totalNum = "0";
  1562. for (Map<String, String> dataMap : huanbiGZQHDHFList) {
  1563. // 故障区间判断、故障前后段恢复均为正确的数量/总数量
  1564. if ("正确".equals(dataMap.get("gzqhdhf")) && "正确".equals(dataMap.get("gzqjpd"))) {
  1565. zhengqueCount = dataMap.get("num");
  1566. }
  1567. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1568. }
  1569. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1570. }
  1571. // 配电线路故障自愈成功环比
  1572. if (huanbiGZQJPDAndGZQHDHFList.size() == 0) {
  1573. childList.add("无数据");
  1574. } else {
  1575. String zhengqueCount = "0";
  1576. String totalNum = "0";
  1577. for (Map<String, String> dataMap : huanbiGZQJPDAndGZQHDHFList) {
  1578. // 故障区间判断、故障前后段恢复均为正确的数量/总数量
  1579. if ("正确".equals(dataMap.get("gzqhdhf").trim()) && "正确".equals(dataMap.get("gzqjpd").trim())) {
  1580. zhengqueCount = dataMap.get("num");
  1581. }
  1582. totalNum = CommonUtil.add(totalNum, dataMap.get("num"));
  1583. }
  1584. childList.add(CommonUtil.multiply(CommonUtil.divide(zhengqueCount, totalNum, 4), "100", 2) + "%");
  1585. }
  1586. resList.add(childList);
  1587. return resList;
  1588. }
  1589. /**
  1590. * 低电压治理分析表
  1591. * @param range
  1592. * @param reportTypeId
  1593. * @return
  1594. * @throws MINBusinessException
  1595. * @throws ParseException
  1596. * @throws InvocationTargetException
  1597. * @throws IllegalArgumentException
  1598. * @throws IllegalAccessException
  1599. * @throws SecurityException
  1600. * @throws NoSuchMethodException
  1601. */
  1602. public Map<String, Object> reportTypeDDYZLFXB(String range, String reportTypeId, int page, int limit) throws MINBusinessException, ParseException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
  1603. Map<String, Object> resMap = new HashMap<String, Object>();
  1604. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1605. List<List<String>> resList = new ArrayList<List<String>>();
  1606. resMap.put("resList", resList);
  1607. List<String> titleList = new ArrayList<String>();
  1608. titleList.add("序号");
  1609. titleList.add("县公司名称");
  1610. titleList.add("用户管理单位名称");
  1611. titleList.add("线路名称");
  1612. titleList.add("台区ID");
  1613. titleList.add("变压器名称");
  1614. titleList.add("用户编号");
  1615. titleList.add("低电压时长");
  1616. titleList.add("累计天数");
  1617. titleList.add("低电压主要原因(点选)");
  1618. titleList.add("具体原因");
  1619. titleList.add("治理措施");
  1620. titleList.add("是否治理(点选)");
  1621. titleList.add("治理完成时间");
  1622. titleList.add("是否消除");
  1623. titleList.add("昨日新增");
  1624. titleList.add("全年累计天数");
  1625. range = range.replaceAll(" ", "");
  1626. String[] rangeArray = range.split("-");
  1627. String beginTime = rangeArray[0];
  1628. String endTime = rangeArray[1];
  1629. List<String> childLists = new ArrayList<String>();
  1630. childLists.add("<p>1.数据来源:智能化供电服务指挥系统;因系统数据滞后,统计时间为:"+CommonUtil.dateFormat(beginTime,"yyyy年MM月dd日")+"——"+CommonUtil.dateFormat(endTime,"yyyy年MM月dd日")+",每日发生低电压客户已标红,受考核用户已标黄,累计时长≥15小时的预警用户标褐红色需重点治理。每日新增预警及考核用户编号已标红。</p><p>2.反馈要求:请各单位照实填写,按时反馈,具体原因请填写详细,治理完成的填写治理完成时间。未填写或填写不详细的一律列入考核,请知悉。</p><p>3.低电压是否消除:以供电服务指挥系统数据为依据,连续7天未发生低电压视为低电压消除。</p>");
  1631. resList.add(childLists);
  1632. int count = DateUtil.diffDate(beginTime, endTime);
  1633. //日期集合
  1634. List<String> dateList = new ArrayList<String>();
  1635. for(int i=0;i<=count;i++){
  1636. String beginDate = DateUtil.dateAddDay(endTime,-i);
  1637. dateList.add(beginDate);
  1638. beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6);
  1639. titleList.add(beginDate+"低电压时长");
  1640. }
  1641. //子类数据
  1642. resList.add(titleList);
  1643. //查询累计天数以及累计时长
  1644. Map<String, Object> param = new HashMap<String, Object>();
  1645. param.put("beginTime", beginTime);
  1646. param.put("endTime", endTime);
  1647. // 分析表数据过大,分页处理
  1648. MINRowBounds rows = new MINRowBounds(page, limit);
  1649. rows.setSeparateSql(true);
  1650. List<Map<String, String>> DDYZLFXBList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYZLFXB(param, rows);
  1651. resMap.put("resList", resList);
  1652. resMap.put("count", rows.getCount());
  1653. //取所有用户ID
  1654. List<String> yhidList = CommonUtil.getIdFromList(DDYZLFXBList, "yhid");
  1655. //如果用户ID为空,添加默认用户XXXXXXXX
  1656. if(yhidList == null || yhidList.isEmpty()){
  1657. yhidList = new ArrayList<String>();
  1658. yhidList.add("XXXXXXXX");
  1659. }
  1660. DwFileDetail03Example example03 = new DwFileDetail03Example();
  1661. example03.createCriteria().andSjrqBetween(beginTime, endTime).andYhidIn(yhidList);
  1662. example03.setOrderByClause("DFD3_YHID,DFD3_SJRQ desc");
  1663. //查询数据-用户ID,开始日期、结束日期
  1664. List<DwFileDetail03> detailList = db.selectByExample(DwFileDetail03Mapper.class, example03);
  1665. // 获取全年累计天数
  1666. String year = endTime.substring(0, 4);
  1667. param.put("beginTime", CommonUtil.subtract(year, "1") + "1226");
  1668. param.put("endTime", year + "1225");
  1669. param.put("yhidList", yhidList);
  1670. List<Map<String, String>> yearDataList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYZLFXB(param, new MINRowBounds());
  1671. int a = 0;
  1672. for(Map<String, String> map :DDYZLFXBList){
  1673. List<String> childList = Arrays.asList(new String[titleList.size()]);
  1674. String dysc = map.get("dysc");//低压时长
  1675. String ljts = map.get("ljts");//累计天数
  1676. a++;
  1677. childList.set(0, a+"");
  1678. childList.set(1, map.get("xgsmc"));
  1679. childList.set(2, map.get("yhgldw"));
  1680. childList.set(3, map.get("xlmc"));
  1681. childList.set(4, map.get("tqid"));
  1682. childList.set(5, map.get("byqmc"));
  1683. childList.set(6, map.get("yhid"));
  1684. childList.set(7, dysc);
  1685. childList.set(8, ljts);
  1686. childList.set(9, "");
  1687. childList.set(10, "");
  1688. childList.set(11, "");
  1689. childList.set(12, "");
  1690. childList.set(13, "");
  1691. childList.set(14, "");
  1692. String yhid = String.valueOf(map.get("yhid"));
  1693. int num = 0;
  1694. // 最后一日时长
  1695. String zuoriSc = "0";
  1696. // 总时长,不含最后一日
  1697. String scNozuori = "0";
  1698. for (int i = 0; i < detailList.size(); i ++) {
  1699. // 是同一用户
  1700. if (detailList.get(i).getYhid().equals(yhid)) {
  1701. num ++;
  1702. String sjrq = detailList.get(i).getSjrq();
  1703. // 首条数据判断是否消除
  1704. if (num == 1) {
  1705. int countJg = DateUtil.diffDate(sjrq, endTime);
  1706. //查询是否低电压已消除
  1707. if(countJg >= 7){
  1708. if (CommonUtil.compare(dysc, "48") != -1) {
  1709. childList.set(12, "是");
  1710. childList.set(14, "是");
  1711. } else if (CommonUtil.compare(dysc, "15") != -1) {
  1712. childList.set(14, "是");
  1713. }
  1714. }else{
  1715. childList.set(14, "");
  1716. }
  1717. }
  1718. int index = DateUtil.diffDate(sjrq, endTime);
  1719. childList.set(17 + index, detailList.get(i).getDysc());
  1720. // 获取昨日时长
  1721. if (index == 0) {
  1722. zuoriSc = detailList.get(i).getDysc();
  1723. } else {
  1724. scNozuori = CommonUtil.add(scNozuori, detailList.get(i).getDysc());
  1725. }
  1726. // 移除已计算数据,减少循环次数
  1727. detailList.remove(i);
  1728. i --;
  1729. // 排序顺序一致,用户编号不一样退出循环
  1730. } else {
  1731. if (num != 0) {
  1732. break;
  1733. }
  1734. }
  1735. }
  1736. // 获取全年数
  1737. for (int i = 0; i < yearDataList.size(); i ++) {
  1738. if (yhid.equals(yearDataList.get(i).get("yhid"))) {
  1739. childList.set(16, yearDataList.get(i).get("ljts"));
  1740. yearDataList.remove(i);
  1741. break;
  1742. }
  1743. }
  1744. // 昨日有时长 且 昨日之前总时长小于48小时 且 昨日+之前时长大于48小时
  1745. if (CommonUtil.compare(zuoriSc, "0") != 0 && CommonUtil.compare(scNozuori, "48") == -1 && CommonUtil.compare(CommonUtil.add(zuoriSc, scNozuori), "48") != -1) {
  1746. childList.set(15, "是");
  1747. } else {
  1748. childList.set(15, "否");
  1749. }
  1750. resList.add(childList);
  1751. }
  1752. return resMap;
  1753. }
  1754. /**
  1755. * 低电压日报
  1756. * @param range
  1757. * @param reportTypeId
  1758. * @return
  1759. * @throws MINBusinessException
  1760. * @throws ParseException
  1761. */
  1762. public List<List<String>> reportTypeDDYRB(String DdyDateRange, String yearChoose,String range, String reportTypeId) throws MINBusinessException, ParseException{
  1763. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1764. List<List<String>> resList = new ArrayList<List<String>>();
  1765. Date beginTimeDate = DateUtil.parseDate(yearChoose + DdyDateRange.substring(0, 4), "yyyyMMdd");
  1766. String beginTime = DateUtil.format(beginTimeDate, "yyyyMMdd");
  1767. String endTime = yearChoose + DdyDateRange.substring(4, 8);
  1768. // 开始月份是12,年份取下一年
  1769. if ("12".equals(beginTime.substring(0, 2))) {
  1770. endTime = CommonUtil.add(yearChoose, "1") + DdyDateRange.substring(4, 8);
  1771. }
  1772. PubAppparExample appparExample = new PubAppparExample();
  1773. appparExample.createCriteria().andCodeEqualTo("tqtd_num_" + systemCode);
  1774. appparExample.setOrderByClause("APR_TYPE");
  1775. List<PubApppar> appparList = db.selectByExample(PubAppparMapper.class, appparExample);
  1776. Map<String, String> countMap = new HashMap<String, String>();
  1777. for (PubApppar apppar : appparList) {
  1778. countMap.put(apppar.getValue(), "0");
  1779. }
  1780. countMap.put("合计", "0");
  1781. List<String> title = new ArrayList<String>();
  1782. //标题
  1783. List<String> childList0 = new ArrayList<String>();
  1784. childList0.add("分类\\单位");
  1785. for (PubApppar apppar : appparList) {
  1786. childList0.add(apppar.getValue());
  1787. }
  1788. childList0.add("合计");
  1789. //客户总数
  1790. List<String> childList1 = new ArrayList<String>();
  1791. childList1.add("客户总数");
  1792. String heji = "0";
  1793. for (PubApppar apppar : appparList) {
  1794. childList1.add(customerMap.get(apppar.getValue()));
  1795. heji = CommonUtil.add(heji, customerMap.get(apppar.getValue()));
  1796. }
  1797. childList1.add(heji);
  1798. //低电压客户数
  1799. List<String> childList2 = new ArrayList<String>();
  1800. childList2.add("低电压客户数");
  1801. for(String name:childList0){
  1802. if("分类\\单位".equals(name)){
  1803. continue;
  1804. }
  1805. DwFileDetail03Example example03 = new DwFileDetail03Example();
  1806. if("合计".equals(name)){
  1807. example03.createCriteria().andSjrqBetween(beginTime, endTime);
  1808. }else{
  1809. example03.createCriteria().andSjrqBetween(beginTime, endTime).andXgsmcLike(name+"%");
  1810. }
  1811. List<DwFileDetail03> DateList = db.selectByExample(DwFileDetail03Mapper.class, example03);
  1812. childList2.add(DateList.size()+"");
  1813. }
  1814. //低电压客户占比
  1815. List<String> childList3 = new ArrayList<String>();
  1816. childList3.add("低电压客户占比");
  1817. for(int i=1;i<childList1.size();i++){
  1818. //客户总数
  1819. String count = childList1.get(i);
  1820. //昨日客户数
  1821. String dayCount = childList2.get(i);
  1822. childList3.add(CommonUtil.multiply(CommonUtil.divide(dayCount, count, 4), "100", 2) + "%");
  1823. }
  1824. //昨日新增考核数
  1825. List<String> childList4 = new ArrayList<String>();
  1826. childList4.add("昨日新增考核户数");
  1827. for(int i=1;i<childList0.size();i++){
  1828. String endTimes = DateUtil.dateAddDay(range,-1);
  1829. Map<String, Object> map = new HashMap<String, Object>();
  1830. if(!"合计".equals(childList0.get(i))){
  1831. map.put("area", childList0.get(i));
  1832. }
  1833. map.put("beginTime", beginTime);
  1834. map.put("endTime", endTimes);
  1835. List<Map<String, String>> fileList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map, new MINRowBounds());
  1836. map.put("endTime", endTime);
  1837. List<Map<String, String>> fileList1 = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map, new MINRowBounds());
  1838. childList4.add((fileList1.size()-fileList.size())+"");
  1839. }
  1840. //截至目前未治理完成户数
  1841. List<String> childList5 = new ArrayList<String>();
  1842. childList5.add("截至目前未治理完成户数");
  1843. //用户id
  1844. List<String> childList6 = new ArrayList<String>();
  1845. for(int i=1;i<childList0.size();i++){
  1846. int dayCount = DateUtil.diffDate(range,beginTime);
  1847. String beginTimes = DateUtil.dateAddDay(range,-6);
  1848. DwFileDetail03Example example = new DwFileDetail03Example();
  1849. Map<String, Object> map = new HashMap<String, Object>();
  1850. if(!"合计".equals(childList0.get(i))){
  1851. map.put("area", childList0.get(i));
  1852. }
  1853. map.put("beginTime", beginTime);
  1854. map.put("endTime", range);
  1855. List<Map<String, String>> fileList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(map, new MINRowBounds());
  1856. if(dayCount<6){
  1857. childList5.add(fileList.size()+"");
  1858. }else{
  1859. for(Map<String, String> maps:fileList){
  1860. childList6.add(maps.get("yhid"));
  1861. }
  1862. if (childList6.size() == 0) {
  1863. childList5.add("0");
  1864. } else {
  1865. example.createCriteria().andSjrqBetween(beginTimes, range).andYhidIn(childList6);
  1866. List<DwFileDetail03> DateList = db.selectByExample(DwFileDetail03Mapper.class, example);
  1867. childList5.add(DateList.size()+"");
  1868. }
  1869. }
  1870. }
  1871. String content = "昨日新增受考核低电压客户"+childList4.get(childList4.size()-1)+"户,按单位分:";
  1872. for(int i=1;i<childList0.size()-1;i++){
  1873. content=content+childList0.get(i)+childList4.get(i)+"户,";
  1874. if(childList0.size()-1==i){
  1875. content=content+childList0.get(i)+childList4.get(i)+"户。";
  1876. }
  1877. }
  1878. content = content+"昨日新增未治理完成客户_户,截至目前未治理完成"+childList5.get(childList5.size()-1)+"户,_户正在治理;_户治理后再次出现,其中_各_户;"
  1879. + "_户未开始治理,其中__户。其中全年累计受考核30天及以上且未治理完成的_户:为_户(户号:_)。";
  1880. title.add(content);
  1881. resList.add(title);
  1882. resList.add(childList0);
  1883. resList.add(childList1);
  1884. resList.add(childList2);
  1885. resList.add(childList3);
  1886. resList.add(childList4);
  1887. resList.add(childList5);
  1888. return resList;
  1889. }
  1890. /**
  1891. * 过电压治理分析表
  1892. * @param range
  1893. * @param reportTypeId
  1894. * @return
  1895. * @throws MINBusinessException
  1896. * @throws ParseException
  1897. */
  1898. public List<List<String>> reportTypeGDYZLFXB(String range, String reportTypeId) throws MINBusinessException, ParseException{
  1899. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  1900. List<List<String>> resList = new ArrayList<List<String>>();
  1901. List<String> titleList = new ArrayList<String>();
  1902. titleList.add("序号");
  1903. titleList.add("县公司名称");
  1904. titleList.add("用户管理单位名称");
  1905. titleList.add("线路名称");
  1906. titleList.add("台区ID");
  1907. titleList.add("变压器名称");
  1908. titleList.add("用户编号");
  1909. titleList.add("过电压时长");
  1910. titleList.add("低电压主要原因(点选)");
  1911. titleList.add("具体原因");
  1912. titleList.add("治理措施");
  1913. titleList.add("是否治理(点选)");
  1914. titleList.add("治理完成时间");
  1915. titleList.add("是否消除");
  1916. range = range.replaceAll(" ", "");
  1917. String[] rangeArray = range.split("-");
  1918. String beginTime = rangeArray[0];
  1919. String endTime = rangeArray[1];
  1920. List<String> childLists = new ArrayList<String>();
  1921. String content = "1.数据来源:智能化供电服务指挥系统;因系统数据滞后,统计时间为:"
  1922. + CommonUtil.dateFormat(beginTime,"yyyy年MM月dd日")+"——"+CommonUtil.dateFormat(endTime,"yyyy年MM月dd日")+";每日过电压时长24小时客户已标红,受考核用户已标黄(连续48小时过电压),需重点治理。2.反馈要求:"
  1923. + "请各单位照实填写,按时反馈,具体原因请详细填写,现场治理完成的填写现场治理时间(格式为20200101),未填写或填写不详细的一律列入考核,请知悉。"
  1924. + "3.过电压是否消除:以供电服务指挥系统数据为依据,连续7天未发生过电压视为过电压消除。";
  1925. childLists.add(content);
  1926. resList.add(childLists);
  1927. int count = DateUtil.diffDate(beginTime, endTime);
  1928. //日期集合
  1929. List<String> dateList = new ArrayList<String>();
  1930. for(int i=0;i<=count;i++){
  1931. String beginDate = DateUtil.dateAddDay(endTime,-i);
  1932. dateList.add(beginDate);
  1933. beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6);
  1934. titleList.add(beginDate+"过电压时长");
  1935. }
  1936. //子类数据
  1937. resList.add(titleList);
  1938. //查询累计天数以及累计时长
  1939. Map<String, String> param = new HashMap<String, String>();
  1940. param.put("beginTime", beginTime);
  1941. param.put("endTime", endTime);
  1942. List<Map<String, String>> GDYZLFXBList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail04ByGDYZLFXB(param);
  1943. int a = 0;
  1944. for(Map<String, String> map :GDYZLFXBList){
  1945. List<String> childList = new ArrayList<String>();
  1946. String dysc = String.format("%.0f",map.get("gdysc"));
  1947. a++;
  1948. childList.add(a+"");
  1949. childList.add(map.get("xgsmc"));
  1950. childList.add(map.get("yhgldw"));
  1951. childList.add(map.get("xlmc"));
  1952. childList.add(map.get("tqid"));
  1953. childList.add(map.get("byqmc"));
  1954. childList.add(map.get("yhid"));
  1955. childList.add(dysc);
  1956. childList.add("");
  1957. childList.add("");
  1958. childList.add("");
  1959. childList.add("");
  1960. childList.add("");
  1961. //查询该用户低电压明细
  1962. DwFileDetail04Example example04 = new DwFileDetail04Example();
  1963. example04.createCriteria().andYhidEqualTo(map.get("yhid")).andSjrqBetween(beginTime, endTime);
  1964. example04.setOrderByClause("DFD4_SJRQ desc");
  1965. List<DwFileDetail04> DateList = db.selectByExample(DwFileDetail04Mapper.class, example04);
  1966. int countJg = DateUtil.diffDate(DateList.get(0).getSjrq(), endTime);
  1967. //查询是否低电压已消除
  1968. if(countJg>=7){
  1969. childList.add("是");
  1970. }else{
  1971. childList.add("");
  1972. }
  1973. int bs=0;
  1974. //循环加载低电压时长
  1975. for(String date:dateList){
  1976. int b = 0;
  1977. for(DwFileDetail04 detail:DateList){
  1978. if(date.equals(detail.getSjrq())){
  1979. childList.add(detail.getGdysc());
  1980. b=1;
  1981. bs++;
  1982. break;
  1983. }
  1984. }
  1985. if(b == 0){
  1986. if(bs<2){
  1987. bs=0;
  1988. }
  1989. childList.add("");
  1990. }
  1991. }
  1992. childList.add(bs+"");
  1993. resList.add(childList);
  1994. }
  1995. // resList.add(DDYZLFXBList);
  1996. return resList;
  1997. }
  1998. public Map<String, Object> reportType95598YB(String range) throws MINBusinessException, ParseException{
  1999. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  2000. Map<String, Object> resMap = new HashMap<String, Object>();
  2001. range = range.replaceAll(" ", "");
  2002. String[] rangeArray = range.split("-");
  2003. String beginTime = rangeArray[0];
  2004. String endTime = rangeArray[1];
  2005. // 类型列表
  2006. List<String> typeList = new ArrayList<String>();
  2007. // 统计表格
  2008. List<List<String>> tongjiList = new ArrayList<List<String>>();
  2009. List<String> titleList = new ArrayList<String>();
  2010. titleList.add("类型");
  2011. titleList.add("去年同月");
  2012. titleList.add("上月");
  2013. titleList.add("本月");
  2014. titleList.add("同比");
  2015. titleList.add("环比");
  2016. tongjiList.add(titleList);
  2017. Map<String, Object> param = new HashMap<String, Object>();
  2018. String totalBenyueNum = "0";
  2019. String totalShangyueNum = "0";
  2020. String totalQunianNum = "0";
  2021. // 本月数据
  2022. param.put("beginTime", beginTime);
  2023. param.put("endTime", endTime);
  2024. // 类型统计数据
  2025. List<Map<String, Object>> benyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
  2026. // 区域统计数据
  2027. List<Map<String, Object>> benyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
  2028. for (Map<String, Object> map : benyueTongjiMap) {
  2029. String type = String.valueOf(map.get("type"));
  2030. String num = String.valueOf(map.get("num"));
  2031. // 不包含该类型,新增一个类型
  2032. if (!typeList.contains(type)) {
  2033. typeList.add(type);
  2034. List<String> typeDataList = Arrays.asList(new String[6]);
  2035. typeDataList.set(0,type);
  2036. typeDataList.set(3, num);
  2037. tongjiList.add(typeDataList);
  2038. // 已包含该类型,原数据中增加数据
  2039. } else {
  2040. int index = typeList.indexOf(type);
  2041. List<String> typeDataList = tongjiList.get(index + 1);
  2042. typeDataList.set(3, num);
  2043. }
  2044. totalBenyueNum = CommonUtil.add(totalBenyueNum, num);
  2045. }
  2046. // 上月数据
  2047. String lastBeginTime = DateUtil.dateAddMonth(beginTime, -1);
  2048. String lastEndTime = DateUtil.dateAddMonth(endTime, -1);
  2049. param.put("beginTime", lastBeginTime);
  2050. param.put("endTime", lastEndTime);
  2051. List<Map<String, Object>> shangyueTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
  2052. // 区域统计数据
  2053. List<Map<String, Object>> shangyueByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
  2054. for (Map<String, Object> map : shangyueTongjiMap) {
  2055. String type = String.valueOf(map.get("type"));
  2056. String num = String.valueOf(map.get("num"));
  2057. // 不包含该类型,新增一个类型
  2058. if (!typeList.contains(type)) {
  2059. typeList.add(type);
  2060. List<String> typeDataList = Arrays.asList(new String[6]);
  2061. typeDataList.set(0,type);
  2062. typeDataList.set(2, num);
  2063. tongjiList.add(typeDataList);
  2064. // 已包含该类型,原数据中增加数据
  2065. } else {
  2066. int index = typeList.indexOf(type);
  2067. List<String> typeDataList = tongjiList.get(index + 1);
  2068. typeDataList.set(2, num);
  2069. }
  2070. totalShangyueNum = CommonUtil.add(totalShangyueNum, num);
  2071. }
  2072. // 去年同期数据
  2073. String qinianBeginTime = DateUtil.dateAddYear(beginTime, -1);
  2074. String qunianEndTime = DateUtil.dateAddYear(endTime, -1);
  2075. param.put("beginTime", qinianBeginTime);
  2076. param.put("endTime", qunianEndTime);
  2077. List<Map<String, Object>> qunianTongjiMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByType(param);
  2078. // 区域统计数据
  2079. List<Map<String, Object>> qunianByAreaMap = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05ByArea(param);
  2080. for (Map<String, Object> map : qunianTongjiMap) {
  2081. String type = String.valueOf(map.get("type"));
  2082. String num = String.valueOf(map.get("num"));
  2083. // 不包含该类型,新增一个类型
  2084. if (!typeList.contains(type)) {
  2085. typeList.add(type);
  2086. List<String> typeDataList = Arrays.asList(new String[6]);
  2087. typeDataList.set(0,type);
  2088. typeDataList.set(1, num);
  2089. tongjiList.add(typeDataList);
  2090. // 已包含该类型,原数据中增加数据
  2091. } else {
  2092. int index = typeList.indexOf(type);
  2093. List<String> typeDataList = tongjiList.get(index + 1);
  2094. typeDataList.set(1, num);
  2095. }
  2096. totalQunianNum = CommonUtil.add(totalQunianNum, num);
  2097. }
  2098. // 合计
  2099. List<String> hejiList = new ArrayList<String>();
  2100. hejiList.add("总计");
  2101. hejiList.add(totalQunianNum);
  2102. hejiList.add(totalShangyueNum);
  2103. hejiList.add(totalBenyueNum);
  2104. hejiList.add("");
  2105. hejiList.add("");
  2106. tongjiList.add(hejiList);
  2107. // 计算同比环比
  2108. for (int i = 1; i < tongjiList.size(); i ++) {
  2109. List<String> childList = tongjiList.get(i);
  2110. String qunianNum = CommonUtil.isEmpty(childList.get(1))?"0":childList.get(1);
  2111. String shangyueNum = CommonUtil.isEmpty(childList.get(2))?"0":childList.get(2);
  2112. String benyueNum = CommonUtil.isEmpty(childList.get(3))?"0":childList.get(3);
  2113. // 本月有数据
  2114. if (CommonUtil.compare(benyueNum, "0") != 0) {
  2115. // 去年有数据
  2116. if (CommonUtil.compare(qunianNum, "0") != 0) {
  2117. String tongbi = CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueNum, qunianNum), qunianNum, 4), "100", 2) + "%";
  2118. childList.set(4, tongbi);
  2119. }
  2120. // 上月有数据
  2121. if (CommonUtil.compare(shangyueNum, "0") != 0) {
  2122. String huanbi = CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(benyueNum, shangyueNum), shangyueNum, 4), "100", 2) + "%";
  2123. childList.set(5, huanbi);
  2124. }
  2125. }
  2126. }
  2127. resMap.put("tongjiList", tongjiList);
  2128. // 详细数据
  2129. param.put("benyueBeginTime", beginTime);
  2130. param.put("benyueEndTime", endTime);
  2131. param.put("lastBeginTime", lastBeginTime);
  2132. param.put("lastEndTime", lastEndTime);
  2133. param.put("qinianBeginTime", qinianBeginTime);
  2134. param.put("qunianEndTime", qunianEndTime);
  2135. List<String> areaList = db.getMybatisMapper(ReportServiceMapper.class).selectDetail05GetArea(param);
  2136. List<List<List<String>>> areaDetailList = new ArrayList<List<List<String>>>();
  2137. resMap.put("areaDetailList", areaDetailList);
  2138. for (String type : typeList) {
  2139. List<List<String>> benyueDetailList = new ArrayList<List<String>>();
  2140. List<String> benyueTitleList = new ArrayList<String>();
  2141. benyueTitleList.add(beginTime + "-" + endTime);
  2142. benyueTitleList.add("业务类型");
  2143. benyueTitleList.add("一级分类");
  2144. benyueTitleList.add("二级分类");
  2145. benyueTitleList.add("业务子类");
  2146. benyueDetailList.add(benyueTitleList);
  2147. List<List<String>> shangyueDetailList = new ArrayList<List<String>>();
  2148. List<String> shangyueTitleList = new ArrayList<String>();
  2149. shangyueTitleList.add(lastBeginTime + "-" + lastEndTime);
  2150. shangyueTitleList.add("业务类型");
  2151. shangyueTitleList.add("一级分类");
  2152. shangyueTitleList.add("二级分类");
  2153. shangyueTitleList.add("业务子类");
  2154. shangyueDetailList.add(shangyueTitleList);
  2155. List<List<String>> qunianDetailList = new ArrayList<List<String>>();
  2156. List<String> qunianTitleList = new ArrayList<String>();
  2157. qunianTitleList.add(qinianBeginTime + "-" + qunianEndTime);
  2158. qunianTitleList.add("业务类型");
  2159. qunianTitleList.add("一级分类");
  2160. qunianTitleList.add("二级分类");
  2161. qunianTitleList.add("业务子类");
  2162. qunianDetailList.add(qunianTitleList);
  2163. // 区域数据
  2164. for (String area : areaList) {
  2165. benyueTitleList.add(area);
  2166. shangyueTitleList.add(area);
  2167. qunianTitleList.add(area);
  2168. }
  2169. benyueTitleList.add("总计");
  2170. shangyueTitleList.add("总计");
  2171. qunianTitleList.add("总计");
  2172. areaDetailList.add(benyueDetailList);
  2173. areaDetailList.add(shangyueDetailList);
  2174. areaDetailList.add(qunianDetailList);
  2175. // 报表详情生成
  2176. until95598(benyueByAreaMap, type, benyueDetailList);
  2177. until95598(shangyueByAreaMap, type, shangyueDetailList);
  2178. until95598(qunianByAreaMap, type, qunianDetailList);
  2179. }
  2180. // 计算总计
  2181. for (int i = 0; i < areaDetailList.size(); i ++) {
  2182. List<List<String>> excelList = areaDetailList.get(i);
  2183. List<String> zongji = new ArrayList<String>();
  2184. zongji.add("总计");
  2185. zongji.add("");
  2186. zongji.add("");
  2187. zongji.add("");
  2188. zongji.add("");
  2189. // 合计汇总
  2190. String[] zongjiNum = new String[excelList.get(0).size()- 5];
  2191. String totalNum = "0";
  2192. for (int j = 1; j < excelList.size(); j ++) {
  2193. List<String> childList = excelList.get(j);
  2194. int index = 0;
  2195. String zongjiType = "0";
  2196. for (int k = 5; k < childList.size(); k ++) {
  2197. zongjiType = CommonUtil.add(zongjiType, childList.get(k));
  2198. zongjiNum[index] = CommonUtil.add(zongjiNum[index], childList.get(k));
  2199. index ++;
  2200. }
  2201. childList.set(childList.size() - 1, zongjiType);
  2202. totalNum = CommonUtil.add(totalNum, zongjiType);
  2203. }
  2204. zongjiNum[zongjiNum.length - 1] = totalNum;
  2205. for (int j = 0; j < zongjiNum.length; j++) {
  2206. zongji.add(zongjiNum[j]);
  2207. }
  2208. excelList.add(zongji);
  2209. }
  2210. return resMap;
  2211. }
  2212. /**
  2213. * 报表数据处理
  2214. * @param areaMap
  2215. * @param type
  2216. * @param detailList
  2217. */
  2218. public void until95598(List<Map<String, Object>> areaMap, String type, List<List<String>> detailList) {
  2219. for (int i = 0; i < areaMap.size(); i ++) {
  2220. Map<String, Object> map = areaMap.get(i);
  2221. String dataType = String.valueOf(map.get("type"));
  2222. // 同一类型的数据
  2223. if (dataType.equals(type)) {
  2224. // 供电单位
  2225. String gddw = String.valueOf(map.get("gddw"));
  2226. // 数量
  2227. String num = String.valueOf(map.get("num"));
  2228. // 业务类型
  2229. String ywlx = String.valueOf(map.get("ywlx"));
  2230. // 一级分类
  2231. String yjfl = String.valueOf(map.get("yjfl"));
  2232. // 二级分类
  2233. String ejfl = String.valueOf(map.get("ejfl"));
  2234. // 业务子类
  2235. String ywzl = String.valueOf(map.get("ywzl"));
  2236. // 不是第一条数据
  2237. if (i != 0) {
  2238. // 下一条数据
  2239. Map<String, Object> lastMap = areaMap.get(i - 1);
  2240. // 业务类型
  2241. String lastYwlx = String.valueOf(lastMap.get("ywlx"));
  2242. // 一级分类
  2243. String lastYjfl = String.valueOf(lastMap.get("yjfl"));
  2244. // 二级分类
  2245. String lastEjfl = String.valueOf(lastMap.get("ejfl"));
  2246. // 业务子类
  2247. String lastYwzl = String.valueOf(lastMap.get("ywzl"));
  2248. // 业务类型等数据相同,是同一行数据
  2249. if (lastYwlx.equals(ywlx) && lastYjfl.equals(yjfl) && lastEjfl.equals(ejfl) && lastYwzl.equals(ywzl)) {
  2250. // 获取区域位置
  2251. int index = detailList.get(0).indexOf(gddw);
  2252. // 获取最后一条数据
  2253. List<String> childList = detailList.get(detailList.size() - 1);
  2254. childList.set(index, num);
  2255. // 数据不同,新增一条数据
  2256. } else {
  2257. List<String> childList = Arrays.asList(new String[detailList.get(0).size()]);
  2258. childList.set(0, dataType);
  2259. childList.set(1, ywlx);
  2260. childList.set(2, yjfl);
  2261. childList.set(3, ejfl);
  2262. childList.set(4, ywzl);
  2263. // 获取区域位置
  2264. int index = detailList.get(0).indexOf(gddw);
  2265. childList.set(index, num);
  2266. detailList.add(childList);
  2267. }
  2268. } else {
  2269. List<String> childList = Arrays.asList(new String[detailList.get(0).size()]);
  2270. childList.set(0, dataType);
  2271. childList.set(1, ywlx);
  2272. childList.set(2, yjfl);
  2273. childList.set(3, ejfl);
  2274. childList.set(4, ywzl);
  2275. // 获取区域位置
  2276. int index = detailList.get(0).indexOf(gddw);
  2277. childList.set(index, num);
  2278. detailList.add(childList);
  2279. }
  2280. }
  2281. }
  2282. }
  2283. private List<List<String>> reportTypeDDYWZL(String ddyFxbId) throws MINBusinessException, ParseException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  2284. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  2285. // 报告信息
  2286. DwReportInf reportInf = db.selectByPrimaryKey(DwReportInfMapper.class, ddyFxbId);
  2287. String range = reportInf.getDayInterval();
  2288. String beginTime = range.split("-")[0];
  2289. String endTime = range.split("-")[1];
  2290. List<List<String>> resList = new ArrayList<List<String>>();
  2291. List<String> titleList = new ArrayList<String>();
  2292. titleList.add("序号");
  2293. titleList.add("县公司名称");
  2294. titleList.add("用户管理单位名称");
  2295. titleList.add("线路名称");
  2296. titleList.add("台区ID");
  2297. titleList.add("变压器名称");
  2298. titleList.add("用户编号");
  2299. titleList.add("低电压时长");
  2300. titleList.add("累计天数");
  2301. titleList.add("低电压主要原因(点选)");
  2302. titleList.add("具体原因");
  2303. titleList.add("治理措施");
  2304. titleList.add("是否治理(点选)");
  2305. titleList.add("治理完成时间");
  2306. titleList.add("是否消除");
  2307. int count = DateUtil.diffDate(beginTime, endTime);
  2308. //日期集合
  2309. List<String> dateList = new ArrayList<String>();
  2310. for(int i=0;i<=count;i++){
  2311. String beginDate = DateUtil.dateAddDay(endTime,-i);
  2312. dateList.add(beginDate);
  2313. beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6);
  2314. titleList.add(beginDate+"低电压时长");
  2315. }
  2316. resList.add(titleList);
  2317. DwDdyFxbExample ddyFxbExample = new DwDdyFxbExample();
  2318. ddyFxbExample.createCriteria().andReportIdEqualTo(ddyFxbId).andSfxcNotEqualTo("是").andDdysjGreaterThanOrEqualTo(48);
  2319. ddyFxbExample.setOrderByClause("DDF_ID");
  2320. List<DwDdyFxb> ddyFxbList = db.selectByExample(DwDdyFxbMapper.class, ddyFxbExample);
  2321. List<String> fxbIdList = CommonUtil.getIdFromList(ddyFxbList, "id");
  2322. if (fxbIdList.size() == 0) {
  2323. return resList;
  2324. }
  2325. DwDdyFxbDetailExample ddyFxbDetailExample = new DwDdyFxbDetailExample();
  2326. ddyFxbDetailExample.createCriteria().andFxbIdIn(fxbIdList);
  2327. ddyFxbDetailExample.setOrderByClause("DDFD_FXB_ID");
  2328. List<DwDdyFxbDetail> detailList = db.selectByExample(DwDdyFxbDetailMapper.class, ddyFxbDetailExample);
  2329. for (DwDdyFxb ddyFxb : ddyFxbList) {
  2330. List<String> childList = Arrays.asList(new String[titleList.size()]);
  2331. childList.set(0, ddyFxb.getXh());
  2332. childList.set(1, ddyFxb.getXgsmc());
  2333. childList.set(2, ddyFxb.getYhgldwmc());
  2334. childList.set(3, ddyFxb.getXlmc());
  2335. childList.set(4, ddyFxb.getTqid());
  2336. childList.set(5, ddyFxb.getByqmc());
  2337. childList.set(6, ddyFxb.getYhbh());
  2338. childList.set(7, String.valueOf(ddyFxb.getDdysj()));
  2339. childList.set(8, String.valueOf(ddyFxb.getLjts()));
  2340. childList.set(9, ddyFxb.getDdyzymc());
  2341. childList.set(10, ddyFxb.getJtyy());
  2342. childList.set(11, ddyFxb.getZlcs());
  2343. childList.set(12, ddyFxb.getSfzl());
  2344. childList.set(13, ddyFxb.getZlwcsj());
  2345. childList.set(14, ddyFxb.getSfxc());
  2346. String fxbId = ddyFxb.getId();
  2347. for (int i = 0; i < detailList.size(); i++) {
  2348. // 分析表id一致
  2349. if (fxbId.equals(detailList.get(i).getFxbId())) {
  2350. String sjrq = detailList.get(i).getDate();
  2351. int index = DateUtil.diffDate(sjrq, endTime);
  2352. childList.set(15 + index, detailList.get(i).getSc());
  2353. detailList.remove(i);
  2354. i --;
  2355. } else {
  2356. break;
  2357. }
  2358. }
  2359. resList.add(childList);
  2360. }
  2361. return resList;
  2362. }
  2363. private List<List<String>> reportTypeDDYZRXZ(String ddyFxbId) throws MINBusinessException, ParseException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  2364. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  2365. // 报告信息
  2366. DwReportInf reportInf = db.selectByPrimaryKey(DwReportInfMapper.class, ddyFxbId);
  2367. String range = reportInf.getDayInterval();
  2368. String beginTime = range.split("-")[0];
  2369. String endTime = range.split("-")[1];
  2370. List<List<String>> resList = new ArrayList<List<String>>();
  2371. List<String> titleList = new ArrayList<String>();
  2372. titleList.add("序号");
  2373. titleList.add("县公司名称");
  2374. titleList.add("用户管理单位名称");
  2375. titleList.add("线路名称");
  2376. titleList.add("台区ID");
  2377. titleList.add("变压器名称");
  2378. titleList.add("用户编号");
  2379. titleList.add("低电压时长");
  2380. titleList.add("累计天数");
  2381. titleList.add("低电压主要原因(点选)");
  2382. titleList.add("具体原因");
  2383. titleList.add("治理措施");
  2384. titleList.add("是否治理(点选)");
  2385. titleList.add("治理完成时间");
  2386. titleList.add("是否消除");
  2387. int count = DateUtil.diffDate(beginTime, endTime);
  2388. //日期集合
  2389. List<String> dateList = new ArrayList<String>();
  2390. for(int i=0;i<=count;i++){
  2391. String beginDate = DateUtil.dateAddDay(endTime,-i);
  2392. dateList.add(beginDate);
  2393. beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6);
  2394. titleList.add(beginDate+"低电压时长");
  2395. }
  2396. resList.add(titleList);
  2397. DwDdyFxbExample ddyFxbExample = new DwDdyFxbExample();
  2398. ddyFxbExample.createCriteria().andReportIdEqualTo(ddyFxbId).andZrxzEqualTo("是");
  2399. ddyFxbExample.setOrderByClause("DDF_ID");
  2400. List<DwDdyFxb> ddyFxbList = db.selectByExample(DwDdyFxbMapper.class, ddyFxbExample);
  2401. List<String> fxbIdList = CommonUtil.getIdFromList(ddyFxbList, "id");
  2402. if (fxbIdList.size() == 0) {
  2403. return resList;
  2404. }
  2405. DwDdyFxbDetailExample ddyFxbDetailExample = new DwDdyFxbDetailExample();
  2406. ddyFxbDetailExample.createCriteria().andFxbIdIn(fxbIdList);
  2407. ddyFxbDetailExample.setOrderByClause("DDFD_FXB_ID");
  2408. List<DwDdyFxbDetail> detailList = db.selectByExample(DwDdyFxbDetailMapper.class, ddyFxbDetailExample);
  2409. for (DwDdyFxb ddyFxb : ddyFxbList) {
  2410. List<String> childList = Arrays.asList(new String[titleList.size()]);
  2411. childList.set(0, ddyFxb.getXh());
  2412. childList.set(1, ddyFxb.getXgsmc());
  2413. childList.set(2, ddyFxb.getYhgldwmc());
  2414. childList.set(3, ddyFxb.getXlmc());
  2415. childList.set(4, ddyFxb.getTqid());
  2416. childList.set(5, ddyFxb.getByqmc());
  2417. childList.set(6, ddyFxb.getYhbh());
  2418. childList.set(7, String.valueOf(ddyFxb.getDdysj()));
  2419. childList.set(8, String.valueOf(ddyFxb.getLjts()));
  2420. childList.set(9, ddyFxb.getDdyzymc());
  2421. childList.set(10, ddyFxb.getJtyy());
  2422. childList.set(11, ddyFxb.getZlcs());
  2423. childList.set(12, ddyFxb.getSfzl());
  2424. childList.set(13, ddyFxb.getZlwcsj());
  2425. childList.set(14, ddyFxb.getSfxc());
  2426. String fxbId = ddyFxb.getId();
  2427. for (int i = 0; i < detailList.size(); i++) {
  2428. // 分析表id一致
  2429. if (fxbId.equals(detailList.get(i).getFxbId())) {
  2430. String sjrq = detailList.get(i).getDate();
  2431. int index = DateUtil.diffDate(sjrq, endTime);
  2432. childList.set(15 + index, detailList.get(i).getSc());
  2433. detailList.remove(i);
  2434. i --;
  2435. } else {
  2436. break;
  2437. }
  2438. }
  2439. resList.add(childList);
  2440. }
  2441. return resList;
  2442. }
  2443. /**
  2444. * 低电压周报
  2445. * @param ddyFxbId
  2446. * @param range
  2447. * @return
  2448. * @throws MINBusinessException
  2449. * @throws ParseException
  2450. * @throws NoSuchMethodException
  2451. * @throws SecurityException
  2452. * @throws IllegalAccessException
  2453. * @throws IllegalArgumentException
  2454. * @throws InvocationTargetException
  2455. */
  2456. public Map<String, Object> reportTypeDDYZB(String ddyFxbId, String range) throws MINBusinessException, ParseException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
  2457. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  2458. PubAppparExample appparExample = new PubAppparExample();
  2459. appparExample.createCriteria().andCodeEqualTo("tqtd_num_" + systemCode);
  2460. appparExample.setOrderByClause("APR_TYPE");
  2461. List<PubApppar> appparList = db.selectByExample(PubAppparMapper.class, appparExample);
  2462. Map<String, Object> resMap = new HashMap<String, Object>();
  2463. // 本周开始时间和结束时间
  2464. range = range.replaceAll(" ", "");
  2465. String weekBegin = range.split("-")[0];
  2466. String weekEnd = range.split("-")[1];
  2467. DwReportInf reportInf = db.selectByPrimaryKey(DwReportInfMapper.class, ddyFxbId);
  2468. // 当月开始时间和结束时间
  2469. String monthBegin = reportInf.getDayInterval().split("-")[0];
  2470. // 全年开始时间和结束时间
  2471. String yearBegin = CommonUtil.subtract(monthBegin.substring(0, 4), "1") + "1226";
  2472. //
  2473. if ("12".equals(monthBegin.substring(4,6))) {
  2474. yearBegin = monthBegin.substring(0, 4) + "1226";
  2475. }
  2476. // 全年累计考核数
  2477. Map<String, Object> param = new HashMap<String, Object>();
  2478. param.put("reportId", ddyFxbId);
  2479. param.put("beginTime", yearBegin);
  2480. param.put("endTime", weekEnd);
  2481. List<Map<String, String>> yearTotal = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(param, new MINRowBounds());
  2482. // 本月之前全年考核数
  2483. param.put("beginTime", yearBegin);
  2484. param.put("endTime", DateUtil.dateAddDay(monthBegin, -1));
  2485. List<Map<String, String>> yearTotalNoBenyue = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(param, new MINRowBounds());
  2486. // 本周之前全年考核数
  2487. param.put("beginTime", yearBegin);
  2488. param.put("endTime", DateUtil.dateAddDay(weekBegin, -1));
  2489. List<Map<String, String>> yearTotalNoBenzhou = db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(param, new MINRowBounds());
  2490. // 本月新增考核数
  2491. int benyueXZ = yearTotal.size() - yearTotalNoBenyue.size();
  2492. // 本周新增考核数
  2493. int benzhouXZ = yearTotal.size() - yearTotalNoBenzhou.size();
  2494. // 本周之前用户编号集合
  2495. List<String> bzzqYhbhList = CommonUtil.getIdFromList(yearTotalNoBenzhou, "yhid");
  2496. // 本周新增明细
  2497. List<Map<String, String>> bzzxmxDescList = new ArrayList<Map<String, String>>();
  2498. for (int i = 0; i < yearTotal.size(); i ++) {
  2499. String yhbh = yearTotal.get(i).get("yhid");
  2500. String xgsmc = yearTotal.get(i).get("xgsmc");
  2501. // 本周新增数据
  2502. if (!bzzqYhbhList.contains(yhbh)) {
  2503. boolean isContain = false;
  2504. for (int j = 0; j < bzzxmxDescList.size(); j ++) {
  2505. String name = bzzxmxDescList.get(j).get("name");
  2506. String num = bzzxmxDescList.get(j).get("num");
  2507. // 数量+1
  2508. if (xgsmc.contains(name)) {
  2509. isContain = true;
  2510. bzzxmxDescList.get(j).put("num", CommonUtil.add(num, "1"));
  2511. }
  2512. }
  2513. if (!isContain) {
  2514. Map<String, String> descMap = new HashMap<String, String>();
  2515. boolean flag = false;
  2516. for (PubApppar apppar : appparList) {
  2517. if (xgsmc.contains(apppar.getValue())) {
  2518. descMap.put("name", apppar.getValue());
  2519. flag = true;
  2520. continue;
  2521. }
  2522. }
  2523. if (!flag) {
  2524. continue;
  2525. }
  2526. descMap.put("num", "1");
  2527. bzzxmxDescList.add(descMap);
  2528. }
  2529. }
  2530. }
  2531. String danweiDesc = "";
  2532. for (int j = 0; j < bzzxmxDescList.size(); j ++) {
  2533. String name = bzzxmxDescList.get(j).get("name");
  2534. String num = bzzxmxDescList.get(j).get("num");
  2535. if (j == bzzxmxDescList.size() - 1) {
  2536. danweiDesc += (name + num + "户。");
  2537. } else {
  2538. danweiDesc += (name + num + "户,");
  2539. }
  2540. }
  2541. // 正在治理用户数
  2542. String zzliNum = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbZZZL(param).get("num");
  2543. // 治理后再次出现
  2544. List<Map<String, String>> zlhzccxList = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbZlhzccx(param);
  2545. String zlhzccxNum = "0";
  2546. String zlhzccxDesc = "";
  2547. for (int i = 0; i < zlhzccxList.size(); i ++) {
  2548. Map<String, String> map = zlhzccxList.get(i);
  2549. String area = map.get("area").substring(0, 2);
  2550. String num = map.get("num");
  2551. boolean flag = false;
  2552. for (PubApppar apppar : appparList) {
  2553. if (apppar.getValue().equals(area)) {
  2554. flag = true;
  2555. continue;
  2556. }
  2557. }
  2558. if (!flag) {
  2559. continue;
  2560. }
  2561. zlhzccxNum = CommonUtil.add(zlhzccxNum, num);
  2562. // 最后一条数据
  2563. if (i == zlhzccxList.size() - 1) {
  2564. zlhzccxDesc += area + num + "户;";
  2565. } else {
  2566. zlhzccxDesc += area + num + "户,";
  2567. }
  2568. }
  2569. // 未开始治理用户区域分组
  2570. List<Map<String, String>> wkszlList = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbWKSZL(param);
  2571. String wkszlNum = "0";
  2572. String wkszlDesc = "";
  2573. for (int i = 0; i < wkszlList.size(); i ++) {
  2574. Map<String, String> map = wkszlList.get(i);
  2575. String area = map.get("area").substring(0, 2);
  2576. String num = map.get("num");
  2577. boolean flag = false;
  2578. for (PubApppar apppar : appparList) {
  2579. if (apppar.getValue().equals(area)) {
  2580. flag = true;
  2581. continue;
  2582. }
  2583. }
  2584. if (!flag) {
  2585. continue;
  2586. }
  2587. wkszlNum = CommonUtil.add(wkszlNum, num);
  2588. // 最后一条数据
  2589. if (i == wkszlList.size() - 1) {
  2590. wkszlDesc += area + num + "户。";
  2591. } else {
  2592. wkszlDesc += area + num + "户,";
  2593. }
  2594. }
  2595. String wzlwcNum = CommonUtil.add(CommonUtil.add(zzliNum, zlhzccxNum), wkszlNum);
  2596. String desc = "本月新增受考核低电压客户${benyueXZ}户,其中本周新增${benzhouXZ}户,按单位分${danweiDesc}截至目前未治理完成${wzlwcNum}户,${zzliNum}户正在治理;${zlhzccxNum}户治理后再次出现,${zlhzccxDesc}${wkszlNum}户未开始治理,${wkszlDesc}";
  2597. Map<String, String> reportMap = new HashMap<String, String>();
  2598. reportMap.put("benyueXZ", String.valueOf(benyueXZ));
  2599. reportMap.put("benzhouXZ", String.valueOf(benzhouXZ));
  2600. reportMap.put("danweiDesc", danweiDesc);
  2601. reportMap.put("wzlwcNum", wzlwcNum);
  2602. reportMap.put("zzliNum", zzliNum);
  2603. reportMap.put("zlhzccxNum", zlhzccxNum);
  2604. reportMap.put("zlhzccxDesc", zlhzccxDesc);
  2605. reportMap.put("wkszlNum", wkszlNum);
  2606. reportMap.put("wkszlDesc", wkszlDesc);
  2607. resMap.put("reportMap", reportMap);
  2608. resMap.put("descStr", desc);
  2609. List<List<String>> excelList = new ArrayList<List<String>>();
  2610. // 表头
  2611. List<String> titleList = new ArrayList<String>();
  2612. titleList.add("分类\\单位");
  2613. for (PubApppar apppar : appparList) {
  2614. titleList.add(apppar.getValue());
  2615. }
  2616. titleList.add("合计");
  2617. excelList.add(titleList);
  2618. // 合计栏
  2619. List<String> child0 = new ArrayList<String>();
  2620. child0.add("管理客户总数");
  2621. String total = "0";
  2622. for (PubApppar apppar : appparList) {
  2623. child0.add(customerMap.get(apppar.getValue()));
  2624. total = CommonUtil.add(total, customerMap.get(apppar.getValue()));
  2625. }
  2626. child0.add(total);
  2627. excelList.add(child0);
  2628. // 本月之前用户编号集合
  2629. List<String> byzqYhbhList = CommonUtil.getIdFromList(yearTotalNoBenyue, "yhid");
  2630. // 本月新增明细
  2631. List<Map<String, String>> byzxmxDescList = new ArrayList<Map<String, String>>();
  2632. for (PubApppar apppar : appparList) {
  2633. Map<String, String> byzxTaian = new HashMap<String, String>();
  2634. byzxTaian.put("name", apppar.getValue());
  2635. byzxTaian.put("num", "0");
  2636. byzxmxDescList.add(byzxTaian);
  2637. }
  2638. for (int i = 0; i < yearTotal.size(); i ++) {
  2639. String yhbh = yearTotal.get(i).get("yhid");
  2640. String xgsmc = yearTotal.get(i).get("xgsmc");
  2641. // 本月新增数据
  2642. if (!byzqYhbhList.contains(yhbh)) {
  2643. for (int j = 0; j < byzxmxDescList.size(); j ++) {
  2644. String name = byzxmxDescList.get(j).get("name");
  2645. String num = byzxmxDescList.get(j).get("num");
  2646. // 数量+1
  2647. if (xgsmc.contains(name)) {
  2648. byzxmxDescList.get(j).put("num", CommonUtil.add(num, "1"));
  2649. }
  2650. }
  2651. }
  2652. }
  2653. List<String> child1 = new ArrayList<String>();
  2654. child1.add("本月新增受考核客户数");
  2655. for (int j = 0; j < byzxmxDescList.size(); j ++) {
  2656. String num = byzxmxDescList.get(j).get("num");
  2657. child1.add(num);
  2658. }
  2659. child1.add(String.valueOf(benyueXZ));
  2660. excelList.add(child1);
  2661. // 全年数据
  2662. List<Map<String, String>> quanianDetailList = new ArrayList<Map<String, String>>();
  2663. for (PubApppar apppar : appparList) {
  2664. Map<String, String> quannianTaian = new HashMap<String, String>();
  2665. quannianTaian.put("name", apppar.getValue());
  2666. quannianTaian.put("num", "0");
  2667. quanianDetailList.add(quannianTaian);
  2668. }
  2669. for (int i = 0; i < yearTotal.size(); i ++) {
  2670. String xgsmc = yearTotal.get(i).get("xgsmc");
  2671. for (int j = 0; j < quanianDetailList.size(); j ++) {
  2672. String name = quanianDetailList.get(j).get("name");
  2673. String num = quanianDetailList.get(j).get("num");
  2674. // 数量+1
  2675. if (xgsmc.contains(name)) {
  2676. quanianDetailList.get(j).put("num", CommonUtil.add(num, "1"));
  2677. }
  2678. }
  2679. }
  2680. List<String> child2 = new ArrayList<String>();
  2681. child2.add("全年累计受考核客户数");
  2682. for (int j = 0; j < quanianDetailList.size(); j ++) {
  2683. String num = quanianDetailList.get(j).get("num");
  2684. child2.add(num);
  2685. }
  2686. child2.add(String.valueOf(yearTotal.size()));
  2687. excelList.add(child2);
  2688. resMap.put("excelList", excelList);
  2689. return resMap;
  2690. }
  2691. /**
  2692. * 低电压超30天
  2693. * @param ddyFxbId
  2694. * @return
  2695. * @throws MINBusinessException
  2696. * @throws ParseException
  2697. * @throws NoSuchMethodException
  2698. * @throws SecurityException
  2699. * @throws IllegalAccessException
  2700. * @throws IllegalArgumentException
  2701. * @throws InvocationTargetException
  2702. */
  2703. private List<List<String>> reportTypeDDY30T(String ddyFxbId) throws MINBusinessException, ParseException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  2704. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  2705. // 报告信息
  2706. DwReportInf reportInf = db.selectByPrimaryKey(DwReportInfMapper.class, ddyFxbId);
  2707. String range = reportInf.getDayInterval();
  2708. String beginTime = range.split("-")[0];
  2709. String endTime = range.split("-")[1];
  2710. List<List<String>> resList = new ArrayList<List<String>>();
  2711. List<String> titleList = new ArrayList<String>();
  2712. titleList.add("序号");
  2713. titleList.add("县公司名称");
  2714. titleList.add("用户管理单位名称");
  2715. titleList.add("线路名称");
  2716. titleList.add("台区ID");
  2717. titleList.add("变压器名称");
  2718. titleList.add("用户编号");
  2719. titleList.add("低电压时长");
  2720. titleList.add("累计天数");
  2721. titleList.add("低电压主要原因(点选)");
  2722. titleList.add("具体原因");
  2723. titleList.add("治理措施");
  2724. titleList.add("是否治理(点选)");
  2725. titleList.add("治理完成时间");
  2726. titleList.add("是否消除");
  2727. titleList.add("全年累计天数");
  2728. int count = DateUtil.diffDate(beginTime, endTime);
  2729. //日期集合
  2730. List<String> dateList = new ArrayList<String>();
  2731. for(int i=0;i<=count;i++){
  2732. String beginDate = DateUtil.dateAddDay(endTime,-i);
  2733. dateList.add(beginDate);
  2734. beginDate = beginDate.substring(4,6)+"/"+beginDate.substring(6);
  2735. titleList.add(beginDate+"低电压时长");
  2736. }
  2737. resList.add(titleList);
  2738. DwDdyFxbExample ddyFxbExample = new DwDdyFxbExample();
  2739. ddyFxbExample.createCriteria().andReportIdEqualTo(ddyFxbId).andSfxcNotEqualTo("是").andDdysjGreaterThanOrEqualTo(48).andQnljtsGreaterThan(30);
  2740. ddyFxbExample.setOrderByClause("DDF_ID");
  2741. List<DwDdyFxb> ddyFxbList = db.selectByExample(DwDdyFxbMapper.class, ddyFxbExample);
  2742. List<String> fxbIdList = CommonUtil.getIdFromList(ddyFxbList, "id");
  2743. if (fxbIdList.size() == 0) {
  2744. return resList;
  2745. }
  2746. DwDdyFxbDetailExample ddyFxbDetailExample = new DwDdyFxbDetailExample();
  2747. ddyFxbDetailExample.createCriteria().andFxbIdIn(fxbIdList);
  2748. ddyFxbDetailExample.setOrderByClause("DDFD_FXB_ID");
  2749. List<DwDdyFxbDetail> detailList = db.selectByExample(DwDdyFxbDetailMapper.class, ddyFxbDetailExample);
  2750. for (DwDdyFxb ddyFxb : ddyFxbList) {
  2751. List<String> childList = Arrays.asList(new String[titleList.size()]);
  2752. childList.set(0, ddyFxb.getXh());
  2753. childList.set(1, ddyFxb.getXgsmc());
  2754. childList.set(2, ddyFxb.getYhgldwmc());
  2755. childList.set(3, ddyFxb.getXlmc());
  2756. childList.set(4, ddyFxb.getTqid());
  2757. childList.set(5, ddyFxb.getByqmc());
  2758. childList.set(6, ddyFxb.getYhbh());
  2759. childList.set(7, String.valueOf(ddyFxb.getDdysj()));
  2760. childList.set(8, String.valueOf(ddyFxb.getLjts()));
  2761. childList.set(9, ddyFxb.getDdyzymc());
  2762. childList.set(10, ddyFxb.getJtyy());
  2763. childList.set(11, ddyFxb.getZlcs());
  2764. childList.set(12, ddyFxb.getSfzl());
  2765. childList.set(13, ddyFxb.getZlwcsj());
  2766. childList.set(14, ddyFxb.getSfxc());
  2767. childList.set(15, String.valueOf(ddyFxb.getQnljts()));
  2768. String fxbId = ddyFxb.getId();
  2769. for (int i = 0; i < detailList.size(); i++) {
  2770. // 分析表id一致
  2771. if (fxbId.equals(detailList.get(i).getFxbId())) {
  2772. String sjrq = detailList.get(i).getDate();
  2773. int index = DateUtil.diffDate(sjrq, endTime);
  2774. childList.set(16 + index, detailList.get(i).getSc());
  2775. detailList.remove(i);
  2776. i --;
  2777. } else {
  2778. break;
  2779. }
  2780. }
  2781. resList.add(childList);
  2782. }
  2783. return resList;
  2784. }
  2785. /**
  2786. *
  2787. * @param ddyFxbId
  2788. * @return
  2789. * @throws MINBusinessException
  2790. * @throws ParseException
  2791. * @throws NoSuchMethodException
  2792. * @throws SecurityException
  2793. * @throws IllegalAccessException
  2794. * @throws IllegalArgumentException
  2795. * @throws InvocationTargetException
  2796. */
  2797. private Map<String, Object> reportTypeDDYYB(String ddyFxbId) throws MINBusinessException, ParseException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  2798. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  2799. PubAppparExample appparExample = new PubAppparExample();
  2800. appparExample.createCriteria().andCodeEqualTo("tqtd_num_" + systemCode);
  2801. appparExample.setOrderByClause("APR_TYPE");
  2802. List<PubApppar> appparList = db.selectByExample(PubAppparMapper.class, appparExample);
  2803. Map<String, Object> resMap = new HashMap<String, Object>();
  2804. // 报告信息
  2805. DwReportInf reportInf = db.selectByPrimaryKey(DwReportInfMapper.class, ddyFxbId);
  2806. String range = reportInf.getDayInterval();
  2807. String beginTime = range.split("-")[0];
  2808. String endTime = range.split("-")[1];
  2809. // 报表月份
  2810. String month = Integer.parseInt(endTime.substring(4, 6)) + "月";
  2811. String year = Integer.parseInt(beginTime.substring(0, 4)) + "年";
  2812. Map<String, Object> param = new HashMap<String, Object>();
  2813. param.put("reportId", ddyFxbId);
  2814. List<Map<String, String>> areaNum = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbByXgsmc(param);
  2815. // 公司低电压用户数
  2816. String totalNum = "0";
  2817. String totalNumDetailDesc = "";
  2818. for (int i = 0; i < areaNum.size(); i ++) {
  2819. Map<String, String> map = areaNum.get(i);
  2820. String area = map.get("area");
  2821. String num = map.get("num");
  2822. boolean flag = false;
  2823. for (PubApppar apppar : appparList) {
  2824. if (area.contains(apppar.getValue())) {
  2825. area = apppar.getValue();
  2826. flag = true;
  2827. }
  2828. }
  2829. if (!flag) {
  2830. continue;
  2831. }
  2832. if (i == areaNum.size() - 1) {
  2833. totalNumDetailDesc += area+ num + "户,占所辖营业户数" + CommonUtil.multiply(CommonUtil.divide(num, customerMap.get(area), 4), "100", 2)+ "%。";
  2834. } else {
  2835. totalNumDetailDesc += area + num + "户,占所辖营业户数" + CommonUtil.multiply(CommonUtil.divide(num, customerMap.get(area), 4), "100", 2)+ "%;";
  2836. }
  2837. totalNum = CommonUtil.add(totalNum, num);
  2838. }
  2839. String heji = "0";
  2840. for (PubApppar apppar : appparList) {
  2841. heji = CommonUtil.add(heji, customerMap.get(apppar.getValue()));
  2842. }
  2843. // 公司低电压用户数占比
  2844. String totalNumZb = CommonUtil.multiply(CommonUtil.divide(totalNum, heji, 4), "100", 2);
  2845. // 去年同期数
  2846. param.put("beginTime", DateUtil.dateAddYear(beginTime, -1));
  2847. param.put("endTime", DateUtil.dateAddYear(endTime, -1));
  2848. MINRowBounds rows = new MINRowBounds();
  2849. rows.setSeparateSql(true);
  2850. db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYZLFXB(param, rows);
  2851. String qunianTotalNum = String.valueOf(rows.getCount());
  2852. // 上月数
  2853. param.put("beginTime", DateUtil.dateAddMonth(beginTime, -1));
  2854. param.put("endTime", DateUtil.dateAddMonth(endTime, -1));
  2855. db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYZLFXB(param, rows);
  2856. String shangyueTotalNum = String.valueOf(rows.getCount());
  2857. String totalNumHB = "";
  2858. if (CommonUtil.compare(shangyueTotalNum, "0") != 0) {
  2859. if (CommonUtil.compare(totalNum, shangyueTotalNum) == 1) {
  2860. totalNumHB = "环比增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalNum, shangyueTotalNum), shangyueTotalNum, 4), "100", 2) + "%,";
  2861. } else {
  2862. totalNumHB = "环比减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(shangyueTotalNum, totalNum), shangyueTotalNum, 4), "100", 2) + "%,";
  2863. }
  2864. }
  2865. String totalNumTB = "";
  2866. if (CommonUtil.compare(qunianTotalNum, "0") != 0) {
  2867. if (CommonUtil.compare(totalNum, qunianTotalNum) == 1) {
  2868. totalNumTB = "同比增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(totalNum, qunianTotalNum), qunianTotalNum, 4), "100", 2) + "%,";
  2869. } else {
  2870. totalNumTB = "同比减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(qunianTotalNum, totalNum), qunianTotalNum, 4), "100", 2) + "%,";
  2871. }
  2872. }
  2873. // 受考核数
  2874. List<Map<String, String>> kaoheArea = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbByXgsmcAndZl(param);
  2875. // 公司低电压用户数
  2876. String kaoheNum = "0";
  2877. String kaoheAreaDesc = "";
  2878. Map<String, String> keheAreaMap = new HashMap<String, String>();
  2879. for (int i = 0; i < kaoheArea.size(); i ++) {
  2880. Map<String, String> map = kaoheArea.get(i);
  2881. String area = map.get("area");
  2882. String num = map.get("num");
  2883. keheAreaMap.put(area, num);
  2884. boolean flag = false;
  2885. for (PubApppar apppar : appparList) {
  2886. if (area.contains(apppar.getValue())) {
  2887. area = apppar.getValue();
  2888. flag = true;
  2889. }
  2890. }
  2891. if (!flag) {
  2892. continue;
  2893. }
  2894. if (i == areaNum.size() - 1) {
  2895. kaoheAreaDesc += area + num + "户,占比" + CommonUtil.multiply(CommonUtil.divide(num, customerMap.get(area), 4), "100", 4)+ "%。";
  2896. } else {
  2897. kaoheAreaDesc += area + num + "户,占比" + CommonUtil.multiply(CommonUtil.divide(num, customerMap.get(area), 4), "100", 4)+ "%;";
  2898. }
  2899. kaoheNum = CommonUtil.add(kaoheNum, num);
  2900. }
  2901. // 受考核数占比
  2902. String kaoheNumZb = CommonUtil.multiply(CommonUtil.divide(kaoheNum, heji, 4), "100", 4);
  2903. // 去年受考核数
  2904. param.put("beginTime", DateUtil.dateAddYear(beginTime, -1));
  2905. param.put("endTime", DateUtil.dateAddYear(endTime, -1));
  2906. db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(param, rows);
  2907. String kaoheNumQunian = String.valueOf(rows.getCount());
  2908. // 上月受考核数
  2909. param.put("beginTime", DateUtil.dateAddMonth(beginTime, -1));
  2910. param.put("endTime", DateUtil.dateAddMonth(endTime, -1));
  2911. db.getMybatisMapper(ReportServiceMapper.class).selectDetail03ByDDYRB(param, rows);
  2912. String kaoheNumShangyue = String.valueOf(rows.getCount());
  2913. String kaoheNumHB = "";
  2914. if (CommonUtil.compare(kaoheNumShangyue, "0") != 0) {
  2915. if (CommonUtil.compare(kaoheNum, kaoheNumShangyue) == 1) {
  2916. kaoheNumHB = "环比增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(kaoheNum, kaoheNumShangyue), kaoheNumShangyue, 4), "100", 2) + "%,";
  2917. } else {
  2918. kaoheNumHB = "环比减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(kaoheNumShangyue, kaoheNum), kaoheNumShangyue, 4), "100", 2) + "%,";
  2919. }
  2920. }
  2921. String kaoheNumTB = "";
  2922. if (CommonUtil.compare(kaoheNumQunian, "0") != 0) {
  2923. if (CommonUtil.compare(kaoheNum, kaoheNumQunian) == 1) {
  2924. kaoheNumTB = "同比增加" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(kaoheNum, kaoheNumQunian), kaoheNumQunian, 4), "100", 2) + "%。";
  2925. } else {
  2926. kaoheNumTB = "同比减少" + CommonUtil.multiply(CommonUtil.divide(CommonUtil.subtract(kaoheNumQunian, kaoheNum), kaoheNumQunian, 4), "100", 2) + "%。";
  2927. }
  2928. }
  2929. // 治理完成数
  2930. param.put("zlwc", "是");
  2931. List<Map<String, String>> kaoheZlArea = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbByXgsmcAndZl(param);
  2932. String kaoheZlNum = "0";
  2933. String kaoheZlDesc = "";
  2934. for (int i = 0; i < kaoheZlArea.size(); i ++) {
  2935. Map<String, String> map = kaoheZlArea.get(i);
  2936. String area = map.get("area").substring(0, 2);
  2937. String num = map.get("num");
  2938. String wanchenglv = CommonUtil.multiply(CommonUtil.divide(num, keheAreaMap.get(area), 4), "100", 2);
  2939. if (i == areaNum.size() - 1) {
  2940. kaoheZlDesc += area + "治理完成" + num + "户,治理完成率" + wanchenglv+ "%。";
  2941. } else {
  2942. kaoheZlDesc += area + "治理完成" + num + "户,治理完成率" + wanchenglv+ "%;";
  2943. }
  2944. kaoheZlNum = CommonUtil.add(kaoheZlNum, num);
  2945. }
  2946. String kaoheZlNumLv = "0";
  2947. if (CommonUtil.compare(kaoheNum, "0") != 0) {
  2948. kaoheZlNumLv = CommonUtil.multiply(CommonUtil.divide(kaoheZlNum, kaoheNum, 4), "100", 2);
  2949. }
  2950. String desc1 = "<p>1.用户低电压情况</p>" +
  2951. "<p>(1)总体情况(说明:用户电压低于198伏且持续超过1小时为低电压)</p>" +
  2952. "<p>${month},公司低电压用户${totalNum}户,占公司总营业户数${totalNumZb}%,${totalNumHB}${totalNumTB}其中,${totalNumDetailDesc}</p>" +
  2953. "<p>(2)受考核情况(说明:月度累计低电压时长超过48小时低电压用户为受考核用户)</p>" +
  2954. "<p>6月,公司低电压受考核客户${kaoheNum}户,占公司总营业户数${kaoheNumZb},${kaoheNumHB}${kaoheNumTB}其中,${kaoheAreaDesc}治理完成${kaoheZlNum}户,治理完成率${kaoheZlNumLv}%,其中${kaoheZlDesc} ${year}${month}各单位低电压受考核及预警情况统计见表3-1。</p>" +
  2955. "<p>图表3-1 ${year}${month}各单位低电压受考核及预警情况统计</p>";
  2956. List<List<String>> tableArray1 = new ArrayList<List<String>>();
  2957. List<String> tableArray1Title = new ArrayList<String>();
  2958. tableArray1Title.add("单位");
  2959. tableArray1Title.add("总户数");
  2960. tableArray1Title.add("预警户数(≥15h)");
  2961. tableArray1Title.add("预警治理完成");
  2962. tableArray1Title.add("预警治理完成率");
  2963. tableArray1Title.add("受考核低电压户数");
  2964. tableArray1Title.add("考核低电压客户占比");
  2965. tableArray1Title.add("考核治理完成户数");
  2966. tableArray1Title.add("考核治理完成率");
  2967. tableArray1.add(tableArray1Title);
  2968. // 预警数据
  2969. List<Map<String, String>> yujingNum = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbByXgsmcYuJing(param);
  2970. List<String> areaList = new ArrayList<String>();
  2971. for (PubApppar apppar : appparList) {
  2972. areaList.add(apppar.getValue());
  2973. List<String> tableArrayJingqu = new ArrayList<String>();
  2974. tableArrayJingqu.add(apppar.getValue());
  2975. tableArrayJingqu.add(customerMap.get(apppar.getValue()));
  2976. tableArrayJingqu.add("0");
  2977. tableArrayJingqu.add("0");
  2978. tableArrayJingqu.add("0");
  2979. tableArrayJingqu.add("0");
  2980. tableArrayJingqu.add("0");
  2981. tableArrayJingqu.add("0");
  2982. tableArrayJingqu.add("0");
  2983. tableArray1.add(tableArrayJingqu);
  2984. }
  2985. List<String> tableArrayHeji = new ArrayList<String>();
  2986. tableArrayHeji.add("合计");
  2987. tableArrayHeji.add(heji);
  2988. tableArrayHeji.add("0");
  2989. tableArrayHeji.add("0");
  2990. tableArrayHeji.add("0");
  2991. tableArrayHeji.add("0");
  2992. tableArrayHeji.add("0");
  2993. tableArrayHeji.add("0");
  2994. tableArrayHeji.add("0");
  2995. tableArray1.add(tableArrayHeji);
  2996. // 预警合计
  2997. String yujingHeji = "0";
  2998. String yujingHejiZl = "0";
  2999. // 预警情况
  3000. for (Map<String, String> map : yujingNum) {
  3001. String area = map.get("area");
  3002. String num = map.get("num");
  3003. String sfxc = map.get("sfxc");
  3004. boolean flag = false;
  3005. for (PubApppar apppar : appparList) {
  3006. if (area.contains(apppar.getValue())) {
  3007. area = apppar.getValue();
  3008. flag = true;
  3009. }
  3010. }
  3011. if (!flag) {
  3012. continue;
  3013. }
  3014. int index = areaList.indexOf(area);
  3015. List<String> tableArrayChild = tableArray1.get(index + 1);
  3016. tableArrayChild.set(2, CommonUtil.add(tableArrayChild.get(2), num));
  3017. if ("是".equals(sfxc)) {
  3018. tableArrayChild.set(3, num);
  3019. }
  3020. if ("是".equals(sfxc)) {
  3021. yujingHejiZl = CommonUtil.add(yujingHejiZl, num);
  3022. }
  3023. yujingHeji = CommonUtil.add(yujingHeji, num);
  3024. }
  3025. tableArrayHeji.set(2, yujingHeji);
  3026. tableArrayHeji.set(3, yujingHejiZl);
  3027. // 考核合计
  3028. String kaoheHeji = "0";
  3029. // 考核情况
  3030. for(Map.Entry<String, String> entry : keheAreaMap.entrySet()){
  3031. String area = entry.getKey();
  3032. String num = entry.getValue();
  3033. boolean flag = false;
  3034. for (PubApppar apppar : appparList) {
  3035. if (area.contains(apppar.getValue())) {
  3036. area = apppar.getValue();
  3037. flag = true;
  3038. }
  3039. }
  3040. if (!flag) {
  3041. continue;
  3042. }
  3043. int index = areaList.indexOf(area);
  3044. List<String> tableArrayChild = tableArray1.get(index + 1);
  3045. tableArrayChild.set(5, num);
  3046. tableArrayChild.set(6, CommonUtil.multiply(CommonUtil.divide(num, customerMap.get(area), 6), "100", 4) + "%");
  3047. kaoheHeji = CommonUtil.add(kaoheHeji, num);
  3048. }
  3049. tableArrayHeji.set(5, kaoheHeji);
  3050. tableArrayHeji.set(6, CommonUtil.multiply(CommonUtil.divide(kaoheHeji, heji, 6), "100", 4) + "%");
  3051. // 考核治理合计
  3052. String kaoheHejiZl = "0";
  3053. // 考核治理情况
  3054. for (int i = 0; i < kaoheZlArea.size(); i ++) {
  3055. Map<String, String> map = kaoheZlArea.get(i);
  3056. String area = map.get("area").substring(0, 2);
  3057. String num = map.get("num");
  3058. boolean flag = false;
  3059. for (PubApppar apppar : appparList) {
  3060. if (area.contains(apppar.getValue())) {
  3061. area = apppar.getValue();
  3062. flag = true;
  3063. }
  3064. }
  3065. if (!flag) {
  3066. continue;
  3067. }
  3068. int index = areaList.indexOf(area);
  3069. List<String> tableArrayChild = tableArray1.get(index + 1);
  3070. tableArrayChild.set(7, num);
  3071. String kaohe = tableArrayChild.get(5);
  3072. if (CommonUtil.compare(kaohe, "0") != 0) {
  3073. tableArrayChild.set(8, CommonUtil.multiply(CommonUtil.divide(num, kaohe, 4), "100", 2) + "%");
  3074. }
  3075. kaoheHejiZl = CommonUtil.add(kaoheHejiZl, num);
  3076. }
  3077. tableArrayHeji.set(7, kaoheHejiZl);
  3078. if (CommonUtil.compare(kaoheHeji, "0") != 0) {
  3079. tableArrayHeji.set(8, CommonUtil.multiply(CommonUtil.divide(kaoheHejiZl, kaoheHeji, 4), "100", 2) + "%");
  3080. }
  3081. for (int i = 1; i < tableArray1.size(); i ++) {
  3082. List<String> childList = tableArray1.get(i);
  3083. String yujingzl = childList.get(3);
  3084. String yujing = childList.get(2);
  3085. if (CommonUtil.compare(yujingzl, "0") != 0 && CommonUtil.compare(yujing, "0") != 0) {
  3086. childList.set(4, CommonUtil.multiply(CommonUtil.divide(yujingzl, yujing, 4), "100", 2) + "%");
  3087. }
  3088. }
  3089. List<String> tubiaoData1Array1 = new ArrayList<String>();
  3090. List<String> tubiaoData1Array2 = new ArrayList<String>();
  3091. List<String> tubiaoData1Array3 = new ArrayList<String>();
  3092. for (int i = 1; i < tableArray1.size() - 1; i ++) {
  3093. tubiaoData1Array1.add(tableArray1.get(i).get(7));
  3094. tubiaoData1Array2.add(tableArray1.get(i).get(8));
  3095. tubiaoData1Array3.add(tableArray1.get(i).get(6));
  3096. }
  3097. List<Map<String, Object>> tubiaoData1 = new ArrayList<Map<String, Object>>();
  3098. Map<String, Object> zlwcMap = new HashMap<String, Object>();
  3099. zlwcMap.put("name", "治理完成户数");
  3100. zlwcMap.put("type", "bar");
  3101. zlwcMap.put("yAxisIndex", 0);
  3102. zlwcMap.put("data", tubiaoData1Array1);
  3103. tubiaoData1.add(zlwcMap);
  3104. Map<String, Object> zlwcLvMap = new HashMap<String, Object>();
  3105. zlwcLvMap.put("name", "治理完成率");
  3106. zlwcLvMap.put("type", "bar");
  3107. zlwcLvMap.put("yAxisIndex", 1);
  3108. zlwcLvMap.put("data", tubiaoData1Array2);
  3109. tubiaoData1.add(zlwcLvMap);
  3110. Map<String, Object> kaoheZbMap = new HashMap<String, Object>();
  3111. kaoheZbMap.put("name", "考核低压占比");
  3112. kaoheZbMap.put("type", "line");
  3113. kaoheZbMap.put("yAxisIndex", 2);
  3114. kaoheZbMap.put("data", tubiaoData1Array3);
  3115. tubiaoData1.add(kaoheZbMap);
  3116. String desc2 = "<p>(3)重复发生情况</p>" +
  3117. "<p>${month},公司重复低电压15天以上用户${ljtsGt15}户,${ljtsGt15Desc}${year}${month}公司低电压重复发生15天以上用户明细见表3-2。</p>" +
  3118. "<p>表3-2 ${year}${month}公司低电压重复发生15天以上明细</p>";
  3119. // 重复停电15天以上数据
  3120. DwDdyFxbExample ddyFxbExample = new DwDdyFxbExample();
  3121. ddyFxbExample.createCriteria().andReportIdEqualTo(ddyFxbId).andLjtsGreaterThan(15);
  3122. ddyFxbExample.setOrderByClause("DDF_XGSMC");
  3123. List<DwDdyFxb> ddyFxb15List = db.selectByExample(DwDdyFxbMapper.class, ddyFxbExample);
  3124. int numFlag = 0;
  3125. String ljtsGt15Desc = "";
  3126. String ljtsGt15 = String.valueOf(ddyFxb15List.size());
  3127. for (int i = 0; i < ddyFxb15List.size(); i ++) {
  3128. DwDdyFxb dq = ddyFxb15List.get(i);
  3129. // 不是最后一条数据
  3130. if (i != ddyFxb15List.size() - 1) {
  3131. // 获取下一条数据
  3132. DwDdyFxb next = ddyFxb15List.get(i + 1);
  3133. // 县公司名称相同
  3134. if (dq.getXgsmc().equals(next.getXgsmc())) {
  3135. numFlag ++;
  3136. } else {
  3137. ljtsGt15Desc += dq.getXgsmc().substring(0, 2) + numFlag + "户,";
  3138. numFlag = 0;
  3139. }
  3140. } else {
  3141. ljtsGt15Desc += dq.getXgsmc().substring(0, 2) + numFlag + "户。";
  3142. }
  3143. }
  3144. List<List<String>> tableArray2 = new ArrayList<List<String>>();
  3145. List<String> tableArray2Title = new ArrayList<String>();
  3146. tableArray2Title.add("序号");
  3147. tableArray2Title.add("单位");
  3148. tableArray2Title.add("用户管理单位");
  3149. tableArray2Title.add("台区ID");
  3150. tableArray2Title.add("变压器名称");
  3151. tableArray2Title.add("用户编号");
  3152. tableArray2Title.add("低电压时长");
  3153. tableArray2Title.add("累计天数");
  3154. tableArray2.add(tableArray2Title);
  3155. for (int i = 0; i < ddyFxb15List.size(); i ++) {
  3156. DwDdyFxb dq = ddyFxb15List.get(i);
  3157. List<String> child = new ArrayList<String>();
  3158. child.add(i + 1 + "");
  3159. child.add(dq.getXgsmc().substring(0, 2));
  3160. child.add(dq.getYhgldwmc());
  3161. child.add(dq.getTqid());
  3162. child.add(dq.getByqmc());
  3163. child.add(dq.getYhbh());
  3164. child.add(dq.getDdysj() + "");
  3165. child.add(dq.getLjts() + "");
  3166. tableArray2.add(child);
  3167. }
  3168. String desc3 = "<p>(4)涉及台区情况</p>" +
  3169. "<p>${month},公司低电压涉及台区数量${tqIdTotalNum}个,其中存在受考核用户的台区${tqIdKaoheTotalNum}个,占比${tqIdKaoheTotalNumZB}%,其中${tqIdKaoheDesc}</p>" +
  3170. "<p>表3-3 ${year}${month}公司低电压考核用户涉及台区情况统计</p>";
  3171. List<List<String>> tableArray3 = new ArrayList<List<String>>();
  3172. List<String> tableArray3Title = new ArrayList<String>();
  3173. tableArray3Title.add("单位");
  3174. tableArray3Title.add("管理的台区数");
  3175. tableArray3Title.add("存在低电压用户的台区数量");
  3176. tableArray3Title.add("存在受考核用户的台区");
  3177. tableArray3Title.add("受考核用户涉及台区占比");
  3178. tableArray3.add(tableArray3Title);
  3179. String guanxiaHeji = "0";
  3180. for (PubApppar apppar : appparList) {
  3181. guanxiaHeji = CommonUtil.add(guanxiaHeji, guanxiaTaiqu.get(apppar.getValue()));
  3182. List<String> tableArray3Gaoxin = new ArrayList<String>();
  3183. tableArray3Gaoxin.add(apppar.getValue());
  3184. tableArray3Gaoxin.add(guanxiaTaiqu.get(apppar.getValue()));
  3185. tableArray3.add(tableArray3Gaoxin);
  3186. }
  3187. List<String> tableArray3Heji = new ArrayList<String>();
  3188. tableArray3Heji.add("合计");
  3189. tableArray3Heji.add(guanxiaHeji);
  3190. tableArray3.add(tableArray3Heji);
  3191. List<Map<String, String>> tqIdList = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbByTQID(param);
  3192. String tqIdTotalNum = "0";
  3193. for (Map<String, String> map : tqIdList) {
  3194. String area = map.get("area");
  3195. String num = map.get("num");
  3196. boolean flag = false;
  3197. for (PubApppar apppar : appparList) {
  3198. if (area.contains(apppar.getValue())) {
  3199. area = apppar.getValue();
  3200. flag = true;
  3201. }
  3202. }
  3203. if (!flag) {
  3204. continue;
  3205. }
  3206. int index = areaList.indexOf(area);
  3207. List<String> tableArray3Child = tableArray3.get(index + 1);
  3208. tableArray3Child.add(num);
  3209. tqIdTotalNum = CommonUtil.add(tqIdTotalNum, num);
  3210. }
  3211. tableArray3Heji.add(tqIdTotalNum);
  3212. // 没有数据的补零
  3213. for (List<String> child : tableArray3) {
  3214. if (child.size() < 3) {
  3215. child.add("0");
  3216. }
  3217. }
  3218. param.put("taiQuKaohe", "1");
  3219. String tqIdKaoheTotalNum = "0";
  3220. String tqIdKaoheDesc = "";
  3221. List<Map<String, String>> tqIdKaoheList = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbByTQID(param);
  3222. for (int i = 0; i < tqIdKaoheList.size(); i ++) {
  3223. Map<String, String> map = tqIdKaoheList.get(i);
  3224. String area = map.get("area");
  3225. String num = map.get("num");
  3226. boolean flag = false;
  3227. for (PubApppar apppar : appparList) {
  3228. if (area.contains(apppar.getValue())) {
  3229. area = apppar.getValue();
  3230. flag = true;
  3231. }
  3232. }
  3233. if (!flag) {
  3234. continue;
  3235. }
  3236. String guanxiaNum = null;
  3237. String zb = null;
  3238. int index = areaList.indexOf(area);
  3239. List<String> tableArray3Child = tableArray3.get(index + 1);
  3240. tableArray3Child.add(num);
  3241. guanxiaNum = tableArray3Child.get(1);
  3242. zb = CommonUtil.multiply(CommonUtil.divide(num, guanxiaNum, 4), "100", 2);
  3243. tableArray3Child.add(zb + "%");
  3244. tqIdKaoheTotalNum = CommonUtil.add(tqIdKaoheTotalNum, num);
  3245. if (i != tqIdKaoheList.size() - 1) {
  3246. tqIdKaoheDesc += area + num + "个,占比" + zb + "%,";
  3247. } else {
  3248. tqIdKaoheDesc += area + num + "个,占比" + zb + "%。";
  3249. }
  3250. }
  3251. // 占比
  3252. String tqIdKaoheTotalNumZB = CommonUtil.multiply(CommonUtil.divide(tqIdKaoheTotalNum, guanxiaHeji, 4), "100", 2);
  3253. tableArray3Heji.add(tqIdKaoheTotalNum);
  3254. tableArray3Heji.add(tqIdKaoheTotalNumZB);
  3255. // 没有数据的补零
  3256. for (List<String> child : tableArray3) {
  3257. if (child.size() < 5) {
  3258. child.add("0");
  3259. child.add("0.00%");
  3260. }
  3261. }
  3262. String desc4 = "<p>(5)原因分析</p>" +
  3263. "<p>按受考核低电压用户原因分:${ddyzymcDesc}${year}${month}公司受考核低电压用户原因分类情况统计见图表3-4。</p>" +
  3264. "<p>图表3-4 ${year}${month}公司受考核低电压用户原因分类情况统计</p>";
  3265. List<List<String>> tableArray4 = new ArrayList<List<String>>();
  3266. List<String> tableArray4Title = new ArrayList<String>();
  3267. tableArray4Title.add("原因分类");
  3268. tableArray4Title.add("受考核低电压户数");
  3269. tableArray4Title.add("原因占比");
  3270. tableArray4.add(tableArray4Title);
  3271. String ddyzymcNumTotal = "0";
  3272. List<Map<String, String>> ddyzymcList = db.getMybatisMapper(ReportServiceMapper.class).selectDdyFxbByDDYZYMC(param);
  3273. for (Map<String, String> map : ddyzymcList) {
  3274. List<String> child = new ArrayList<String>();
  3275. child.add(map.get("ddyzymc"));
  3276. child.add(map.get("num"));
  3277. tableArray4.add(child);
  3278. ddyzymcNumTotal = CommonUtil.add(ddyzymcNumTotal, map.get("num"));
  3279. }
  3280. String ddyzymcDesc = "";
  3281. List<Map<String, Object>> tubiaoData2Data = new ArrayList<Map<String, Object>>(); // 饼状图数据
  3282. for (int i = 1; i < tableArray4.size(); i ++) {
  3283. List<String> child = tableArray4.get(i);
  3284. String zb = CommonUtil.multiply(CommonUtil.divide(child.get(1), ddyzymcNumTotal, 4), "100", 2) + "%";
  3285. child.add(zb);
  3286. if (i != tableArray4.size() - 1) {
  3287. ddyzymcDesc += child.get(0) + child.get(1) + "户,占比" + zb + ";";
  3288. } else {
  3289. ddyzymcDesc += child.get(0) + child.get(1) + "户,占比" + zb + "。";
  3290. }
  3291. // 饼状图数据
  3292. Map<String, Object> dataMap = new HashMap<String, Object>();
  3293. dataMap.put("name", child.get(0));
  3294. dataMap.put("value", Integer.parseInt(child.get(1)));
  3295. tubiaoData2Data.add(dataMap);
  3296. }
  3297. List<Map<String, Object>> tubiaoData2 = new ArrayList<Map<String, Object>>();
  3298. Map<String, Object> tubiaoData2Map = new HashMap<String, Object>();
  3299. tubiaoData2Map.put("name", "受考核低电压用户原因");
  3300. tubiaoData2Map.put("type", "pie");
  3301. tubiaoData2Map.put("radius", "55%");
  3302. List<String> centerList = new ArrayList<String>();
  3303. centerList.add("50%");
  3304. centerList.add("60%");
  3305. tubiaoData2Map.put("center", centerList);
  3306. tubiaoData2Map.put("data", tubiaoData2Data);
  3307. Map<String, Object> emphasisMap = new HashMap<String, Object>();
  3308. Map<String, Object> itemStyle = new HashMap<String, Object>();
  3309. itemStyle.put("shadowBlur", 10);
  3310. itemStyle.put("shadowOffsetX", 0);
  3311. itemStyle.put("shadowColor", "rgba(1, 1, 0, 0.5)");
  3312. emphasisMap.put("itemStyle", itemStyle);
  3313. tubiaoData2Map.put("emphasisMap", emphasisMap);
  3314. tubiaoData2.add(tubiaoData2Map);
  3315. Map<String, Object> dataMap = new HashMap<String, Object>();
  3316. dataMap.put("month", month);
  3317. dataMap.put("year", year);
  3318. dataMap.put("totalNum", totalNum);
  3319. dataMap.put("totalNumZb", totalNumZb);
  3320. dataMap.put("totalNumTB", totalNumTB);
  3321. dataMap.put("totalNumHB", totalNumHB);
  3322. dataMap.put("totalNumDetailDesc", totalNumDetailDesc);
  3323. dataMap.put("kaoheNum", kaoheNum);
  3324. dataMap.put("kaoheNumZb", kaoheNumZb);
  3325. dataMap.put("kaoheNumHB", kaoheNumHB);
  3326. dataMap.put("kaoheNumTB", kaoheNumTB);
  3327. dataMap.put("kaoheAreaDesc", kaoheAreaDesc);
  3328. dataMap.put("kaoheZlNum", kaoheZlNum);
  3329. dataMap.put("kaoheZlNumLv", kaoheZlNumLv);
  3330. dataMap.put("kaoheZlDesc", kaoheZlDesc);
  3331. dataMap.put("ljtsGt15Desc", ljtsGt15Desc);
  3332. dataMap.put("ljtsGt15", ljtsGt15);
  3333. dataMap.put("ddyzymcDesc", ddyzymcDesc);
  3334. dataMap.put("tqIdTotalNum", tqIdTotalNum);
  3335. dataMap.put("tqIdKaoheTotalNum", tqIdKaoheTotalNum);
  3336. dataMap.put("tqIdKaoheTotalNumZB", tqIdKaoheTotalNumZB);
  3337. dataMap.put("tqIdKaoheDesc", tqIdKaoheDesc);
  3338. resMap.put("dataMap", dataMap);
  3339. resMap.put("desc1", desc1);
  3340. resMap.put("tableArray1", tableArray1);
  3341. resMap.put("tubiaoData1", tubiaoData1);
  3342. resMap.put("areaList", areaList);
  3343. resMap.put("desc2", desc2);
  3344. resMap.put("desc3", desc3);
  3345. resMap.put("desc4", desc4);
  3346. resMap.put("tableArray2", tableArray2);
  3347. resMap.put("tableArray3", tableArray3);
  3348. resMap.put("tableArray4", tableArray4);
  3349. resMap.put("tubiaoData2", tubiaoData2);
  3350. return resMap;
  3351. }
  3352. /**
  3353. * 计停非计停日报
  3354. * @param range
  3355. * @param timeRange
  3356. * @return
  3357. * @throws MINBusinessException
  3358. * @throws ParseException
  3359. */
  3360. public Map<String, Object> reportTypeJTFJTRB(String range, String timeRange) throws MINBusinessException, ParseException{
  3361. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  3362. Map<String, Object> param = new HashMap<String, Object>();
  3363. String beginTime = null;
  3364. String endTime = null;
  3365. range = range.replaceAll(" ", "");
  3366. String[] rangeArray = range.split("-");
  3367. timeRange = timeRange.replaceAll(" ", "");
  3368. if (CommonUtil.isEmpty(timeRange)) {
  3369. beginTime = rangeArray[0] + "000000";
  3370. endTime = rangeArray[1] + "235959";
  3371. } else {
  3372. String[] timeRangeArray = timeRange.split("-");
  3373. beginTime = rangeArray[0] + timeRangeArray[0];
  3374. endTime = rangeArray[1] + timeRangeArray[1];
  3375. }
  3376. param.put("beginTime", beginTime);
  3377. param.put("endTime", endTime);
  3378. /** --计停--start--*/
  3379. //主线
  3380. DwFileDetail07Example example = new DwFileDetail07Example();
  3381. example.createCriteria().andTimeBetween(beginTime, endTime).andTypeEqualTo("计停").andTriptypeLike("主线%");
  3382. List<DwFileDetail07> listZx = db.selectByExample(DwFileDetail07Mapper.class, example);
  3383. //支线
  3384. DwFileDetail07Example example1 = new DwFileDetail07Example();
  3385. example1.createCriteria().andTimeBetween(beginTime, endTime).andTypeEqualTo("计停").andTriptypeLike("支线%");
  3386. List<DwFileDetail07> listZx1 = db.selectByExample(DwFileDetail07Mapper.class, example1);
  3387. String descStr ="<P>国网泰安供电公司供电服务指挥中心(配网调控中心)</P><p>工单日报("+beginTime.substring(0, 4)+"年"+beginTime.substring(4, 6)+"月"+beginTime.substring(6, 8)+"日)</p><p>一、当日直供区配网运行情况</p>";
  3388. descStr = descStr+ "<p>当日配网10kV主线计划停电"+listZx.size()+"项,支线计划停电"+listZx1.size()+"项,启动送电 项。因线路计停造成停电高压用户 户,停电低压用户 户。</p>";
  3389. descStr = descStr +"<table border=\"1\">";
  3390. if(listZx.size()>0 || listZx1.size()>0){
  3391. descStr = descStr +"<tr><th>设备名称</th><th>管理单位</th><th>停电高压用户数</th><th>停电居民用户数</th><th>执行情况</th></tr>";
  3392. }
  3393. for(int i=0;i<listZx.size();i++){
  3394. descStr = descStr+"<tr><td>"+listZx.get(i).getDevice()+"</td><td>"+listZx.get(i).getUnit()+"</td><td></td><td></td><td></td></tr>";
  3395. }
  3396. for(int i=0;i<listZx1.size();i++){
  3397. descStr = descStr+"<tr><td>"+listZx1.get(i).getDevice()+"</td><td>"+listZx1.get(i).getUnit()+"</td><td></td><td></td><td></td></tr>";
  3398. }
  3399. descStr = descStr +"</table>";
  3400. //非计停
  3401. //主线
  3402. DwFileDetail07Example fjtExample = new DwFileDetail07Example();
  3403. fjtExample.createCriteria().andTimeBetween(beginTime, endTime).andTypeEqualTo("非计停").andTriptypeLike("主线%");
  3404. List<DwFileDetail07> listFjtZx = db.selectByExample(DwFileDetail07Mapper.class, fjtExample);
  3405. //支线
  3406. DwFileDetail07Example fjtExample1 = new DwFileDetail07Example();
  3407. fjtExample1.createCriteria().andTimeBetween(beginTime, endTime).andTypeEqualTo("非计停").andTriptypeLike("支线%");
  3408. List<DwFileDetail07> listFjtZx1 = db.selectByExample(DwFileDetail07Mapper.class, fjtExample1);
  3409. descStr = descStr +"<p>当日配网10kV主线非计停"+listFjtZx.size()+"项,支线非计停"+listFjtZx1.size()+"项,因线路非计停造成停电高压用户 户,停电低压用户 户。</p>";
  3410. descStr = descStr +"<table border='1'>";
  3411. if(listFjtZx.size()>0 || listFjtZx1.size()>0){
  3412. descStr = descStr +"<tr><th>设备名称</th><th>管理单位</th><th>停电高压用户数</th><th>停电居民用户数</th><th>备注</th></tr>";
  3413. }
  3414. for(int i=0;i<listFjtZx.size();i++){
  3415. descStr = descStr+"<tr><td>"+listFjtZx.get(i).getDevice()+"</td><td>"+listFjtZx.get(i).getUnit()+"</td><td></td><td></td><td></td></tr>";
  3416. }
  3417. for(int i=0;i<listFjtZx1.size();i++){
  3418. descStr = descStr+"<tr><td>"+listFjtZx1.get(i).getDevice()+"</td><td>"+listFjtZx1.get(i).getUnit()+"</td><td></td><td></td><td></td></tr>";
  3419. }
  3420. descStr = descStr +"</table>";
  3421. //跳闸
  3422. //主线
  3423. DwFileDetail07Example tzExample = new DwFileDetail07Example();
  3424. tzExample.createCriteria().andTimeBetween(beginTime, endTime).andTypeEqualTo("跳闸").andTriptypeLike("主线%");
  3425. List<DwFileDetail07> listTzZx = db.selectByExample(DwFileDetail07Mapper.class, tzExample);
  3426. //支线
  3427. DwFileDetail07Example tzExample1 = new DwFileDetail07Example();
  3428. tzExample1.createCriteria().andTimeBetween(beginTime, endTime).andTypeEqualTo("跳闸").andTriptypeLike("支线%");
  3429. List<DwFileDetail07> listTzZx1 = db.selectByExample(DwFileDetail07Mapper.class, tzExample1);
  3430. descStr = descStr +"<p>当日配网发生10kV主线跳闸"+listTzZx.size()+"条次,支线跳闸"+listTzZx1.size()+"条次。因线路跳闸无重合闸造成停电高压用户 户,停电低压用户 户。</p>";
  3431. descStr = descStr +"<table border=\"1\">";
  3432. if(listTzZx.size()>0 || listTzZx1.size()>0){
  3433. descStr = descStr +"<tr><th>设备名称</th><th>管理单位</th><th>故障原因</th><th>重合情况</th><th>停电高压用户数</th><th>停电居民用户数</th></tr>";
  3434. }
  3435. for(int i=0;i<listTzZx.size();i++){
  3436. descStr = descStr+"<tr><td>"+listTzZx.get(i).getDevice()+"</td><td>"+listTzZx.get(i).getUnit()+"</td><td>"+listTzZx.get(i).getCause()+"</td><td>"+listTzZx.get(i).getChzdzqk()+"</td><td></td><td></td></tr>";
  3437. }
  3438. for(int i=0;i<listTzZx1.size();i++){
  3439. descStr = descStr+"<tr><td>"+listTzZx1.get(i).getDevice()+"</td><td>"+listTzZx1.get(i).getUnit()+"</td><td>"+listTzZx1.get(i).getCause()+"</td><td>"+listTzZx1.get(i).getChzdzqk()+"</td><td></td><td></td></tr>";
  3440. }
  3441. descStr = descStr +"</table>";
  3442. Map<String, Object> resMap = new HashMap<String, Object>();
  3443. // resMap.put("dataMap", dataMap);
  3444. resMap.put("descStr", descStr);
  3445. return resMap;
  3446. }
  3447. public List<List<String>> reportTypeZDDTYBBII(String firstFileId, MINHttpServletRequestContext request) throws MINBusinessException, InvalidFormatException, IOException{
  3448. IMINDataBaseService db = Service.lookup(IMINDataBaseService.class);
  3449. List<List<String>> resList = new ArrayList<List<String>>();
  3450. List<String> titleList = new ArrayList<String>();
  3451. titleList.add("ID");
  3452. titleList.add("TNAME");
  3453. titleList.add("SRC");
  3454. resList.add(titleList);
  3455. // 选择文件
  3456. DwReportData reportData = db.selectByPrimaryKey(DwReportDataMapper.class, firstFileId);
  3457. String jsonArrayStr = reportData.getData();
  3458. JSONArray array = JSONArray.fromObject(jsonArrayStr);
  3459. // 对比文件
  3460. // 获取文件
  3461. FileItem fileItem = request.getFile("file");
  3462. String fileName = fileItem.getName();
  3463. if (!fileName.endsWith(".xlsx") && !fileName.endsWith(".xls")) {
  3464. throw new MINBusinessException("文件格式错误!");
  3465. }
  3466. String[] titleKey = new String[]{"gdbh","gdlx","gdfqsj","hjmc", "bdzmc","xlmc","gddw","zrdw","zrbz","ywmc","zdsbscmc","jhtysj","xttysj"};
  3467. List<Map<String, String>> secondList = FilesUtil.readExecleasy(fileItem, titleKey, 1);
  3468. for (Object first : array) {
  3469. List<String> child = (List<String>)first;
  3470. String tname = child.get(0);
  3471. String id = child.get(1);
  3472. boolean flag = false;
  3473. for (Map<String, String> second : secondList) {
  3474. String zdsbscmc = second.get("zdsbscmc");
  3475. if (tname.equals(zdsbscmc)) {
  3476. flag = true;
  3477. break;
  3478. }
  3479. }
  3480. if (!flag) {
  3481. List<String> resChildList = new ArrayList<String>();
  3482. resChildList.add(id);
  3483. resChildList.add(tname);
  3484. resChildList.add("投运");
  3485. resList.add(resChildList);
  3486. }
  3487. }
  3488. return resList;
  3489. }
  3490. public String getSystemCode() {
  3491. return systemCode;
  3492. }
  3493. }