2c31bf97705a3124e43d7e313c72b293917c016c.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. package cn.com.goldenwater.dcproj.service.impl.general;
  2. import cn.com.goldenwater.dcproj.constValue.SplitValue;
  3. import cn.com.goldenwater.dcproj.dao.BisInspAllDao;
  4. import cn.com.goldenwater.dcproj.dao.BisInspAllObjDao;
  5. import cn.com.goldenwater.dcproj.dao.BisInspPblmDao;
  6. import cn.com.goldenwater.dcproj.dao.BisInspRsvrRgstrDao;
  7. import cn.com.goldenwater.dcproj.dao.BisInspWtdstDao;
  8. import cn.com.goldenwater.dcproj.dao.GeneralDownloadDao;
  9. import cn.com.goldenwater.dcproj.dto.BisInspWtdstDetailDto;
  10. import cn.com.goldenwater.dcproj.model.BisInspAll;
  11. import cn.com.goldenwater.dcproj.model.BisInspAllRlation;
  12. import cn.com.goldenwater.dcproj.model.BisInspKeyRegister;
  13. import cn.com.goldenwater.dcproj.model.BisInspPblm;
  14. import cn.com.goldenwater.dcproj.param.BisInspPblmParam;
  15. import cn.com.goldenwater.dcproj.param.BisInspWtdstDtoListParam;
  16. import cn.com.goldenwater.dcproj.param.TypeExportParam;
  17. import cn.com.goldenwater.dcproj.param.TypeParam;
  18. import cn.com.goldenwater.dcproj.service.GeneralDownloadService;
  19. import cn.com.goldenwater.dcproj.service.OlBisInspOrgService;
  20. import cn.com.goldenwater.dcproj.utils.ZipUtil;
  21. import cn.com.goldenwater.dcproj.utils.export.CreateExcelHelper;
  22. import cn.com.goldenwater.dcproj.utils.export.CreateRyTables;
  23. import cn.com.goldenwater.dcproj.utils.export.CreateShTables;
  24. import cn.com.goldenwater.dcproj.utils.export.TableEnum;
  25. import cn.com.goldenwater.dcproj.utils.export.template.CreateRyTablesByTemplate;
  26. import cn.com.goldenwater.dcproj.utils.export.template.CreateSkTablesByTemplate;
  27. import cn.com.goldenwater.util.common.FileUtils;
  28. import com.github.pagehelper.PageHelper;
  29. import com.github.pagehelper.PageInfo;
  30. import org.apache.commons.lang.StringUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.beans.factory.annotation.Value;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import java.io.File;
  36. import java.io.IOException;
  37. import java.io.PrintWriter;
  38. import java.text.SimpleDateFormat;
  39. import java.util.ArrayList;
  40. import java.util.Arrays;
  41. import java.util.Date;
  42. import java.util.List;
  43. import java.util.Map;
  44. import java.util.UUID;
  45. import java.util.stream.Collectors;
  46. import java.util.stream.Stream;
  47. /**
  48. * @ClassName GeneralDownloadServiceImpl
  49. * @Description 通用下载实现类
  50. * @Author liyz
  51. * @Date 2019/3/6 10:56
  52. * @Version 1.0
  53. **/
  54. @Service
  55. @Transactional(rollbackFor = Exception.class)
  56. public class GeneralDownloadServiceImpl implements GeneralDownloadService {
  57. private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  58. @Value("${export.basePath}")
  59. public String exportBasePath;
  60. @Autowired
  61. private CreateRyTables createRyTables;
  62. @Autowired
  63. private CreateRyTablesByTemplate createRyTablesByTemplate;
  64. @Autowired
  65. private CreateShTables createShTables;
  66. @Autowired
  67. private CreateExcelHelper createExcelHelper;
  68. @Autowired
  69. private BisInspAllObjDao bisInspAllObjDao;
  70. @Autowired
  71. private BisInspWtdstDao bisInspWtdstDao;
  72. @Autowired
  73. private BisInspRsvrRgstrDao bisInspRsvrRgstrDao;
  74. @Autowired
  75. private BisInspPblmDao bisInspPblmDao;
  76. @Autowired
  77. private CreateSkTablesByTemplate createSkTablesByTemplate;
  78. @Autowired
  79. private GeneralDownloadDao generalDownloadDao;
  80. @Autowired
  81. private BisInspAllDao bisInspAllDao;
  82. public GeneralDownloadServiceImpl() {
  83. super();
  84. }
  85. /**
  86. * 人饮相关
  87. *
  88. * @param typeExportParam typeExportParam
  89. * @param printWriter printWriter
  90. */
  91. @Override
  92. public void createExcel(TypeExportParam typeExportParam, PrintWriter printWriter) {
  93. if (StringUtils.isNotBlank(typeExportParam.getEngIds()) && StringUtils.isNotBlank(typeExportParam.getTableIds())) {
  94. try {
  95. printWriter.println("准备导出,开始创建导出目录<br>");
  96. String filePath = UUID.randomUUID().toString();
  97. String dir = exportBasePath + File.separator + filePath + File.separator;
  98. String zipFile = exportBasePath + File.separator + filePath + ".zip";
  99. FileUtils.mkFolder(dir);
  100. // String转List,表id不过滤
  101. List<String> tablesList = Arrays.asList(typeExportParam.getTableIds().split(SplitValue.DOUHAO_SPLIT));
  102. // String转List,engIds过滤
  103. List<String> endIdsList = Stream
  104. .of(typeExportParam.getEngIds().split(SplitValue.DOUHAO_SPLIT))
  105. // 过滤掉空字符串
  106. .filter(StringUtils::isNotBlank)
  107. // 转成集合
  108. .collect(Collectors.toList());
  109. int zipStatus = 0;
  110. // 如果合并
  111. if ("1".equals(typeExportParam.getSumState())) {
  112. zipStatus = initSumTable(tablesList, endIdsList, dir, printWriter, zipStatus);
  113. } else {
  114. zipStatus = initNotSumTable(tablesList, endIdsList, dir, printWriter, zipStatus);
  115. }
  116. if (zipStatus > 0) {
  117. // 指定压缩源,可以是目录或文件
  118. String src = dir;
  119. // 压缩包路径
  120. String archive = zipFile;
  121. // 压缩包注释
  122. String comment = "Java Zip SLDC";
  123. // 压缩文件或目录
  124. ZipUtil.zip(src, archive, comment);
  125. printWriter.write("创建完成。压缩完成。 <a href='/api/dc/gd/base/download/" + filePath + "' download>点击下载</a>");
  126. }
  127. } catch (IOException e) {
  128. e.printStackTrace();
  129. } finally {
  130. printWriter.close();
  131. }
  132. } else {
  133. printWriter.println("请选择地区和表");
  134. }
  135. }
  136. private int initSumTable(List<String> tablesList, List<String> endIdsList, String dir, PrintWriter printWriter, int zipStatus) {
  137. for (int j = 0; j < tablesList.size(); j++) {
  138. String tableId = tablesList.get(j);
  139. TableEnum tableEnum = TableEnum.getTypeByValue(tableId);
  140. String tableName = TableEnum.getNameByValue(tableId);
  141. try {
  142. printWriter.println(sdf.format(new Date()) + " 开始创建 " + tableName + ".xls" + "<br>");
  143. printWriter.flush();
  144. switch (tableEnum) {
  145. case T1:
  146. int zipStatusT1 = createRyTables.createBisInspSecsurveyVlgSumExcel(endIdsList, dir, tableName);
  147. printMessage(zipStatusT1, printWriter, tableName);
  148. zipStatus += zipStatusT1;
  149. break;
  150. case T2:
  151. int zipStatusT2 = createRyTables.createBisInspVlgdrinkFacOperSumExcel(endIdsList, dir, tableName);
  152. printMessage(zipStatusT2, printWriter, tableName);
  153. zipStatus += zipStatusT2;
  154. break;
  155. case T3:
  156. int zipStatusT3 = createRyTablesByTemplate.createBisInspWateruserInfoSumExcel(endIdsList, dir, tableName);
  157. printMessage(zipStatusT3, printWriter, tableName);
  158. zipStatus += zipStatusT3;
  159. break;
  160. case T4:
  161. int zipStatusT4 = createRyTablesByTemplate.createBisInspVlgdrinkProjManageSumExcel(endIdsList, dir, tableName);
  162. printMessage(zipStatusT4, printWriter, tableName);
  163. zipStatus += zipStatusT4;
  164. break;
  165. case T5:
  166. int zipStatusT5 = createRyTables.createBisInspProSourceProtectSumExcel(endIdsList, dir, tableName);
  167. printMessage(zipStatusT5, printWriter, tableName);
  168. zipStatus += zipStatusT5;
  169. break;
  170. case T6:
  171. int zipStatusT6 = createRyTablesByTemplate.createBisInspManageResponsibilitySumExcel(endIdsList, dir, tableName);
  172. printMessage(zipStatusT6, printWriter, tableName);
  173. zipStatus += zipStatusT6;
  174. break;
  175. default:
  176. break;
  177. }
  178. } catch (Exception e) {
  179. printWriter.close();
  180. e.printStackTrace();
  181. }
  182. }
  183. return zipStatus;
  184. }
  185. private int initNotSumTable(List<String> tablesList, List<String> endIdsList, String dir, PrintWriter printWriter, int zipStatus) {
  186. for (int i = 0; i < endIdsList.size(); i++) {
  187. String engId = endIdsList.get(i);
  188. String adCode = generalDownloadDao.getCodeByEngId(engId);
  189. String adName = createExcelHelper.getAdName(adCode);
  190. for (int j = 0; j < tablesList.size(); j++) {
  191. String tableId = tablesList.get(j);
  192. TableEnum tableEnum = TableEnum.getTypeByValue(tableId);
  193. String tableName = adName + TableEnum.getNameByValue(tableId);
  194. try {
  195. printWriter.println(sdf.format(new Date()) + " 开始创建 " + tableName + ".xls" + "<br>");
  196. printWriter.flush();
  197. switch (tableEnum) {
  198. case T1:
  199. int zipStatusT1 = createRyTables.createBisInspSecsurveyVlgExcel(engId, dir, tableName);
  200. printMessage(zipStatusT1, printWriter, tableName);
  201. zipStatus += zipStatusT1;
  202. break;
  203. case T2:
  204. int zipStatusT2 = createRyTables.createBisInspVlgdrinkFacOperExcel(engId, dir, tableName);
  205. printMessage(zipStatusT2, printWriter, tableName);
  206. zipStatus += zipStatusT2;
  207. break;
  208. case T3:
  209. int zipStatusT3 = createRyTablesByTemplate.createBisInspWateruserInfoExcel(engId, dir, tableName);
  210. printMessage(zipStatusT3, printWriter, tableName);
  211. zipStatus += zipStatusT3;
  212. break;
  213. case T4:
  214. int zipStatusT4 = createRyTablesByTemplate.createBisInspVlgdrinkProjManageExcel(engId, dir, tableName);
  215. printMessage(zipStatusT4, printWriter, tableName);
  216. zipStatus += zipStatusT4;
  217. break;
  218. case T5:
  219. int zipStatusT5 = createRyTables.createBisInspProSourceProtectExcel(engId, dir, tableName);
  220. printMessage(zipStatusT5, printWriter, tableName);
  221. zipStatus += zipStatusT5;
  222. break;
  223. case T6:
  224. int zipStatusT6 = createRyTablesByTemplate.createBisInspManageResponsibilityExcel(engId, dir, tableName);
  225. printMessage(zipStatusT6, printWriter, tableName);
  226. zipStatus += zipStatusT6;
  227. break;
  228. default:
  229. break;
  230. }
  231. // 这是一个所有的判断,最好是能够每张表都判断一次
  232. } catch (Exception e) {
  233. printWriter.close();
  234. e.printStackTrace();
  235. }
  236. }
  237. }
  238. return zipStatus;
  239. }
  240. private void printMessage(int zipStatus, PrintWriter printWriter, String tableName) {
  241. if (zipStatus > 0) {
  242. printWriter.println(sdf.format(new Date()) + " 完成创建 " + tableName + ".xls" + "<br>");
  243. printWriter.flush();
  244. } else {
  245. printWriter.println(sdf.format(new Date()) + " 此表暂无数据可导出" + "<br>");
  246. printWriter.flush();
  247. }
  248. }
  249. /**
  250. * 水毁相关
  251. *
  252. * @param typeExportParam typeExportParam
  253. * @param printWriter printWrite
  254. */
  255. @Override
  256. public void createShuiHuiExcel(TypeExportParam typeExportParam, PrintWriter printWriter) {
  257. if (StringUtils.isNotBlank(typeExportParam.getIds()) && StringUtils.isNotBlank(typeExportParam.getTableIds())) {
  258. try {
  259. // 获取adCodes
  260. String[] ids = typeExportParam.getIds().split(SplitValue.DOUHAO_SPLIT);
  261. List<String> adCodes = new ArrayList<>();
  262. for (String id : ids) {
  263. List<Map<String, Object>> listId = generalDownloadDao.getCodeById(id);
  264. if (listId.size() > 0) {
  265. adCodes.addAll(listId.stream().filter(x -> x.get("CODE") != null).map(x -> x.get("CODE").toString()).collect(Collectors.toList()));
  266. }
  267. }
  268. // 水毁的AdCodes 其实是WTDST_ID,需要转化一下
  269. List<String> adCodesList = adCodes
  270. .stream()
  271. .map(x -> (bisInspWtdstDao.get(x).getLocAd() + "").substring(0, 2))
  272. .distinct()
  273. .collect(Collectors.toList());
  274. String filePath = UUID.randomUUID().toString();
  275. String dir = exportBasePath + File.separator + filePath + File.separator;
  276. String zipFile = exportBasePath + File.separator + filePath + ".zip";
  277. FileUtils.mkFolder(dir);
  278. int i = 0;
  279. List<String> tablesList = Arrays.asList(typeExportParam.getTableIds().split(SplitValue.DOUHAO_SPLIT));
  280. for (String tableId : tablesList) {
  281. TableEnum tableEnum = TableEnum.getTypeByValue(tableId);
  282. switch (tableEnum) {
  283. case T7:
  284. if ("1".equals(typeExportParam.getSumState())) {
  285. typeExportParam.setAdCodes(null);
  286. i = createShTables.createBisInspWtdstDtoExcel(typeExportParam, printWriter, null, dir);
  287. } else {
  288. for (String adCode : adCodesList) {
  289. i = createShTables.createBisInspWtdstDtoExcel(typeExportParam, printWriter, adCode, dir);
  290. }
  291. }
  292. break;
  293. }
  294. }
  295. if (i == 0) {
  296. printWriter.println("暂无数据可导出。<br>");
  297. printWriter.flush();
  298. return;
  299. }
  300. // 指定压缩源,可以是目录或文件
  301. String src = dir;
  302. // 压缩包路径
  303. String archive = zipFile;
  304. // 压缩包注释
  305. String comment = "Java Zip SLDC";
  306. // 压缩文件或目录
  307. ZipUtil.zip(src, archive, comment);
  308. printWriter.write("创建完成。压缩完成。 <a href='/api/dc/gd/base/download/" + filePath + "' download>点击下载</a>");
  309. printWriter.flush();
  310. } catch (Exception e) {
  311. e.printStackTrace();
  312. }
  313. } else {
  314. printWriter.println("请选择地区和表");
  315. printWriter.flush();
  316. }
  317. printWriter.close();
  318. }
  319. /**
  320. * 水库相关
  321. *
  322. * @param typeExportParam typeExportParam
  323. * @param printWriter printWriter
  324. */
  325. @Override
  326. public void createShuiKuExcel(TypeExportParam typeExportParam, PrintWriter printWriter) {
  327. if (StringUtils.isNotBlank(typeExportParam.getIds()) && StringUtils.isNotBlank(typeExportParam.getTableIds())) {
  328. //导出
  329. try {
  330. TableEnum tableEnum = TableEnum.getTypeByValue("08");
  331. switch (tableEnum) {
  332. case T8:
  333. createSkTablesByTemplate.createBisInspRsvrRgstrPcDtoExcel(typeExportParam, printWriter);
  334. break;
  335. }
  336. } catch (Exception e) {
  337. e.printStackTrace();
  338. }
  339. } else {
  340. printWriter.println("请选择地区和表");
  341. printWriter.flush();
  342. }
  343. printWriter.close();
  344. }
  345. /**
  346. * 下载
  347. *
  348. * @param uuid 压缩包的名称
  349. */
  350. @Override
  351. public void downLoad(String uuid) {
  352. }
  353. //------------------------------- 其他业务方法 -------------------------------------------
  354. /**
  355. * 通过用户ID获取行政区划列表(截取前两位)
  356. *
  357. * @param presId 用户Id
  358. * @param ptype 类型 1水库 2人饮 3水毁
  359. * @return 行政区划(截取前两位)列表
  360. */
  361. @Override
  362. public String selectAdCodeByUserId(String presId, String ptype, String orgId) {
  363. return bisInspRsvrRgstrDao.selectAdCodeByUserId(presId, ptype, orgId);
  364. }
  365. @Override
  366. public String getPidByPersid(String persid, String type, String adCode) {
  367. if ("1".equals(type)) {
  368. type = "001";
  369. } else if ("2".equals(type)) {
  370. type = "002";
  371. } else if ("3".equals(type)) {
  372. type = "003";
  373. }
  374. List<BisInspAllRlation> list = bisInspAllObjDao.getIdByUserId(persid, type, adCode);
  375. if (list.size() > 0) {
  376. return list.get(0).getId();
  377. }
  378. return "000";
  379. }
  380. @Override
  381. public PageInfo<BisInspWtdstDetailDto> findDtoListAboutExport(BisInspWtdstDtoListParam p, TypeExportParam exp) {
  382. if (org.apache.commons.lang3.StringUtils.isNotBlank(p.getLocAd())) {
  383. exp.setAdCodes(p.getLocAd().substring(0, 2));
  384. }
  385. exp.setPageNum(p.getPageNum());
  386. exp.setPageSize(p.getPageSize());
  387. PageHelper.startPage(exp.getPageNum(), exp.getPageSize());
  388. List<BisInspWtdstDetailDto> list = bisInspWtdstDao.findDtoListAboutExport(exp);
  389. for (BisInspWtdstDetailDto dto : list) {
  390. BisInspPblmParam param = new BisInspPblmParam();
  391. param.setRegid(dto.getWtdstId());
  392. param.setObjId(dto.getObjId());
  393. List<BisInspPblm> pblms = bisInspPblmDao.findList(param);
  394. dto.setList(pblms);
  395. dto.setProblmNum(pblms.size());
  396. }
  397. return new PageInfo<BisInspWtdstDetailDto>(list);
  398. }
  399. @Autowired
  400. private OlBisInspOrgService olBisInspOrgService;
  401. @Override
  402. public List<BisInspAll> getRyNode(String userid, String orgType, String orgId) {
  403. String province = olBisInspOrgService.getProvince(orgId);
  404. List<BisInspAll> list = bisInspAllDao.getAllNode(userid, orgType, province, orgId, "", "", "", "","","");
  405. if (list.size() > 0) {
  406. List<BisInspAll> listEng = generalDownloadDao.getRyNode();
  407. list.addAll(listEng);
  408. }
  409. return list;
  410. }
  411. @Override
  412. public List<BisInspAll> getRyNodeProvincial(String userid, String orgType, String level, String province) {
  413. return generalDownloadDao.getRyNodeProvincial(userid, orgType, level, province);
  414. }
  415. @Override
  416. public List<BisInspAll> getSzyNodeProvincial(String userid) {
  417. return generalDownloadDao.getSzyNodeProvincial(userid);
  418. }
  419. @Override
  420. public List<BisInspAll> getLyNode(String userid, String orgType, String orgId) {
  421. return generalDownloadDao.getLyNode(userid, orgType, orgId);
  422. }
  423. /**
  424. * @see cn.com.goldenwater.dcproj.controller.rsvr.BisInspRsvrRgstrController
  425. */
  426. @Override
  427. public List<BisInspKeyRegister> getGcNode(TypeParam typeParam) {
  428. return generalDownloadDao.getGcNode(typeParam);
  429. }
  430. @Override
  431. public List<BisInspAll> getRsraqgNodeProvincial(String userid, String level, String province) {
  432. return generalDownloadDao.getRsraqgNodeProvincial(userid, level, province);
  433. }
  434. @Override
  435. public List<BisInspAll> getNodeProvincialExceptGroup(Map<String, String> param) {
  436. return generalDownloadDao.getNodeProvincialExceptGroup(param);
  437. }
  438. }