AnnualPlanCompController.java 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190
  1. package com.zhcs.dt.controller.information.annualPlan;
  2. import java.math.BigDecimal;
  3. import java.math.BigInteger;
  4. import java.text.DecimalFormat;
  5. import java.text.SimpleDateFormat;
  6. import java.util.ArrayList;
  7. import java.util.Date;
  8. import java.util.HashMap;
  9. import java.util.LinkedHashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. import java.util.Map.Entry;
  13. import javax.annotation.Resource;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16. import net.sf.json.JSONArray;
  17. import net.sf.json.JSONObject;
  18. import sun.security.krb5.internal.PAData;
  19. import org.springframework.stereotype.Controller;
  20. import org.springframework.ui.Model;
  21. import org.springframework.web.bind.annotation.RequestMapping;
  22. import org.springframework.web.bind.annotation.ResponseBody;
  23. import org.springframework.web.servlet.ModelAndView;
  24. import com.zhcs.dt.controller.base.BaseController;
  25. import com.zhcs.dt.entity.Page;
  26. import com.zhcs.dt.service.information.annualPlan.AnnualPlanCompManager;
  27. import com.zhcs.dt.service.information.annualPlan.AnnualPlanManager;
  28. import com.zhcs.dt.service.information.annualPlan.DownloadZip;
  29. import com.zhcs.dt.service.information.annualPlan.MultExcelUtils;
  30. import com.zhcs.dt.service.information.annualPlan.TotalAmountUtil;
  31. import com.zhcs.dt.util.AppUtil;
  32. import com.zhcs.dt.util.Jurisdiction;
  33. import com.zhcs.dt.util.PageData;
  34. import com.zhcs.dt.util.Tools;
  35. /**
  36. * 类名称:年度养护计划
  37. * 创建人:Yuanf
  38. * 创建时间:2018-11-12
  39. */
  40. @Controller
  41. @RequestMapping(value="/annualPlanComp")
  42. class AnnualPlanCompController extends BaseController {
  43. private static final HashMap<String, ArrayList<PageData>> ArrayList = null;
  44. String menuUrl = "annualPlanComp/list.do"; //菜单地址(权限用)
  45. @Resource(name="annualPlanCompService")
  46. private AnnualPlanCompManager annualPlanCompService;
  47. @Resource(name="annualPlanService")
  48. private AnnualPlanManager annualPlanService;
  49. List<String> newTables = new ArrayList<String>();
  50. /**列表
  51. * @param page
  52. * @throws Exception
  53. */
  54. @RequestMapping(value="/list")
  55. public ModelAndView list(Page page) throws Exception{
  56. logBefore(logger, Jurisdiction.getUsername()+"养护计划完成情况");
  57. //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
  58. ModelAndView mv = this.getModelAndView();
  59. PageData pd = new PageData();
  60. //pd.put("USERNAME", Jurisdiction.getUsername().toString());
  61. //通过username获取对应的公司和路段,控股集团管理员只可以看到状态为“待审批”和“已完成”的计划,路公司管理员和路段管理员可以看到本公司所有计划,admin没有权限控制
  62. PageData userInfo = annualPlanService.getCompanyAndRoad(Jurisdiction.getUsername().toString()); //通过username获取公司和路段
  63. //通过ROLE_ID获取角色
  64. String roleName = annualPlanService.getRoleName(userInfo.get("ROLE_ID").toString());
  65. pd = this.getPageData();
  66. /*String keywords = pd.getString("keywords"); //关键词检索条件
  67. if(null != keywords && !"".equals(keywords)){
  68. pd.put("keywords", keywords.trim());
  69. }*/
  70. List<PageData> varList = new ArrayList<PageData>();
  71. if(!"控股集团管理员".equalsIgnoreCase(roleName)){
  72. pd.put("COMPANY", userInfo.get("COMPANY"));
  73. varList = annualPlanCompService.getPlanCompList(pd); //列出年度计划列表
  74. mv.setViewName("information/annualPlan/annualPlanComp/annualPlanComp_list");
  75. mv.addObject("varList", varList);
  76. }else{
  77. List<String> yearList = new ArrayList<String>();
  78. varList = annualPlanService.getKGCompYearList(pd); //列出年度完成计划列表
  79. yearList = getYearList(varList);
  80. mv.setViewName("information/annualPlan/annualPlanComp/annualPlanComp_kg_list");
  81. mv.addObject("varList", yearList);
  82. }
  83. mv.addObject("pd", pd);
  84. mv.addObject("userInfo", userInfo);
  85. mv.addObject("roleName", roleName);
  86. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  87. return mv;
  88. }
  89. private List<String> getYearList(List<PageData> varList){
  90. List<String> yearList = new ArrayList<String>();
  91. for(PageData pd : varList){
  92. if(pd.get("STATUS") != null && pd.get("YEAR") != null){
  93. if("审批通过".equalsIgnoreCase(pd.get("STATUS").toString()) && !yearList.contains(pd.get("YEAR").toString())){
  94. yearList.add(pd.get("YEAR").toString());
  95. }
  96. }
  97. }
  98. return yearList;
  99. }
  100. /**查询所选汇总表
  101. * @param
  102. * @throws Exception
  103. */
  104. @RequestMapping(value="/showSumTable")
  105. public ModelAndView showSumTable(Model model)throws Exception{
  106. ModelAndView mv = this.getModelAndView();
  107. PageData pd = new PageData();
  108. pd = this.getPageData();
  109. pd.put("table", "oa_department_"+pd.getString("YEAR").toString());
  110. mv.setViewName("information/annualPlan/annualSumTableComp/"+pd.get("type"));
  111. List<PageData> varList = annualPlanCompService.getdata(pd);
  112. mv.addObject("varList", varList);
  113. mv.addObject("pd", pd);
  114. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  115. return mv;
  116. }
  117. /**查询所选汇总表
  118. * @param
  119. * @throws Exception
  120. */
  121. @RequestMapping(value="/showDailySumTable")
  122. public ModelAndView showDailySumTable(Model model)throws Exception{
  123. ModelAndView mv = this.getModelAndView();
  124. PageData pd = new PageData();
  125. pd = this.getPageData();
  126. mv.setViewName("information/annualPlan/annualSumTableComp/"+pd.get("type"));
  127. pd.put("type", "highway_daily_plan_statable");
  128. //动态获取oa_department
  129. pd.put("table", "oa_department_"+pd.getString("YEAR").toString());
  130. List<PageData> varList = annualPlanCompService.getDailyCompData(pd);
  131. for(PageData tpd : varList){
  132. List<Object> list = new ArrayList<Object>();
  133. list.add(tpd.get("CLEAN_COST"));
  134. list.add(tpd.get("PATROL_COST"));
  135. list.add(tpd.get("SUBGRADE_COST"));
  136. list.add(tpd.get("PAVEMENT_COST"));
  137. list.add(tpd.get("BRIDGE_COST"));
  138. list.add(tpd.get("CULVERT_COST"));
  139. list.add(tpd.get("TUNNEL_COST"));
  140. list.add(tpd.get("GREEN_COST"));
  141. list.add(tpd.get("SAFE_COST"));
  142. list.add(tpd.get("LINE_COST"));
  143. list.add(tpd.get("CAR_COST"));
  144. list.add(tpd.get("EMERGENCY_COST"));
  145. BigDecimal totalCost = new BigDecimal("0");
  146. totalCost = addNums(list);
  147. if(totalCost != BigDecimal.ZERO){
  148. //小数位格式化
  149. BigDecimal ten = new BigDecimal("10.00");
  150. if(totalCost.compareTo(ten)<1){
  151. totalCost = totalCost.setScale(1, BigDecimal.ROUND_HALF_UP);
  152. }
  153. else{
  154. totalCost = totalCost.setScale(0, BigDecimal.ROUND_HALF_UP);
  155. }
  156. tpd.put("TOTAL_COST", totalCost);
  157. }
  158. }
  159. mv.addObject("varList", varList);
  160. mv.addObject("pd", pd);
  161. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  162. return mv;
  163. }
  164. private BigDecimal addNums(List<Object> list){
  165. BigDecimal result = new BigDecimal("0");
  166. for(Object obj : list){
  167. if(obj != null){
  168. BigDecimal d = new BigDecimal("0");
  169. d = getBigDecimal(obj);
  170. result = result.add(d);
  171. }
  172. }
  173. return result;
  174. }
  175. /**
  176. * Object转BigDecimal类型
  177. *
  178. * @param value 要转的object类型
  179. * @return 转成的BigDecimal类型数据
  180. */
  181. public static BigDecimal getBigDecimal(Object value) {
  182. BigDecimal ret = null;
  183. if (value != null) {
  184. if (value instanceof BigDecimal) {
  185. ret = (BigDecimal) value;
  186. } else if (value instanceof String) {
  187. ret = new BigDecimal((String) value);
  188. } else if (value instanceof BigInteger) {
  189. ret = new BigDecimal((BigInteger) value);
  190. } else if (value instanceof Number) {
  191. ret = new BigDecimal(((Number) value).doubleValue());
  192. } else {
  193. throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigDecimal.");
  194. }
  195. }
  196. return ret;
  197. }
  198. /**查询所选明细表
  199. * @param
  200. * @throws Exception
  201. */
  202. @RequestMapping(value="/showDettTable")
  203. public ModelAndView showDettTable(Model model)throws Exception{
  204. ModelAndView mv = this.getModelAndView();
  205. PageData pd = new PageData();
  206. pd = this.getPageData();
  207. pd.put("table", "oa_department_"+pd.get("YEAR").toString());
  208. mv.setViewName("information/annualPlan/annualSumTableComp/"+pd.get("type"));
  209. List<PageData> dettList = annualPlanCompService.getDettData(pd);
  210. if(dettList ==null || dettList.equals(" ") || dettList.isEmpty() ) {
  211. mv.addObject("dettList", "");
  212. }else if("highway_reserve_fees_sumtable_view".equalsIgnoreCase(pd.get("type").toString())){
  213. List<PageData> feeList = annualPlanCompService.getTotalFee(pd);
  214. dettList = getReserveFee(dettList, feeList);
  215. mv.addObject("dettList", dettList);
  216. }else {
  217. LinkedHashMap<String, LinkedHashMap<String, ArrayList<PageData>>> varMap = new LinkedHashMap<String, LinkedHashMap<String, ArrayList<PageData>>>();
  218. Double sumPlanCost = (double) 0;
  219. Double sumActualCost = (double) 0;
  220. String prevCompanyName = "";
  221. LinkedHashMap<String, ArrayList<PageData>> xjroadMap = new LinkedHashMap<String, ArrayList<PageData>>();
  222. for(PageData tpd : dettList){
  223. String company = tpd.get("COMPANY").toString();
  224. String road = tpd.get("ROAD").toString();
  225. if(varMap.containsKey(company)){
  226. LinkedHashMap<String, ArrayList<PageData>> roadMap = varMap.get(company);
  227. if(roadMap != null && roadMap.containsKey(road)){
  228. if(tpd.get("PLAN_COST")!=null){
  229. double plan = Double.parseDouble(tpd.get("PLAN_COST").toString());
  230. plan = formatNum(plan);
  231. sumPlanCost += plan;
  232. }
  233. if(tpd.get("ACTUAL_COST")!=null){
  234. double actual = Double.parseDouble(tpd.get("ACTUAL_COST").toString());
  235. actual = formatNum(actual);
  236. sumActualCost += actual;
  237. }
  238. ArrayList<PageData> pList = roadMap.get(road);
  239. pList.add(tpd);
  240. }else{
  241. if(tpd.get("PLAN_COST")!=null){
  242. double planc = Double.parseDouble(tpd.get("PLAN_COST").toString());
  243. planc = formatNum(planc);
  244. sumPlanCost += planc;
  245. }
  246. if(tpd.get("ACTUAL_COST")!=null){
  247. double actualc = Double.parseDouble(tpd.get("ACTUAL_COST").toString());
  248. actualc = formatNum(actualc);
  249. sumActualCost += actualc;
  250. }
  251. ArrayList<PageData> npList = new ArrayList<PageData>();
  252. npList.add(tpd);
  253. roadMap.put(road, npList);
  254. }
  255. xjroadMap = roadMap;
  256. prevCompanyName = company;
  257. }else{
  258. if(varMap.size() > 0){
  259. ArrayList<PageData> xjList = new ArrayList<PageData>();
  260. PageData xjPd = new PageData();
  261. xjPd.put("COMPANY", prevCompanyName);
  262. xjPd.put("ROAD", "小计");
  263. xjPd.put("PROJECT_NAME", "");
  264. xjPd.put("PROJECT_TYPE", "");
  265. xjPd.put("SCALE", "");
  266. xjPd.put("PLAN_QUANTITIES", "");
  267. xjPd.put("PLAN_COST", sumPlanCost);
  268. xjPd.put("ACTUAL_QUANTITIES", "");
  269. xjPd.put("REMARKS", "");
  270. xjPd.put("ACTUAL_COST", sumActualCost);
  271. xjList.add(xjPd);
  272. xjroadMap=varMap.get(prevCompanyName);
  273. xjroadMap.put("小计", xjList);
  274. varMap.put(prevCompanyName, xjroadMap);
  275. }
  276. ArrayList<PageData> mpList = new ArrayList<PageData>();
  277. LinkedHashMap<String, ArrayList<PageData>> mroadMap = new LinkedHashMap<String, ArrayList<PageData>>();
  278. mpList.add(tpd);
  279. mroadMap.put(road, mpList);
  280. varMap.put(company, mroadMap);
  281. prevCompanyName = company;
  282. sumPlanCost = (double) 0;
  283. sumActualCost = (double) 0;
  284. if(tpd.get("PLAN_COST")!=null){
  285. double planco = Double.parseDouble(tpd.get("PLAN_COST").toString());
  286. planco = formatNum(planco);
  287. sumPlanCost += planco;
  288. }
  289. if(tpd.get("ACTUAL_COST")!=null){
  290. double actualco = Double.parseDouble(tpd.get("ACTUAL_COST").toString());
  291. actualco = formatNum(actualco);
  292. sumActualCost += actualco;
  293. }
  294. }
  295. }
  296. PageData lastxjPd = new PageData();
  297. lastxjPd.put("COMPANY", prevCompanyName);
  298. lastxjPd.put("ROAD", "小计");
  299. lastxjPd.put("PROJECT_NAME", "");
  300. lastxjPd.put("PROJECT_TYPE", "");
  301. lastxjPd.put("SCALE", "");
  302. lastxjPd.put("PLAN_QUANTITIES", "");
  303. lastxjPd.put("PLAN_COST", sumPlanCost);
  304. lastxjPd.put("ACTUAL_QUANTITIES", "");
  305. lastxjPd.put("REMARKS", "");
  306. lastxjPd.put("ACTUAL_COST", sumActualCost);
  307. List<PageData> dettListNew = new ArrayList<PageData>();
  308. for(Entry<String, LinkedHashMap<String, java.util.ArrayList<PageData>>> centry : varMap.entrySet()){
  309. HashMap<String, java.util.ArrayList<PageData>> roadMap = centry.getValue();
  310. for(Entry<String, java.util.ArrayList<PageData>> rentry : roadMap.entrySet()){
  311. ArrayList<PageData> projectList = rentry.getValue();
  312. for(PageData ppd : projectList){
  313. dettListNew.add(ppd);
  314. }
  315. }
  316. }
  317. dettListNew.add(lastxjPd);
  318. mv.addObject("dettList", dettListNew);
  319. }
  320. mv.addObject("pd", pd);
  321. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  322. return mv;
  323. }
  324. private List<PageData> getReserveFee(List<PageData> dettList, List<PageData> feeList) throws Exception{
  325. LinkedHashMap<String, LinkedHashMap<String, ArrayList<PageData>>> varMap = new LinkedHashMap<String, LinkedHashMap<String, ArrayList<PageData>>>();
  326. Double sumActualCost = (double) 0;
  327. String prevCompanyName = "";
  328. String year = "";
  329. LinkedHashMap<String, ArrayList<PageData>> xjroadMap = new LinkedHashMap<String, ArrayList<PageData>>();
  330. List<PageData> dettListNew = new ArrayList<PageData>();
  331. for(PageData tpd : dettList){
  332. String company = tpd.get("COMPANY").toString();
  333. String road = tpd.get("ROAD").toString();
  334. Object roadfee = "";
  335. if(varMap.containsKey(company)){
  336. LinkedHashMap<String, ArrayList<PageData>> roadMap = varMap.get(company);
  337. for(PageData feepd : feeList){
  338. if(feepd.get("ROAD").equals(tpd.get("ROAD"))){
  339. if(feepd.get("AUDIT_FEE") != null){
  340. roadfee = feepd.get("AUDIT_FEE");
  341. }else{
  342. roadfee = feepd.get("TOTAL_COST"); //计划金额
  343. }
  344. }
  345. }
  346. if(roadMap != null && roadMap.containsKey(road)){
  347. if(tpd.get("ACTUAL_COST")!=null){
  348. sumActualCost += Double.parseDouble(tpd.get("ACTUAL_COST").toString());
  349. }
  350. ArrayList<PageData> pList = roadMap.get(road);
  351. if(roadfee != ""){
  352. tpd.put("ROAD", tpd.get("ROAD")+"("+ roadfee + ")");
  353. }else{
  354. tpd.put("ROAD", tpd.get("ROAD"));
  355. }
  356. pList.add(tpd);
  357. }else{
  358. if(tpd.get("ACTUAL_COST")!=null){
  359. sumActualCost += Double.parseDouble(tpd.get("ACTUAL_COST").toString());
  360. }
  361. ArrayList<PageData> npList = new ArrayList<PageData>();
  362. if(roadfee != ""){
  363. tpd.put("ROAD", tpd.get("ROAD")+"("+ roadfee + ")");
  364. }else{
  365. tpd.put("ROAD", tpd.get("ROAD"));
  366. }
  367. npList.add(tpd);
  368. roadMap.put(road, npList);
  369. }
  370. xjroadMap = roadMap;
  371. prevCompanyName = company;
  372. }else{
  373. if(varMap.size() > 0){
  374. ArrayList<PageData> xjList = new ArrayList<PageData>();
  375. PageData xjPd = new PageData();
  376. xjPd.put("COMPANY", prevCompanyName);
  377. xjPd.put("ROAD", "小计");
  378. xjPd.put("PROJECT_NAME", "");
  379. xjPd.put("REMARKS", "");
  380. xjPd.put("ACTUAL_COST", sumActualCost);
  381. xjList.add(xjPd);
  382. xjroadMap = varMap.get(prevCompanyName);
  383. xjroadMap.put("小计", xjList);
  384. varMap.put(prevCompanyName, xjroadMap);
  385. }
  386. ArrayList<PageData> mpList = new ArrayList<PageData>();
  387. LinkedHashMap<String, ArrayList<PageData>> mroadMap = new LinkedHashMap<String, ArrayList<PageData>>();
  388. for(PageData feepd : feeList){
  389. if(feepd.get("ROAD").equals(tpd.get("ROAD"))){
  390. if(feepd.get("AUDIT_FEE") != null){
  391. roadfee = feepd.get("AUDIT_FEE");
  392. }else{
  393. roadfee = feepd.get("TOTAL_COST"); //计划金额
  394. }
  395. }
  396. }
  397. if(roadfee != ""){
  398. tpd.put("ROAD", tpd.get("ROAD")+"("+ roadfee + ")");
  399. }else{
  400. tpd.put("ROAD", tpd.get("ROAD"));
  401. }
  402. mpList.add(tpd);
  403. mroadMap.put(road, mpList);
  404. varMap.put(company, mroadMap);
  405. prevCompanyName = company;
  406. if(tpd.get("YEAR")!=null){
  407. year = tpd.get("YEAR").toString();
  408. }
  409. //换公司名,sumActualCost重新计算
  410. sumActualCost = (double) 0;
  411. if(tpd.get("ACTUAL_COST")!=null){
  412. sumActualCost += Double.parseDouble(tpd.get("ACTUAL_COST").toString());
  413. }
  414. }
  415. }
  416. PageData lastxjPd = new PageData();
  417. lastxjPd.put("COMPANY", prevCompanyName);
  418. lastxjPd.put("YEAR", year);
  419. String lastsumfee = annualPlanCompService.getSumTotalFee(lastxjPd);
  420. if(lastsumfee != null){
  421. lastxjPd.put("COMPANY", prevCompanyName+"("+lastsumfee+")");
  422. }
  423. lastxjPd.put("ROAD", "小计");
  424. lastxjPd.put("PROJECT_NAME", "");
  425. lastxjPd.put("REMARKS", "");
  426. lastxjPd.put("ACTUAL_COST", sumActualCost);
  427. for(Entry<String, LinkedHashMap<String, java.util.ArrayList<PageData>>> centry : varMap.entrySet()){
  428. HashMap<String, java.util.ArrayList<PageData>> roadMap = centry.getValue();
  429. for(Entry<String, java.util.ArrayList<PageData>> rentry : roadMap.entrySet()){
  430. ArrayList<PageData> projectList = rentry.getValue();
  431. for(PageData ppd : projectList){
  432. String sumfee = annualPlanCompService.getSumTotalFee(ppd);
  433. if(sumfee != null){
  434. ppd.put("COMPANY", ppd.get("COMPANY")+"("+sumfee+")");
  435. }else{
  436. ppd.put("COMPANY", ppd.get("COMPANY"));
  437. }
  438. dettListNew.add(ppd);
  439. }
  440. }
  441. }
  442. dettListNew.add(lastxjPd);
  443. return dettListNew;
  444. }
  445. /**查询显示报告列表和表格列表
  446. * @param
  447. * @throws Exception
  448. */
  449. @RequestMapping(value="/showReportAndTable")
  450. public ModelAndView showReportAndTable(Model model)throws Exception{
  451. ModelAndView mv = this.getModelAndView();
  452. PageData pd = new PageData();
  453. pd = this.getPageData();
  454. //String planID = pd.getString("ID");
  455. List<PageData> varList = annualPlanService.showReportList(pd); //根据PLANID读取相关report信息
  456. if(pd.get("ROLENAME").toString().equalsIgnoreCase("路段管理员")){
  457. List<PageData> reportList = new ArrayList<PageData>();
  458. String[] roads = pd.get("ROAD").toString().split(",");
  459. for(int i = 0; i < roads.length; i++){
  460. for(PageData reportInfo : varList){
  461. if(reportInfo.get("ROAD_NAME") != null){
  462. if(reportInfo.get("ROAD_NAME").toString().trim().equalsIgnoreCase(roads[i].trim())){
  463. reportList.add(reportInfo);
  464. }
  465. }
  466. }
  467. }
  468. varList = reportList;
  469. }else{
  470. List<PageData> subReportList = new ArrayList<PageData>();
  471. for(PageData var : varList){
  472. if(var.get("ROAD_ID") == null){
  473. mv.addObject("reportInfo", var);
  474. }else{
  475. subReportList.add(var);
  476. }
  477. }
  478. varList = subReportList;
  479. }
  480. String reportid = null;
  481. String reportName = null;
  482. //用于显示界面右边表格信息
  483. List<PageData> vartableList = null;
  484. if(pd.get("REPORTID") != null){
  485. for(PageData var : varList){
  486. if(var.get("ID").toString().equalsIgnoreCase(pd.get("REPORTID").toString())){
  487. reportName = var.get("NAME").toString();
  488. }
  489. }
  490. vartableList = annualPlanService.getTableList(pd); //根据reportID读取相关table信息
  491. mv.addObject("selectReport", reportName);
  492. }else{
  493. for(PageData reportpd : varList){
  494. reportid = reportpd.getString("ID");
  495. reportName = reportpd.getString("NAME");
  496. if(reportName.indexOf("养护计划完成情况分报告") > 0){
  497. pd.put("REPORTID", reportid);
  498. pd.put("ROAD_ID", reportpd.get("ROAD_ID"));
  499. pd.put("ROAD", reportpd.get("ROAD_NAME"));
  500. vartableList = annualPlanService.getTableList(pd); //根据reportID读取相关table信息
  501. mv.addObject("selectReport", reportName);
  502. break;
  503. }
  504. }
  505. }
  506. mv.setViewName("information/annualPlan/annualPlanComp/annualPlanComp_report_list");
  507. mv.addObject("varList", varList);
  508. mv.addObject("vartableList", vartableList);
  509. mv.addObject("pd", pd);
  510. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  511. return mv;
  512. }
  513. /**查询显示表格列表
  514. * @param
  515. * @throws Exception
  516. */
  517. @RequestMapping(value="/getTableListInfo")
  518. @ResponseBody
  519. public Object getTableListInfo()throws Exception{
  520. Map<String,Object> map = new HashMap<String,Object>();
  521. String errInfo = "success";
  522. PageData pd = new PageData();
  523. pd = this.getPageData();
  524. List<PageData> vartableList = annualPlanService.getTableList(pd); //根据reportID读取相关table信息
  525. // mv.setViewName("information/annualPlan/annualPlan_report_list");
  526. // mv.addObject("vartableList", vartableList);
  527. // mv.addObject("data", vartableList);
  528. // mv.addObject("pd", pd);
  529. // mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  530. // return mv;
  531. List<PageData> pdList = new ArrayList<PageData>();
  532. for(PageData tpd :vartableList){
  533. PageData pdf = new PageData();
  534. pdf.put("NAME", tpd.get("NAME"));
  535. pdf.put("COMPANY_ID", tpd.get("COMPANY_ID"));
  536. pdf.put("COMPANY_NAME", tpd.get("COMPANY_NAME"));
  537. pdf.put("YEAR", tpd.get("YEAR"));
  538. pdf.put("ROAD_ID", tpd.get("ROAD_ID"));
  539. pdf.put("ROAD_NAME", tpd.get("ROAD_NAME"));
  540. pdf.put("TYPE", tpd.get("TYPE"));
  541. pdf.put("CTIME", tpd.get("CTIME"));
  542. pdf.put("MTIME", tpd.get("MTIME"));
  543. pdf.put("STATUS", tpd.get("STATUS"));
  544. pdList.add(pdf);
  545. }
  546. map.put("list", pdList);
  547. map.put("result", errInfo); //返回结果
  548. return AppUtil.returnObject(new PageData(), map);
  549. }
  550. /**显示、编辑子表格内容
  551. * @param
  552. * @throws Exception
  553. */
  554. @RequestMapping(value="/showTableRecod")
  555. public ModelAndView showTableRecod()throws Exception{
  556. ModelAndView mv = this.getModelAndView();
  557. PageData pd = new PageData();
  558. pd = this.getPageData();
  559. List<PageData> varList = annualPlanService.showTableRecod(pd); //根据ID读取
  560. mv.setViewName("information/annualPlan/annualPlan_edit");
  561. mv.addObject("varList", varList);
  562. mv.addObject("pd", pd);
  563. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  564. return mv;
  565. }
  566. /**去新增页面
  567. * @param
  568. * @throws Exception
  569. */
  570. @RequestMapping(value="/goAdd")
  571. public ModelAndView goAdd()throws Exception{
  572. ModelAndView mv = this.getModelAndView();
  573. PageData pd = new PageData();
  574. pd = this.getPageData();
  575. //List<PageData> varList = annualPlanService.getReportType(pd); //获取报告类型
  576. SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
  577. Date date = new Date();
  578. String currentYear = sdf.format(date);
  579. List<String> yearItems = new ArrayList<String>();
  580. for(int i= -4; i < 6; i++){
  581. Integer intyear = Integer.parseInt(currentYear);
  582. yearItems.add(String.valueOf(intyear + i));
  583. }
  584. mv.setViewName("information/annualPlan/annualPlanComp/annualPlanComp_add");
  585. //mv.addObject("varList", varList);
  586. mv.addObject("msg", "save");
  587. mv.addObject("yearList", yearItems);
  588. mv.addObject("currentYear", currentYear);
  589. mv.addObject("pd", pd);
  590. return mv;
  591. }
  592. /**新增报告和子表格的关系
  593. * @param
  594. * @throws Exception
  595. */
  596. @RequestMapping(value="/save")
  597. public ModelAndView save() throws Exception{
  598. logBefore(logger, Jurisdiction.getUsername()+"新增annualPlanComp");
  599. //if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
  600. List<PageData> reportList = new ArrayList<PageData>();
  601. List<PageData> tableList = new ArrayList<PageData>();
  602. ModelAndView mv = this.getModelAndView();
  603. PageData pd = new PageData();
  604. pd = this.getPageData();
  605. String planID = this.get32UUID();
  606. pd.put("ID", planID);//主键
  607. pd.put("NAME", pd.get("YEAR")+"年"+pd.get("COMPANY")+"年度养护计划完成情况");
  608. //设置查询oa_department的动态表名
  609. PageData cpPd = new PageData();
  610. String oa_department_table = "oa_department_"+pd.get("YEAR");
  611. cpPd.put("table", oa_department_table);
  612. cpPd.put("NAME", pd.get("COMPANY").toString());
  613. PageData companypd = (PageData)annualPlanService.getCompanyID(cpPd); //通过路公司名获取路公司ID和父节点id
  614. String companyID = companypd.getString("BIANMA");
  615. String DEPARTMENT_ID = companypd.getString("DEPARTMENT_ID");
  616. pd.put("COMPANY_ID", companyID);
  617. pd.put("COMPANY_NAME", pd.get("COMPANY"));
  618. pd.put("DEPARTMENT_ID", DEPARTMENT_ID);
  619. pd.put("CTIME", Tools.date2Str(new Date())); //创建时间
  620. pd.put("MTIME", Tools.date2Str(new Date())); //修改时间
  621. pd.put("STATUS", "新建"); //创建时间
  622. annualPlanService.addAnnualPlan(pd); //新建年度计划
  623. pd.put("NAME", pd.get("YEAR")+"年"+pd.get("COMPANY")+"年度养护计划完成情况总报告");
  624. String reportID = this.get32UUID();
  625. pd.put("ID", reportID);//主键
  626. pd.put("PLANID", planID);
  627. reportList.add(pd);
  628. List<PageData> tableTypeList = annualPlanService.getTableType(); //获取表格类型
  629. for(PageData tableInfo : tableTypeList){
  630. if(tableInfo.get("REPORT_ID").toString().equalsIgnoreCase("1")){
  631. PageData tablepd = new PageData();
  632. tablepd.put("REPORTID", reportID);
  633. if(tableInfo.getString("TABLE_NAME").indexOf("计划完成情况") > 0){
  634. String tempYear = String.valueOf(Integer.parseInt(pd.get("YEAR").toString()) - 1);
  635. tablepd.put("YEAR", tempYear);
  636. tablepd.put("NAME", tempYear+"年"+pd.get("COMPANY")+tableInfo.getString("TABLE_NAME"));
  637. }else{
  638. tablepd.put("YEAR", pd.get("YEAR"));
  639. tablepd.put("NAME", pd.get("YEAR")+"年"+pd.get("COMPANY")+tableInfo.getString("TABLE_NAME"));
  640. }
  641. tablepd.put("TYPE", tableInfo.getString("TABLE_TYPE"));
  642. tablepd.put("COMPANY_ID", companyID);
  643. tablepd.put("COMPANY_NAME", pd.get("COMPANY"));
  644. tablepd.put("CTIME", Tools.date2Str(new Date())); //创建时间
  645. tablepd.put("MTIME", Tools.date2Str(new Date())); //修改时间
  646. tablepd.put("STATUS", "自动统计"); //创建时间
  647. tablepd.put("ROAD_NAME", "");
  648. tablepd.put("ROAD_ID", "");
  649. tableList.add(tablepd);
  650. //annualPlanService.addAnnualTable(tablepd);
  651. }
  652. }
  653. cpPd.put("DEPARTMENT_ID", DEPARTMENT_ID);
  654. List<PageData> roadpdList = annualPlanService.getRoadInfo(cpPd); //通过父节点ID获取路段信息
  655. for(PageData reportinfo : roadpdList){
  656. PageData reportpd = new PageData();
  657. reportID = this.get32UUID();
  658. reportpd.put("ID", reportID);//主键
  659. reportpd.put("PLANID", planID);
  660. reportpd.put("ROAD_NAME", reportinfo.getString("NAME"));
  661. reportpd.put("ROAD_ID", reportinfo.getString("BIANMA"));
  662. reportpd.put("NAME", pd.get("YEAR")+"年"+pd.get("COMPANY")+reportinfo.getString("NAME")+"年度养护计划分报告");
  663. reportpd.put("COMPANY_ID", companyID);
  664. reportpd.put("COMPANY_NAME", pd.get("COMPANY"));
  665. reportpd.put("DEPARTMENT_ID", DEPARTMENT_ID);
  666. reportpd.put("CTIME", Tools.date2Str(new Date())); //创建时间
  667. reportpd.put("MTIME", Tools.date2Str(new Date())); //修改时间
  668. reportpd.put("STATUS", "新建"); //创建时间
  669. reportList.add(reportpd);
  670. //annualPlanService.addAnnualReport(pd); //新建年度分报告列表
  671. for(PageData tableInfo : tableTypeList){
  672. if(tableInfo.get("REPORT_ID").toString().equalsIgnoreCase("2")){
  673. PageData tablepdroad = new PageData();
  674. tablepdroad.put("REPORTID", reportID);
  675. if(tableInfo.getString("TABLE_NAME").indexOf("计划完成情况") > 0 || tableInfo.getString("TABLE_NAME").indexOf("预备费使用情况汇总表") > 0){
  676. String tempYear = String.valueOf(Integer.parseInt(pd.get("YEAR").toString()) - 1);
  677. tablepdroad.put("YEAR", tempYear);
  678. tablepdroad.put("NAME", tempYear + "年"+pd.get("COMPANY")+reportinfo.getString("NAME")+tableInfo.getString("TABLE_NAME"));
  679. }else{
  680. tablepdroad.put("YEAR", pd.get("YEAR"));
  681. tablepdroad.put("NAME", pd.get("YEAR")+"年"+pd.get("COMPANY")+reportinfo.getString("NAME")+tableInfo.getString("TABLE_NAME"));
  682. }
  683. tablepdroad.put("TYPE", tableInfo.getString("TABLE_TYPE"));
  684. tablepdroad.put("COMPANY_ID", companyID);
  685. tablepdroad.put("COMPANY_NAME", pd.get("COMPANY"));
  686. tablepdroad.put("ROAD_NAME", reportinfo.getString("NAME"));
  687. tablepdroad.put("ROAD_ID", reportinfo.getString("BIANMA"));
  688. tablepdroad.put("CTIME", Tools.date2Str(new Date())); //创建时间
  689. tablepdroad.put("MTIME", Tools.date2Str(new Date())); //修改时间
  690. newTables.add("高速公路预防养护计划立项详表");
  691. newTables.add("高速公路修复养护计划立项详表");
  692. newTables.add("高速公路试验检测项目计划立项详表");
  693. newTables.add("高速公路科研项目计划立项详表");
  694. newTables.add("高速公路设备大修项目计划立项详表");
  695. newTables.add("高速公路专项养护计划立项详表");
  696. newTables.add("高速公路道路技术状况现状统计表");
  697. newTables.add("高速公路交通等信息综合统计表");
  698. newTables.add("高速公路日常养护计划统计表");
  699. newTables.add("高速公路预备费使用情况汇总表");
  700. if(newTables.contains(tableInfo.getString("TABLE_NAME").toString())){
  701. tablepdroad.put("STATUS", "新建");
  702. }else{
  703. tablepdroad.put("STATUS", "自动统计");
  704. }
  705. tableList.add(tablepdroad);
  706. }
  707. }
  708. }
  709. annualPlanService.addAnnualReport(reportList);
  710. annualPlanService.addAnnualTable(tableList);
  711. mv.addObject("pd", pd);
  712. mv.setViewName("save_result");
  713. return mv;
  714. }
  715. /**判断该年养护完成情况是否已存在
  716. * @param
  717. * @throws Exception
  718. */
  719. @RequestMapping(value="/hasPlan")
  720. @ResponseBody
  721. public Object hasPlan()throws Exception{
  722. Map<String,String> map = new HashMap<String,String>();
  723. PageData pd = new PageData();
  724. pd = this.getPageData();
  725. String msg = "success";
  726. //查询系统已存在的养护计划
  727. List<PageData> planPd = annualPlanCompService.getPlanCompByCompanyAndYear(pd);
  728. if(planPd.size() > 0){
  729. msg = "已存在相同的养护完成情况,新建失败";
  730. }
  731. map.put("result", msg);
  732. return AppUtil.returnObject(new PageData(), map);
  733. }
  734. /**删除年度计划和其下面的报告、表格
  735. * @param
  736. * @throws Exception
  737. */
  738. @RequestMapping(value="/delAnnualPlan")
  739. @ResponseBody
  740. public Object delAnnualPlan()throws Exception{
  741. Map<String,String> map = new HashMap<String,String>();
  742. PageData pd = new PageData();
  743. pd = this.getPageData();
  744. //PageData planPd = annualPlanService.getYearAndCompanyByID(pd); //通过ANNUALPLAN_ID获取报告的年份和公司
  745. annualPlanCompService.delAnnualCompPlan(pd); //删除年度计划
  746. List<String> reportIDList = annualPlanService.getReportID(pd); //获取年度计划对应的报告ID
  747. annualPlanService.delReport(pd); //删除报告
  748. annualPlanService.delTables(reportIDList); //删除表格列表
  749. map.put("result", "success");
  750. return AppUtil.returnObject(new PageData(), map);
  751. }
  752. /**新增立项详表新增弹出页面
  753. * @param
  754. * @throws Exception
  755. */
  756. @RequestMapping(value="/addNewTablePanel")
  757. public ModelAndView addNewTablePanel()throws Exception{
  758. ModelAndView mv = this.getModelAndView();
  759. PageData pd = new PageData();
  760. pd = this.getPageData();
  761. List<PageData> varList = annualPlanService.getDetTableType(); //获取立项详表报告类型
  762. //通过reportid获取对应的路段信息
  763. PageData roadInfo = annualPlanService.getRoadInfoByReportID(pd);
  764. pd.put("ROAD_NAME", roadInfo.get("ROAD"));
  765. pd.put("ROAD_ID", roadInfo.get("ROAD_ID"));
  766. mv.setViewName("information/annualPlan/annualPlan_addNewTable");
  767. mv.addObject("varList", varList);
  768. mv.addObject("msg", "addNewTable");
  769. mv.addObject("pd", pd);
  770. return mv;
  771. }
  772. /**只有路段分报告可以新增立项详表
  773. * @param
  774. * @throws Exception
  775. */
  776. @RequestMapping(value="/addNewTable")
  777. @ResponseBody
  778. public Object addNewTable()throws Exception{
  779. Map<String,String> map = new HashMap<String,String>();
  780. PageData pd = new PageData();
  781. pd = this.getPageData();
  782. //List<PageData> varList = annualPlanService.getDetTableType(); //获取立项详表报告类型
  783. //通过reportid获取对应的路段信息
  784. try{
  785. PageData roadInfo = annualPlanService.getRoadInfoByReportID(pd);
  786. pd.put("ROAD_NAME", roadInfo.get("ROAD"));
  787. pd.put("ROAD_ID", roadInfo.get("ROAD_ID"));
  788. // mv.setViewName("information/annualPlan/annualPlan_addNewTable");
  789. // mv.addObject("varList", varList);
  790. // mv.addObject("pd", pd);
  791. map.put("result", "success");
  792. }catch(Exception e){
  793. map.put("result", "只有路段分报告可以增加立项详表");
  794. }
  795. return AppUtil.returnObject(new PageData(), map);
  796. }
  797. /**显示立项详表新增弹出页面
  798. * @param
  799. * @throws Exception
  800. */
  801. @RequestMapping(value="/showNewTable")
  802. public ModelAndView showNewTable()throws Exception{
  803. ModelAndView mv = this.getModelAndView();
  804. PageData pd = new PageData();
  805. pd = this.getPageData();
  806. List<PageData> varList = annualPlanService.getDetTableType(); //获取立项详表报告类型
  807. mv.setViewName("information/annualPlan/annualPlan_addNewTable");
  808. mv.addObject("varList", varList);
  809. mv.addObject("msg", "save");
  810. mv.addObject("pd", pd);
  811. return mv;
  812. }
  813. @RequestMapping(value="/hasBetTable")
  814. @ResponseBody
  815. public Object hasBetTable() throws Exception{
  816. PageData pd = new PageData();
  817. pd = this.getPageData();
  818. String msg = "success";
  819. String tableName = pd.get("YEAR")+"年"+ pd.get("COMPANY")+pd.get("ROAD") + pd.get("Table_Name");
  820. pd.put("NAME", tableName);
  821. List<PageData> tableInfo = annualPlanService.getTableInfo(pd);
  822. if(tableInfo.size() > 0){
  823. msg = "已存在相同的立项表";
  824. }
  825. Map<String,Object> map = new HashMap<String,Object>();
  826. map.put("msg",msg);
  827. return AppUtil.returnObject(new PageData(), map);
  828. }
  829. @RequestMapping(value="/changeTableName")
  830. @ResponseBody
  831. public Object changeTableName() throws Exception{
  832. PageData pd = new PageData();
  833. pd = this.getPageData();
  834. String name = pd.getString("PROJECT_NAME");
  835. pd.put("NAME", name);
  836. annualPlanService.changeTableName(pd); //修改立项详表名称
  837. Map<String,Object> map = new HashMap<String,Object>();
  838. map.put("msg","success");
  839. return AppUtil.returnObject(new PageData(), map);
  840. }
  841. @RequestMapping(value="/addNewTableInfo")
  842. @ResponseBody
  843. public Object addNewTableInfo() throws Exception{
  844. PageData pd = new PageData();
  845. pd = this.getPageData();
  846. String name = pd.getString("PROJECT_NAME");
  847. pd.put("NAME", name);
  848. //获取reportId "2017年高管中心宁连、宁洛及金马高速年度养护计划分报告"
  849. String reportName = pd.getString("YEAR")+"年" + pd.getString("COMPANY") + pd.getString("ROAD") + "年度养护计划分报告";
  850. String reportId = annualPlanService.getTableReportID(reportName); //get annual_report_list id
  851. //在annual_table_list表中新增一条立项详情表记录
  852. pd.put("REPORTID", reportId);
  853. pd.put("CTIME", Tools.date2Str(new Date())); //创建时间
  854. pd.put("MTIME", Tools.date2Str(new Date())); //修改时间
  855. annualPlanService.addNewTableInfo(pd); //insert annual_table_list新增立项详表
  856. Map<String,Object> map = new HashMap<String,Object>();
  857. map.put("msg","success");
  858. return AppUtil.returnObject(new PageData(), map);
  859. }
  860. /**删除立项表
  861. * @param
  862. * @throws Exception
  863. */
  864. @RequestMapping(value="/delTable")
  865. @ResponseBody
  866. public Object delTable()throws Exception{
  867. Map<String,String> map = new HashMap<String,String>();
  868. PageData pd = new PageData();
  869. pd = this.getPageData();
  870. String msg = "删除立项表成功";
  871. try{
  872. annualPlanService.delRecordFromTable(pd); //删除table_lis中的表数据
  873. pd.put("TABLE_NAME", pd.get("TYPE"));
  874. if(pd.get("NAME") != null){
  875. if(pd.get("NAME").toString().contains("---")){
  876. pd.put("PROJECT_NAME", pd.get("NAME").toString().split("---")[1]);
  877. }
  878. }
  879. annualPlanService.delModifyRecord(pd); //删除留痕表中的主表数据
  880. pd.put("TABLE_NAME", pd.get("TYPE") + "_cost");
  881. annualPlanService.delModifyRecord(pd); //删除留痕表中的主表关联的cost表数据
  882. }catch(Exception e){
  883. msg = "删除立项表失败";
  884. }
  885. map.put("result", msg);
  886. return AppUtil.returnObject(new PageData(), map);
  887. }
  888. public static void main(String[] args) {
  889. // TODO Auto-generated method stub
  890. }
  891. @RequestMapping("/exporthz")
  892. public String exporthz(HttpServletRequest request,HttpServletResponse response) throws Exception{
  893. String path = request.getSession().getServletContext().getRealPath("/uploadFiles/file");
  894. ModelAndView mv = this.getModelAndView();
  895. PageData pd = new PageData();
  896. pd = this.getPageData();
  897. List<String> paths = new ArrayList<String>();
  898. List<String> result = new ArrayList<String>();
  899. //excel文档
  900. List<PageData> exceldata = setMultExcelData(pd);
  901. MultExcelUtils ex = new MultExcelUtils();
  902. String excelpath = ex.exportExcel(pd.getString("exportname")+".xlsx",path,response,exceldata);
  903. result.add(excelpath);
  904. //zip压缩下载
  905. DownloadZip.downloadZip(response,request,result,path);
  906. return null;
  907. }
  908. public List<PageData> setMultExcelData(PageData param) throws Exception {
  909. List<PageData> result = new ArrayList<PageData>();
  910. String[] modelNames = {"养护计划完成情况汇总","日常养护计划完成情况汇总","预防养护计划完成情况汇总",
  911. "修复养护计划完成情况汇总","专项养护计划完成情况汇总","应急养护计划完成情况汇总",
  912. "试验检测项目计划完成情况汇总","科研项目计划完成情况汇总"};
  913. String[] keyStrs = {
  914. "DESIGN_KM,CARE_KM,DAILY_DESIGN,DAILY_COMPLETE,DAILY_RATIO,DAILY_COMPLETE_KM,"
  915. + "MINOR_PREVENTION_DESIGN,MINOR_PREVENTION_COMPLETE,MINOR_PREVENTION_RATIO,MIDDLE_PREVENTION_DESIGN,MIDDLE_PREVENTION_COMPLETE,MIDDLE_PREVENTION_RATIO,"
  916. + "OVERHAUL_PREVENTION_DESIGN,OVERHAUL_PREVENTION_COMPLETE,OVERHAUL_PREVENTION_RATIO,PREVENTION_DESIGN_TOTAL,PREVENTION_COMPLETE_TOTAL,PREVENTION_RATIO_TOTAL,"
  917. + "MINOR_REPAIR_DESIGN,MINOR_REPAIR_COMPLETE,MINOR_REPAIR_RATIO,MIDDLE_REPAIR_DESIGN,MIDDLE_REPAIR_COMPLETE,MIDDLE_REPAIR_RATIO,OVERHAUL_DESIGN,OVERHAUL_COMPLETE,OVERHAUL_REPAIR_RATIO,"
  918. + "REPAIR_DESIGN_TOTAL,REPAIR_COMPLETE_TOTAL,REPAIR_RATIO_TOTAL,"
  919. + "SPECIAL_DESIGN,SPECIAL_COMPLETE,SPECIAL_RATIO,"
  920. + "EMERGENCY_DESIGN,EMERGENCY_COMPLETE,EMERGENCY_RATIO,"
  921. + "TEST_DESIGN,TEST_COMPLETE,TEST_RATIO,"
  922. + "SCIENTIFIC_DESIGN,SCIENTIFIC_COMPLETE,SCIENTIFIC_RATIO,"
  923. + "DEVICE_DESIGN,DEVICE_COMPLETE,DEVICE_RATIO,"
  924. + "RESERVE_DESIGN,RESERVE_COMPLETE,RESERVE_RATIO,"
  925. + "DESIGN_TOTAL,COMPLETE_TOTAL,RATIO_TOTAL"
  926. ,"DESIGN_KM,CARE_KM,PLAN_COST,"
  927. + "CLEAN_COST,PATROL_COST,SUBGRADE_COST,PAVEMENT_COST,BRIDGE_COST,CULVERT_COST,TUNNEL_COST,SAFE_COST,LINE_COST,GREEN_COST,CAR_COST,EMERGENCY_COST,TOTAL_COST,COST_KM,COMPLETE_RATIO"
  928. ,"DESIGN_KM,CARE_KM,PLAN_COST,"
  929. + "MIN_SUBGRADE_COST,MIN_PAVEMENT_COST,MIN_BRIDGE_COST,MIN_TUNNEL_COST,MIN_TOTAL_COST,"
  930. + "MID_SUBGRADE_COST,MID_PAVEMENT_COST,MID_BRIDGE_COST,MID_TUNNEL_COST,MID_TOTAL_COST,"
  931. + "MAX_SUBGRADE_COST,MAX_PAVEMENT_COST,MAX_BRIDGE_COST,MAX_TUNNEL_COST,MAX_TOTAL_COST,"
  932. + "SUBGRADE_COST_TOTAL,PAVEMENT_COST_TOTAL,BRIDGE_COST_TOTAL,TUNNEL_COST_TOTAL,COST_TOTAL,COMPLETE_RATIO"
  933. ,"DESIGN_KM,CARE_KM,PLAN_COST,"
  934. + "MIN_SUBGRADE_COST,MIN_PAVEMENT_COST,MIN_BRIDGE_COST,MIN_TUNNEL_COST,MIN_TRAFFIC_SAFE_COST,MIN_ROADSIDE_COST,MIN_GREEN_COST,MIN_OTHER_COST,MIN_TOTAL_COST,"
  935. + "MID_SUBGRADE_COST,MID_PAVEMENT_COST,MID_BRIDGE_COST,MID_TUNNEL_COST,MID_TRAFFIC_SAFE_COST,MID_ROADSIDE_COST,MID_GREEN_COST,MID_OTHER_COST,MID_TOTAL_COST,"
  936. + "MAX_SUBGRADE_COST,MAX_PAVEMENT_COST,MAX_BRIDGE_COST,MAX_TUNNEL_COST,MAX_TRAFFIC_SAFE_COST,MAX_ROADSIDE_COST,MAX_GREEN_COST,MAX_OTHER_COST,MAX_TOTAL_COST,"
  937. + "SUBGRADE_COST_TOTAL,PAVEMENT_COST_TOTAL,BRIDGE_COST_TOTAL,TUNNEL_COST_TOTAL,TRAFFIC_SAFE_COST_TOTAL,ROADSIDE_SAFE_COST_TOTAL,GREEN_COST_TOTAL,OTHER_COST_TOTAL,TOTAL_COST,COMPLETE_RATIO"
  938. ,"DESIGN_KM,CARE_KM,PLAN_COST,"
  939. + "SUBGRADE_COST,PAVEMENT_COST,BRIDGE_COST,TUNNEL_COST,TRAFFIC_SAFE_COST,ROADSIDE_COST,GREEN_COST,OTHER_COST,TOTAL_COST,COMPLETE_RATIO"
  940. ,"DESIGN_KM,CARE_KM,PLAN_COST,"
  941. + "SUBGRADE_COST,PAVEMENT_COST,BRIDGE_COST,TUNNEL_COST,TRAFFIC_SAFE_COST,ROADSIDE_COST,GREEN_COST,OTHER_COST,TOTAL_COST,COMPLETE_RATIO"
  942. ,"DESIGN_KM,CARE_KM,PLAN_COST,"
  943. + "SUBGRADE_COST,PAVEMENT_COST,BRIDGE_COST,TUNNEL_COST,TRAFFIC_SAFE_COST,ROADSIDE_COST,OTHER_COST,TOTAL_COST,COMPLETE_RATIO"
  944. ,"DESIGN_KM,CARE_KM,PLAN_COST,"
  945. + "SUBGRADE_COST,PAVEMENT_COST,BRIDGE_COST,OTHER_COST,TOTAL_COST,COMPLETE_RATIO"
  946. };
  947. String[] tableNames = {"annual_comp_sumtable_view","annual_daily_comp_sumtable_view","annual_prevention_comp_sumtable_view",
  948. "annual_repair_comp_sumtable_view","annual_special_comp_sumtable_view","annual_emergency_comp_sumtable_view",
  949. "annual_test_comp_sumtable_view","annual_scientific_comp_sumtable_view"};
  950. int[] startRowIndexs = {4,3,4,4,3,3,3,3};
  951. int[] tabletype = {6,6,6,6,6,6,6,6};
  952. int[] totalRange = {2,2,2,2,2,2,2,2};
  953. String[][][] funcArrys = {
  954. {
  955. {"percent","DAILY_RATIO","IF(ISERROR((G#row#/F#row#)*100),\"\",(G#row#/F#row#)*100)"},
  956. {"percent","DAILY_COMPLETE_KM","ROUND(IF(ISERROR((G#row#/E#row#)),\"0.0\",(G#row#/E#row#)),1)"},
  957. {"percent","MINOR_PREVENTION_RATIO","IF(ISERROR((K#row#/J#row#)*100),\"\",(K#row#/J#row#)*100)"},
  958. {"percent","MIDDLE_PREVENTION_RATIO","IF(ISERROR((N#row#/M#row#)*100),\"\",(N#row#/M#row#)*100)"},
  959. {"percent","OVERHAUL_PREVENTION_RATIO","IF(ISERROR((Q#row#/P#row#)*100),\"\",(Q#row#/P#row#)*100)"},
  960. {"sum","PREVENTION_DESIGN_TOTAL","IF(SUM(J#row#,M#row#,P#row#)<10,ROUND(SUM(J#row#,M#row#,P#row#),1),ROUND(SUM(J#row#,M#row#,P#row#),0))"},
  961. {"sum","PREVENTION_COMPLETE_TOTAL","IF(SUM(K#row#,N#row#,Q#row#)<10,ROUND(SUM(K#row#,N#row#,Q#row#),1),ROUND(SUM(K#row#,N#row#,Q#row#),0))"},
  962. {"percent","PREVENTION_RATIO_TOTAL","IF(ISERROR((T#row#/S#row#)*100),\"\",(T#row#/S#row#)*100)"},
  963. {"percent","MINOR_REPAIR_RATIO","IF(ISERROR((W#row#/V#row#)*100),\"\",(W#row#/V#row#)*100)"},
  964. {"percent","MIDDLE_REPAIR_RATIO","IF(ISERROR((Z#row#/Y#row#)*100),\"\",(Z#row#/Y#row#)*100)"},
  965. {"percent","OVERHAUL_REPAIR_RATIO","IF(ISERROR((AC#row#/AB#row#)*100),\"\",(AC#row#/AB#row#)*100)"},
  966. {"sum","REPAIR_DESIGN_TOTAL","IF(SUM(V#row#,Y#row#,AB#row#)<10,ROUND(SUM(V#row#,Y#row#,AB#row#),1),ROUND(SUM(V#row#,Y#row#,AB#row#),0))"},
  967. {"sum","REPAIR_COMPLETE_TOTAL","IF(SUM(W#row#,Z#row#,AC#row#)<10,ROUND(SUM(W#row#,Z#row#,AC#row#),1),ROUND(SUM(W#row#,Z#row#,AC#row#),0))"},
  968. {"percent","REPAIR_RATIO_TOTAL","IF(ISERROR((AF#row#/AE#row#)*100),\"\",(AF#row#/AE#row#)*100)"},
  969. {"percent","SPECIAL_RATIO","IF(ISERROR((AI#row#/AH#row#)*100),\"\",(AI#row#/AH#row#)*100)"},
  970. {"percent","EMERGENCY_RATIO","IF(ISERROR((AL#row#/AK#row#)*100),\"\",(AL#row#/AK#row#)*100)"},
  971. {"percent","TEST_RATIO","IF(ISERROR((AO#row#/AN#row#)*100),\"\",(AO#row#/AN#row#)*100)"},
  972. {"percent","SCIENTIFIC_RATIO","IF(ISERROR((AR#row#/AQ#row#)*100),\"\",(AR#row#/AQ#row#)*100)"},
  973. {"percent","DEVICE_RATIO","IF(ISERROR((AU#row#/AT#row#)*100),\"\",(AU#row#/AT#row#)*100)"},
  974. {"percent","RESERVE_RATIO","IF(ISERROR((AX#row#/AW#row#)*100),\"\",(AX#row#/AW#row#)*100)"},
  975. {"sum","DESIGN_TOTAL","IF(SUM(F#row#,S#row#,AE#row#,AH#row#,AK#row#,AN#row#,AQ#row#,AT#row#,AW#row#)<10,ROUND(SUM(F#row#,S#row#,AE#row#,AH#row#,AK#row#,AN#row#,AQ#row#,AT#row#,AW#row#),1),ROUND(SUM(F#row#,S#row#,AE#row#,AH#row#,AK#row#,AN#row#,AQ#row#,AT#row#,AW#row#),0))"},
  976. {"sum","COMPLETE_TOTAL","IF(SUM(G#row#,T#row#,AF#row#,AI#row#,AL#row#,AO#row#,AR#row#,AU#row#,AX#row#)<10,ROUND(SUM(G#row#,T#row#,AF#row#,AI#row#,AL#row#,AO#row#,AR#row#,AU#row#,AX#row#),1),ROUND(SUM(G#row#,T#row#,AF#row#,AI#row#,AL#row#,AO#row#,AR#row#,AU#row#,AX#row#),0))"},
  977. {"percent","RATIO_TOTAL","IF(ISERROR((BA#row#/AZ#row#)*100),\"\",(BA#row#/AZ#row#)*100)"}
  978. },{
  979. {"percent","COST_KM","ROUND(IF(ISERROR((S#row#/E#row#)),\"0.0\",(S#row#/E#row#)),1)"},
  980. {"percent","COMPLETE_RATIO","IF(ISERROR((S#row#/F#row#)*100),\"\",(S#row#/F#row#)*100)"}
  981. },
  982. {
  983. {"percent","COMPLETE_RATIO","IF(ISERROR((Z#row#/F#row#)*100),\"\",(Z#row#/F#row#)*100)"}
  984. },
  985. {
  986. {"percent","COMPLETE_RATIO","IF(ISERROR((AP#row#/F#row#)*100),\"\",(AP#row#/F#row#)*100)"}
  987. },{
  988. {"percent","COMPLETE_RATIO","IF(ISERROR((O#row#/F#row#)*100),\"\",(O#row#/F#row#)*100)"}
  989. },{
  990. {"percent","COMPLETE_RATIO","IF(ISERROR((O#row#/F#row#)*100),\"\",(O#row#/F#row#)*100)"}
  991. },{
  992. {"percent","COMPLETE_RATIO","IF(ISERROR((N#row#/F#row#)*100),\"\",(N#row#/F#row#)*100)"}
  993. },{
  994. {"percent","COMPLETE_RATIO","IF(ISERROR((K#row#/F#row#)*100),\"\",(K#row#/F#row#)*100)"}
  995. }};
  996. PageData pd = new PageData();
  997. for (int i = 0; i < tableNames.length; i++) {
  998. PageData data = new PageData();
  999. pd.put("type", tableNames[i]);
  1000. pd.put("YEAR", param.get("YEAR"));
  1001. pd.put("table", "oa_department_"+param.get("YEAR").toString());
  1002. List<PageData> list = annualPlanCompService.getcompletehzdata(pd);
  1003. /* //养护计划完成情况汇总
  1004. if(i==0){
  1005. list = TotalAmountUtil.completeYhjhTotalAmount(list);
  1006. //格式化数据
  1007. //list = TotalAmountUtil.formatDecimalPlace(list,"1");
  1008. }*/
  1009. data.put("list", list);
  1010. data.put("modelName", modelNames[i]);
  1011. data.put("keyStr", keyStrs[i]);
  1012. data.put("startRowIndex", startRowIndexs[i]);
  1013. data.put("tabletype", tabletype[i]);
  1014. data.put("funcArry", funcArrys[i]);
  1015. data.put("totalRange", totalRange[i]);
  1016. data.put("pd", pd);
  1017. result.add(data);
  1018. }
  1019. return result;
  1020. }
  1021. @RequestMapping("/exportmx")
  1022. public String exportmx(HttpServletRequest request,HttpServletResponse response) throws Exception{
  1023. String path = request.getSession().getServletContext().getRealPath("/uploadFiles/file");
  1024. ModelAndView mv = this.getModelAndView();
  1025. PageData pd = new PageData();
  1026. pd = this.getPageData();
  1027. List<String> paths = new ArrayList<String>();
  1028. List<String> result = new ArrayList<String>();
  1029. //excel文档
  1030. List<PageData> exceldata = setMxExcelData(pd);
  1031. MultExcelUtils ex = new MultExcelUtils();
  1032. String excelpath = ex.exportExcel(pd.getString("exportname")+".xlsx",path,response,exceldata);
  1033. result.add(excelpath);
  1034. //zip压缩下载
  1035. DownloadZip.downloadZip(response,request,result,path);
  1036. return null;
  1037. }
  1038. public List<PageData> setMxExcelData(PageData param) throws Exception {
  1039. List<PageData> result = new ArrayList<PageData>();
  1040. String[] modelNames = {"预防养护计划完成情况汇总表","修复养护计划完成情况汇总表","专项养护计划完成情况汇总表","应急养护计划完成情况汇总表",
  1041. "试验检测项目计划完成情况汇总表","科研项目计划完成情况汇总表","设备大修项目计划完成情况汇总表","预备费使用情况汇总表"};
  1042. String[] keyStrs = {
  1043. "PROJECT_NAME,PROJECT_TYPE,SCALE,PLAN_QUANTITIES,PLAN_COST,ACTUAL_QUANTITIES,ACTUAL_COST,PERCENT,REMARKS"
  1044. ,"PROJECT_NAME,PROJECT_TYPE,SCALE,PLAN_QUANTITIES,PLAN_COST,ACTUAL_QUANTITIES,ACTUAL_COST,PERCENT,REMARKS"
  1045. ,"SPECIAL_PROJECT_NAME,PLAN_COST,ACTUAL_COST,PERCENT,COMPLETE_DESCRIBE,REMARKS"
  1046. ,"PROJECT_NAME,PROJECT_TYPE,SCALE,PLAN_QUANTITIES,PLAN_COST,ACTUAL_QUANTITIES,ACTUAL_COST,PERCENT,REMARKS"
  1047. ,"PROJECT_NAME,PROJECT_TYPE,PLAN_COST,ACTUAL_COST,PERCENT,COMPLETE_DESCRIBE,REMARKS"
  1048. ,"PROJECT_NAME,PROJECT_TYPE,PLAN_COST,ACTUAL_COST,PERCENT,COMPLETE_DESCRIBE,REMARKS"
  1049. ,"PROJECT_NAME,PROJECT_TYPE,PLAN_COST,ACTUAL_COST,PERCENT,COMPLETE_DESCRIBE,REMARKS"
  1050. ,"PROJECT_NAME,ACTUAL_COST,COMPLETE_DESCRIBE,REMARKS"
  1051. };
  1052. String[] tableNames = {
  1053. "highway_prevention_plan_sumtable_view","highway_repair_comp_sumtable_view",
  1054. "highway_special_comp_sumtable_view","highway_emergency_comp_sumtable_view","highway_test_comp_sumtable_view",
  1055. "highway_scientific_comp_sumtable_view","highway_equipment_overhaul_comp_sumtable_view","highway_reserve_fees_sumtable_view"};
  1056. int[] startRowIndexs = {4,4,3,4,3,3,3,4};
  1057. int[] tabletype = {6,6,6,6,6,6,6,7};
  1058. int[] totalRange = {6,6,3,6,4,4,4,4};
  1059. String[][][] funcArrys = {
  1060. {
  1061. {"null","ACTUAL_QUANTITIES","\"\""}
  1062. ,{"percent","PERCENT","IF(ISERROR((J#row#/H#row#)*100),\"\",(J#row#/H#row#)*100)"}
  1063. ,{"null","REMARKS","\"\""}
  1064. },
  1065. {
  1066. {"null","ACTUAL_QUANTITIES","\"\""}
  1067. ,{"percent","PERCENT","IF(ISERROR((J#row#/H#row#)*100),\"\",(J#row#/H#row#)*100)"}
  1068. ,{"null","REMARKS","\"\""}
  1069. },
  1070. {
  1071. {"percent","PERCENT","IF(ISERROR((F#row#/E#row#)*100),\"\",(F#row#/E#row#)*100)"}
  1072. ,{"null","COMPLETE_DESCRIBE","\"\""}
  1073. ,{"null","REMARKS","\"\""}
  1074. },
  1075. {
  1076. {"null","ACTUAL_QUANTITIES","\"\""}
  1077. ,{"percent","PERCENT","IF(ISERROR((J#row#/H#row#)*100),\"\",(J#row#/H#row#)*100)"}
  1078. ,{"null","REMARKS","\"\""}
  1079. },
  1080. {
  1081. {"percent","PERCENT","IF(ISERROR((G#row#/F#row#)*100),\"\",(G#row#/F#row#)*100)"}
  1082. ,{"null","COMPLETE_DESCRIBE","\"\""}
  1083. ,{"null","REMARKS","\"\""}
  1084. },
  1085. {
  1086. {"percent","PERCENT","IF(ISERROR((G#row#/F#row#)*100),\"\",(G#row#/F#row#)*100)"}
  1087. ,{"null","COMPLETE_DESCRIBE","\"\""}
  1088. ,{"null","REMARKS","\"\""}
  1089. },
  1090. {
  1091. {"percent","PERCENT","IF(ISERROR((G#row#/F#row#)*100),\"\",(G#row#/F#row#)*100)"}
  1092. ,{"null","COMPLETE_DESCRIBE","\"\""}
  1093. ,{"null","REMARKS","\"\""}
  1094. },{
  1095. {"null","COMPLETE_DESCRIBE","\"\""}
  1096. ,{"null","REMARKS","\"\""}
  1097. }
  1098. };
  1099. PageData pd = new PageData();
  1100. for (int i = 0; i < tableNames.length; i++) {
  1101. PageData data = new PageData();
  1102. pd.put("type", tableNames[i]);
  1103. pd.put("YEAR", param.get("YEAR"));
  1104. pd.put("table", "oa_department_"+param.get("YEAR"));
  1105. List<PageData> list = annualPlanCompService.getProjectData(pd);
  1106. data.put("list", list);
  1107. data.put("modelName", modelNames[i]);
  1108. data.put("keyStr", keyStrs[i]);
  1109. data.put("startRowIndex", startRowIndexs[i]);
  1110. data.put("tabletype", tabletype[i]);
  1111. data.put("funcArry", funcArrys[i]);
  1112. data.put("totalRange", totalRange[i]);
  1113. data.put("totalCost", "");
  1114. if (tabletype[i]==7) {
  1115. String totalCost = annualPlanCompService.getFeesTotalCost(Integer.parseInt(param.getString("YEAR"))-1+"");
  1116. data.put("totalCost", totalCost);
  1117. }
  1118. data.put("pd", pd);
  1119. result.add(data);
  1120. }
  1121. return result;
  1122. }
  1123. /**
  1124. * 格式化金额
  1125. * @param cost_num
  1126. * @return
  1127. */
  1128. public double formatNum(double cost_num){
  1129. String planstr = "";
  1130. if(cost_num < 10){
  1131. planstr = String.format("%.1f", cost_num);
  1132. }
  1133. else{
  1134. planstr = String.format("%.0f", cost_num);
  1135. }
  1136. cost_num = Double.parseDouble(planstr);
  1137. return cost_num;
  1138. }
  1139. }