RcMonthProgressController.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. package com.zhcs.dt.controller.information.monthProgress;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import javax.annotation.Resource;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import net.sf.json.JSONArray;
  11. import net.sf.json.JSONObject;
  12. import org.springframework.stereotype.Controller;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.ResponseBody;
  15. import org.springframework.web.servlet.ModelAndView;
  16. import com.zhcs.dt.controller.base.BaseController;
  17. import com.zhcs.dt.entity.Page;
  18. import com.zhcs.dt.service.information.annualPlan.DownloadZip;
  19. import com.zhcs.dt.service.information.annualPlan.MultExcelUtils;
  20. import com.zhcs.dt.service.information.monthProgress.MonthProgressManager;
  21. import com.zhcs.dt.service.information.monthProgress.RcMonthProgressManager;
  22. import com.zhcs.dt.util.AppUtil;
  23. import com.zhcs.dt.util.Jurisdiction;
  24. import com.zhcs.dt.util.PageData;
  25. import com.zhcs.dt.util.Tools;
  26. /**
  27. * @author yuanfei
  28. * @date 2019年2月22日
  29. * @desc 预防养护
  30. */
  31. @Controller
  32. @RequestMapping(value="/daily")
  33. public class RcMonthProgressController extends BaseController{
  34. @Resource(name="rcmonthProgressService")
  35. private RcMonthProgressManager rcmonthProgressService;
  36. @Resource(name="monthProgressService")
  37. private MonthProgressManager monthProgressService;
  38. private String[] month = {"1","2","3","4","5","6","7","8","9","10","11","12"};
  39. private String[] commontype = {"CLEAN_COST","PATROL_COST","SUBGRADE_COST","PAVEMENT_COST","BRIDGE_COST","CULVERT_COST",
  40. "TUNNEL_COST","GREEN_COST","SAFE_COST","LINE_COST","CAR_COST","EMERGENCY_COST"};
  41. /**月度列表
  42. * @param page
  43. * @throws Exception
  44. */
  45. @RequestMapping(value="/list")
  46. public ModelAndView list(Page page) throws Exception{
  47. logBefore(logger, Jurisdiction.getUsername()+"应急养护月度报告");
  48. //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
  49. ModelAndView mv = this.getModelAndView();
  50. PageData pd = new PageData();
  51. pd = this.getPageData();
  52. PageData userInfo = monthProgressService.getCompanyAndRoad(Jurisdiction.getUsername().toString()); //通过username获取公司和路段
  53. //通过ROLE_ID获取角色
  54. String roleName = monthProgressService.getRoleName(userInfo.get("ROLE_ID").toString());
  55. pd = this.getPageData();
  56. String keywords = pd.getString("keywords"); //关键词检索条件
  57. if(null != keywords && !"".equals(keywords)){
  58. pd.put("keywords", keywords.trim());
  59. }
  60. if(userInfo.get("COMPANY") != null){
  61. pd.put("COMPANY", userInfo.get("COMPANY"));
  62. }
  63. //page.setPd(pd);
  64. List<PageData> varList = rcmonthProgressService.getReportlist(pd); //列出月度报告
  65. mv.setViewName("information/monthProgress/rc/monthProgress_list");
  66. mv.addObject("varList", varList);
  67. mv.addObject("pd", pd);
  68. mv.addObject("userInfo", userInfo);
  69. mv.addObject("roleName", roleName);
  70. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  71. return mv;
  72. }
  73. /**去新增页面
  74. * @param
  75. * @throws Exception
  76. */
  77. @RequestMapping(value="/goAdd")
  78. public ModelAndView goAdd()throws Exception{
  79. ModelAndView mv = this.getModelAndView();
  80. PageData pd = new PageData();
  81. pd = this.getPageData();
  82. String company = pd.get("COMPANY").toString();
  83. mv.setViewName("information/monthProgress/rc/monthProgress_add");
  84. mv.addObject("company", company);
  85. mv.addObject("msg", "save");
  86. mv.addObject("pd", pd);
  87. return mv;
  88. }
  89. /**新增报告
  90. * @param
  91. * @throws Exception
  92. */
  93. @RequestMapping(value="/saveNewReport")
  94. public ModelAndView saveNewReport() throws Exception{
  95. logBefore(logger, Jurisdiction.getUsername()+"新增预防养护月报");
  96. //List<PageData> reportList = new ArrayList<PageData>();
  97. ModelAndView mv = this.getModelAndView();
  98. PageData pd = new PageData();
  99. pd = this.getPageData();
  100. String planID = this.get32UUID();
  101. String companyid = monthProgressService.getCompanyid(pd.get("COMPANY"));
  102. pd.put("COMPANY_ID", companyid);
  103. pd.put("ID", planID);//主键
  104. pd.put("NAME", pd.get("YEAR")+"年"+pd.get("COMPANY")+"月度养护报告");
  105. pd.put("CTIME", Tools.date2Str(new Date())); //创建时间
  106. pd.put("MTIME", Tools.date2Str(new Date())); //修改时间
  107. pd.put("STATUS", "新建"); //创建时间
  108. rcmonthProgressService.addMonthlyReport(pd); //新建月度养护报告
  109. mv.addObject("pd", pd);
  110. mv.addObject("msg","success");
  111. mv.setViewName("save_result");
  112. return mv;
  113. }
  114. /**列表
  115. * @param page
  116. * @throws Exception
  117. */
  118. @RequestMapping(value="/showTable")
  119. public ModelAndView showTable() throws Exception{
  120. logBefore(logger, Jurisdiction.getUsername()+"月度预防养护");
  121. //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
  122. ModelAndView mv = this.getModelAndView();
  123. PageData pd = this.getPageData();
  124. List<PageData> monthVarList = new ArrayList<PageData>(); //列出月度信息
  125. List<PageData> yearRoadList = new ArrayList<PageData>(); //列出道路年度汇总
  126. List<PageData> roadList = rcmonthProgressService.listRoadInfo(pd); //按公司查询出有日常养护计划的路段信息
  127. if(roadList.size() > 0){
  128. if(pd.get("ROAD_ID") == null && roadList.get(0) != null){
  129. pd.put("ROAD_ID", roadList.get(0).get("ROAD_ID"));
  130. }
  131. PageData plancost = rcmonthProgressService.listPlanByRoad(pd); //按路段查询计划费用
  132. if(plancost != null){
  133. pd.put("ROAD_ID", plancost.get("ROAD_ID"));
  134. pd.put("ROAD", plancost.get("ROAD"));
  135. List<PageData> monthList = rcmonthProgressService.listAll(pd); //列出道路月度信息
  136. Map<String, PageData> monthMap = new HashMap<String, PageData>();
  137. PageData tempPd = new PageData();
  138. for(String temptype : commontype){
  139. monthMap.put(temptype, tempPd);
  140. }
  141. for(Map.Entry<String, PageData> entry : monthMap.entrySet()){
  142. PageData tempPd1 = new PageData();
  143. tempPd1.put("type", entry.getKey());
  144. for(PageData monthdt : monthList){
  145. String type = monthdt.get("TYPE").toString();
  146. String month = monthdt.get("MONTH").toString();
  147. if(entry.getKey().equalsIgnoreCase(type)){
  148. if(monthdt.get("ACTUAL_COST") != null){
  149. Double paycost = Double.parseDouble(monthdt.get("ACTUAL_COST").toString());
  150. Double plancostByType = Double.parseDouble(plancost.get(type).toString());
  151. double RATIO = (paycost/plancostByType);
  152. tempPd1.put("RATIO"+"_"+type+"_"+month, RATIO);
  153. }
  154. tempPd1.put("ACTUAL_COST"+"_"+type+"_"+month, monthdt.get("ACTUAL_COST"));
  155. tempPd1.put("PAY_COST"+"_"+type+"_"+month, monthdt.get("PAY_COST"));
  156. }
  157. }
  158. pd.put("TYPE", entry.getKey());
  159. PageData yearListByType = rcmonthProgressService.findSumByType(pd); //汇总
  160. if(yearListByType != null){
  161. tempPd1.put("SUM_ACTUAL_COST"+"_"+entry.getKey(), yearListByType.get("SUM_ACTUAL_COST"));
  162. tempPd1.put("SUM_PAY_COST"+"_"+entry.getKey(), yearListByType.get("SUM_PAY_COST"));
  163. }
  164. monthVarList.add(tempPd1);
  165. }
  166. yearRoadList = rcmonthProgressService.findSumByCompanyAndRoad(pd);
  167. }
  168. mv.addObject("plancost", plancost);
  169. }
  170. mv.setViewName("information/monthProgress/rc/dailyCompletion_list");
  171. mv.addObject("monthVarList", monthVarList);
  172. mv.addObject("roadList", roadList);
  173. mv.addObject("yearRoadList", JSONArray.fromObject(yearRoadList));
  174. mv.addObject("pd", pd);
  175. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  176. return mv;
  177. }
  178. /**列表
  179. * @param page
  180. * @throws Exception
  181. */
  182. @RequestMapping(value="/showTable2")
  183. public ModelAndView showTable2() throws Exception{
  184. logBefore(logger, Jurisdiction.getUsername()+"月度预防养护");
  185. ModelAndView mv = this.getModelAndView();
  186. PageData pd = this.getPageData();
  187. PageData plancost = rcmonthProgressService.listPlanByRoad(pd); //按路段查询计划费用
  188. List<PageData> monthVarList = new ArrayList<PageData>(); //列出月度信息
  189. List<PageData> yearRoadList = new ArrayList<PageData>(); //列出道路年度汇总
  190. if(plancost != null){
  191. List<PageData> monthList = rcmonthProgressService.listAll(pd); //列出道路月度信息
  192. Map<String, PageData> monthMap = new HashMap<String, PageData>();
  193. PageData tempPd = new PageData();
  194. for(String temptype : commontype){
  195. monthMap.put(temptype, tempPd);
  196. }
  197. for(Map.Entry<String, PageData> entry : monthMap.entrySet()){
  198. PageData tempPd1 = new PageData();
  199. tempPd1.put("type", entry.getKey());
  200. for(PageData monthdt : monthList){
  201. String type = monthdt.get("TYPE").toString();
  202. String month = monthdt.get("MONTH").toString();
  203. if(entry.getKey().equalsIgnoreCase(type)){
  204. if(monthdt.get("ACTUAL_COST") != null && plancost.get(type)!= null){
  205. Double paycost = Double.parseDouble(monthdt.get("ACTUAL_COST").toString());
  206. Double plancostByType = Double.parseDouble(plancost.get(type).toString());
  207. double RATIO = (paycost/plancostByType);
  208. tempPd1.put("RATIO"+"_"+type+"_"+month, RATIO);
  209. }
  210. tempPd1.put("ACTUAL_COST"+"_"+type+"_"+month, monthdt.get("ACTUAL_COST"));
  211. tempPd1.put("PAY_COST"+"_"+type+"_"+month, monthdt.get("PAY_COST"));
  212. }
  213. }
  214. pd.put("TYPE", entry.getKey());
  215. PageData yearListByType = rcmonthProgressService.findSumByType(pd); //汇总
  216. if(yearListByType != null){
  217. tempPd1.put("SUM_ACTUAL_COST"+"_"+entry.getKey(), yearListByType.get("SUM_ACTUAL_COST"));
  218. tempPd1.put("SUM_PAY_COST"+"_"+entry.getKey(), yearListByType.get("SUM_PAY_COST"));
  219. }
  220. monthVarList.add(tempPd1);
  221. }
  222. yearRoadList = rcmonthProgressService.findSumByCompanyAndRoad(pd);
  223. }
  224. //设置查询oa_department的动态表名
  225. pd.put("table", "oa_department_"+pd.getString("YEAR").toString());
  226. List<PageData> companyRoadList = monthProgressService.getCompanyRoadList(pd);
  227. Map<String,List<String>> companyRoad = new HashMap<String,List<String>>();
  228. List<String> companyList = new ArrayList<String>();
  229. for(PageData tpd : companyRoadList){
  230. if(tpd.get("PARENT_ID").equals("0")){
  231. companyList.add(tpd.get("NAME").toString());
  232. List<String> roadList = new ArrayList<String>();
  233. for(PageData tempPd : companyRoadList){
  234. if(tempPd.get("PARENT_ID").equals(tpd.get("DEPARTMENT_ID"))){
  235. roadList.add(tempPd.get("NAME").toString());
  236. }
  237. }
  238. companyRoad.put(tpd.get("NAME").toString(), roadList);
  239. }
  240. }
  241. List<String> troadList = new ArrayList<String>();
  242. troadList=companyRoad.get(pd.get("COMPANY"));
  243. mv.addObject("companyList", companyList);
  244. mv.addObject("companyRoad", JSONArray.fromObject(companyRoad));
  245. mv.addObject("roadList", troadList);
  246. mv.addObject("company", pd.get("COMPANY"));
  247. mv.addObject("road", pd.get("ROAD"));
  248. mv.setViewName("information/monthProgress/monthSumTable/dailyCompletion_list");
  249. mv.addObject("monthVarList", monthVarList);
  250. mv.addObject("plancost", plancost);
  251. mv.addObject("yearRoadList", JSONArray.fromObject(yearRoadList));
  252. mv.addObject("pd", pd);
  253. mv.addObject("QX",Jurisdiction.getHC()); //按钮权限
  254. return mv;
  255. }
  256. /**
  257. * 保存
  258. * @throws Exception
  259. */
  260. @RequestMapping(value = "/saveData")
  261. @ResponseBody
  262. public Object saveData(String data,String TABLETYPE) throws Exception{
  263. //ModelAndView mv = this.getModelAndView();
  264. PageData pd = new PageData();
  265. pd = this.getPageData();
  266. JSONArray jsonarray = JSONArray.fromObject(data);
  267. Map<String,Object> map = dealWithData(pd,jsonarray);
  268. return AppUtil.returnObject(new PageData(), map);
  269. }
  270. /**
  271. * 处理新增编辑数据
  272. */
  273. @ResponseBody
  274. public Map<String,Object> dealWithData(PageData pd,JSONArray jsonarray) throws Exception{
  275. for (Object object : jsonarray) {
  276. JSONObject arrMap = JSONObject.fromObject(object);
  277. pd.put("YEAR", arrMap.get("YEAR"));
  278. pd.put("COMPANY", arrMap.get("COMPANY"));
  279. pd.put("COMPANY_ID", arrMap.get("COMPANY_ID"));
  280. pd.put("ROAD", arrMap.get("ROAD"));
  281. pd.put("ROAD_ID", arrMap.get("ROAD_ID"));
  282. pd.put("TYPE", arrMap.get("TYPE"));
  283. String type = arrMap.get("TYPE").toString() + "_";
  284. rcmonthProgressService.deleteMonthRecord(pd);
  285. for (int i = 1; i < 13; i++) {
  286. pd.put("MONTH",i);
  287. if ((!arrMap.get("ACTUAL_COST_"+type+i).equals(""))||(!arrMap.get("PAY_COST_"+type+i).equals(""))) {
  288. pd.put("ACTUAL_COST", arrMap.get("ACTUAL_COST_"+type+i).equals("")?null:arrMap.get("ACTUAL_COST_"+type+i));
  289. pd.put("PAY_COST", arrMap.get("PAY_COST_"+type+i).equals("")?null:arrMap.get("PAY_COST_"+type+i));
  290. pd.put("RATIO", arrMap.get("RATIO_"+type+i).equals("")?null:arrMap.get("RATIO_"+type+i));
  291. rcmonthProgressService.insertMonthRecord(pd);
  292. }
  293. }
  294. }
  295. Map<String,Object> map = new HashMap<String,Object>();
  296. map.put("msg","success");
  297. return map;
  298. }
  299. /**删除月度报告
  300. * @param
  301. * @throws Exception
  302. */
  303. @RequestMapping(value="/delMonthlyReport")
  304. @ResponseBody
  305. public Object delMonthlyReport()throws Exception{
  306. Map<String,String> map = new HashMap<String,String>();
  307. PageData pd = new PageData();
  308. pd = this.getPageData();
  309. rcmonthProgressService.delMonthlyReport(pd); //删除月度报告
  310. rcmonthProgressService.delMonthlyCompletion(pd); //删除对应月度完成情况
  311. map.put("result", "success");
  312. return AppUtil.returnObject(new PageData(), map);
  313. }
  314. @RequestMapping("/excelExport")
  315. public String excelExport(HttpServletRequest request,HttpServletResponse response) throws Exception{
  316. String path = request.getSession().getServletContext().getRealPath("/uploadFiles/file");
  317. ModelAndView mv = this.getModelAndView();
  318. PageData pd = new PageData();
  319. pd = this.getPageData();
  320. List<String> result = new ArrayList<String>();
  321. PageData data = new PageData();
  322. data.put("keyStr", "TYPE,PLAN_COST,MAKER"
  323. + ",ACTUAL_COST_1,PAY_COST_1,RATIO_1,ACTUAL_COST_2,PAY_COST_2,RATIO_2,ACTUAL_COST_3,PAY_COST_3,RATIO_3"
  324. + ",ACTUAL_COST_4,PAY_COST_4,RATIO_4,ACTUAL_COST_5,PAY_COST_5,RATIO_5,ACTUAL_COST_6,PAY_COST_6,RATIO_6"
  325. + ",ACTUAL_COST_7,PAY_COST_7,RATIO_7,ACTUAL_COST_8,PAY_COST_8,RATIO_8,ACTUAL_COST_9,PAY_COST_9,RATIO_9"
  326. + ",ACTUAL_COST_10,PAY_COST_10,RATIO_10,ACTUAL_COST_11,PAY_COST_11,RATIO_11,ACTUAL_COST_12,PAY_COST_12,RATIO_12"
  327. + ",ACTUAL_COST,PAY_COST,RATIO");
  328. String[][] funcArry = {
  329. {"percent","RATIO_1","IF(ISERROR((F#row#/C#row#)),\"\",(F#row#/C#row#))"}
  330. ,{"percent","RATIO_2","IF(ISERROR((I#row#/C#row#)),\"\",(I#row#/C#row#))"}
  331. ,{"percent","RATIO_3","IF(ISERROR((L#row#/C#row#)),\"\",(L#row#/C#row#))"}
  332. ,{"percent","RATIO_4","IF(ISERROR((O#row#/C#row#)),\"\",(O#row#/C#row#))"}
  333. ,{"percent","RATIO_5","IF(ISERROR((R#row#/C#row#)),\"\",(R#row#/C#row#))"}
  334. ,{"percent","RATIO_6","IF(ISERROR((U#row#/C#row#)),\"\",(U#row#/C#row#))"}
  335. ,{"percent","RATIO_7","IF(ISERROR((X#row#/C#row#)),\"\",(X#row#/C#row#))"}
  336. ,{"percent","RATIO_8","IF(ISERROR((AA#row#/C#row#)),\"\",(AA#row#/C#row#))"}
  337. ,{"percent","RATIO_9","IF(ISERROR((AD#row#/C#row#)),\"\",(AD#row#/C#row#))"}
  338. ,{"percent","RATIO_10","IF(ISERROR((AG#row#/C#row#)),\"\",(AG#row#/C#row#))"}
  339. ,{"percent","RATIO_11","IF(ISERROR((AJ#row#/C#row#)),\"\",(AJ#row#/C#row#))"}
  340. ,{"percent","RATIO_12","IF(ISERROR((AM#row#/C#row#)),\"\",(AM#row#/C#row#))"}
  341. ,{"sum","ACTUAL_COST","SUM(E#row#,H#row#,K#row#,N#row#,Q#row#,T#row#,W#row#,Z#row#,AC#row#,AF#row#,AI#row#,AL#row#)"}
  342. ,{"sum","PAY_COST","SUM(F#row#,I#row#,L#row#,O#row#,R#row#,U#row#,X#row#,AA#row#,AD#row#,AG#row#,AJ#row#,AM#row#)"}
  343. ,{"percent","RATIO","IF(ISERROR((AP#row#/C#row#)),\"\",(AP#row#/C#row#))"}
  344. };
  345. data.put("funcArry", funcArry);
  346. data.put("tabletype", 0);
  347. data.put("totalRange", 1);
  348. data.put("startRowIndex", 3);
  349. List<PageData> exceldata = setExcelData(pd);
  350. MultExcelUtils ex = new MultExcelUtils();
  351. String excelpath = ex.exportDailyExcel(pd.getString("exportname")+".xlsx",path,response,exceldata,data);
  352. result.add(excelpath);
  353. //zip压缩下载
  354. DownloadZip.downloadZip(response,request,result,path);
  355. return null;
  356. }
  357. public List<PageData> setExcelData(PageData param) throws Exception {
  358. List<PageData> result = new ArrayList<PageData>();
  359. List<PageData> plancostList = rcmonthProgressService.listPlanByRoads(param); //按路段查询计划费用
  360. for(PageData plancost : plancostList){
  361. param.put("ROAD_ID", plancost.get("ROAD_ID"));
  362. List<PageData> list = rcmonthProgressService.listAll(param); //列出道路月度信息
  363. plancost.put("monthInfo", list);
  364. }
  365. result = plancostList;
  366. return result;
  367. }
  368. }