62643d169a8596cd17913ff7f39150dc1777a7b4.svn-base 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718
  1. package cn.com.goldenwater.dcproj.service.impl;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.common.WtprjConvert;
  4. import cn.com.goldenwater.dcproj.dao.BisInspPblmDao;
  5. import cn.com.goldenwater.dcproj.dao.BisInspWtprjUnitDao;
  6. import cn.com.goldenwater.dcproj.model.*;
  7. import cn.com.goldenwater.dcproj.param.BisInspPblmParam;
  8. import cn.com.goldenwater.dcproj.param.BisInspWtprjUnitParam;
  9. import cn.com.goldenwater.dcproj.param.GwComFileParam;
  10. import cn.com.goldenwater.dcproj.service.*;
  11. import cn.com.goldenwater.dcproj.util.PdfPTableUtil;
  12. import cn.com.goldenwater.dcproj.utils.Builder;
  13. import cn.com.goldenwater.dcproj.utils.Constant;
  14. import cn.com.goldenwater.dcproj.utils.DateUtils;
  15. import cn.com.goldenwater.dcproj.utils.InspPblmUtils;
  16. import cn.com.goldenwater.id.util.UuidUtil;
  17. import com.itextpdf.text.*;
  18. import com.itextpdf.text.pdf.BaseFont;
  19. import com.itextpdf.text.pdf.PdfPCell;
  20. import com.itextpdf.text.pdf.PdfPTable;
  21. import com.itextpdf.text.pdf.PdfWriter;
  22. import org.apache.commons.collections.MapUtils;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.slf4j.Logger;
  25. import org.slf4j.LoggerFactory;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.beans.factory.annotation.Value;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import javax.servlet.http.HttpServletResponse;
  31. import java.io.IOException;
  32. import java.io.OutputStream;
  33. import java.net.URLEncoder;
  34. import java.util.List;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. /**
  38. * @author lhc
  39. * @date 2021-4-14
  40. */
  41. @Service
  42. @Transactional
  43. public class BisInspWtprjUnitServiceImpl extends AbstractCrudService<BisInspWtprjUnit, BisInspWtprjUnitParam> implements BisInspWtprjUnitService {
  44. private Logger logger = LoggerFactory.getLogger(getClass());
  45. @Autowired
  46. private BisInspWtprjUnitDao bisInspWtprjUnitDao;
  47. @Autowired
  48. private BisInspWtprjSectionService bisInspWtprjSectionService;
  49. @Autowired
  50. private BisInspWtprjRegisterService bisInspWtprjRegisterService;
  51. @Autowired
  52. private BisInspPblmService bisInspPblmService;
  53. @Autowired
  54. private GwComFileService gwComFileService;
  55. @Value("${web.upload-path}")
  56. public String webUploadPath;
  57. @Value("${export.templatePath}")
  58. private String templatePath;
  59. @Autowired
  60. private BisInspPblmDao bisInspPblmDao;
  61. public BisInspWtprjUnitServiceImpl(BisInspWtprjUnitDao bisInspWtprjUnitDao) {
  62. super(bisInspWtprjUnitDao);
  63. this.bisInspWtprjUnitDao = bisInspWtprjUnitDao;
  64. }
  65. @Override
  66. public int insert(BisInspWtprjUnit bisInspWtprjUnit) {
  67. String uuid = UuidUtil.uuid(); // 生成uuid
  68. bisInspWtprjUnit.setId(uuid);
  69. bisInspWtprjUnit.setIntm(new Date());
  70. bisInspWtprjUnit.setUptm(new Date());
  71. bisInspWtprjUnit.setDataStat("0");
  72. int ret = this.bisInspWtprjUnitDao.insert(bisInspWtprjUnit);
  73. updateRgstrState(bisInspWtprjUnit.getId());
  74. return ret;
  75. }
  76. @Override
  77. public int update(BisInspWtprjUnit bisInspWtprjUnit) {
  78. // 更新登记表
  79. bisInspWtprjUnit.setUptm(new Date());
  80. int ret = this.bisInspWtprjUnitDao.update(bisInspWtprjUnit);
  81. updateRgstrState(bisInspWtprjUnit.getId());
  82. return ret;
  83. }
  84. void updateRgstrState(String unitId) {
  85. BisInspWtprjRegister rgstr = bisInspWtprjUnitDao.getRgstrById(unitId);
  86. Optional.ofNullable(rgstr).ifPresent(r -> {
  87. if (!Constant.STRING_TWO.equals(r.getState()) &&
  88. !Constant.STRING_ONE.equals(r.getState())) {
  89. r.setUptm(new Date());
  90. r.setState(Constant.STRING_ONE);
  91. // 更新登记表状态
  92. bisInspWtprjRegisterService.update(r);
  93. }
  94. });
  95. }
  96. @Override
  97. public int delete(String id) {
  98. BisInspWtprjRegister bisInspWtprjRegister = bisInspWtprjUnitDao.getRgstrById(id);
  99. if (bisInspWtprjRegister != null) {
  100. bisInspPblmService.deleteBy(Builder.of(BisInspPblmParam::new)
  101. .with(BisInspPblmParam::setObjId, bisInspWtprjRegister.getObjId())
  102. .with(BisInspPblmParam::setRegid, id)
  103. .build());
  104. }
  105. return this.bisInspWtprjUnitDao.delete(id);
  106. }
  107. @Override
  108. public List<BisInspWtprjUnit> listBySecId(String secId) {
  109. return bisInspWtprjUnitDao.findList(Builder.of(BisInspWtprjUnitParam::new).with(BisInspWtprjUnitParam::setSecId, secId).build());
  110. }
  111. @Override
  112. public List<Map<String, Object>> getResponsibility(String id) {
  113. // 1. 获取 公司信息
  114. BisInspWtprjUnit unit = get(id);
  115. BisInspWtprjSection section = bisInspWtprjSectionService.get(unit.getSecId());
  116. List<BisInspPblm> bisInspPblmList = bisInspPblmDao.list(Builder.of(BisInspPblmParam::new)
  117. .with(BisInspPblmParam::setObjId, section.getObjId())
  118. .with(BisInspPblmParam::setRegid, id).build());
  119. List<Map<String, Object>> res = new ArrayList<>();
  120. int index = 0;
  121. while (index < 3) {
  122. int finalIndex = index;
  123. Long yibanCount = bisInspPblmList.stream().filter(p -> String.valueOf(finalIndex).equals(p.getInspPblmCate())).count();
  124. Map<String, Object> map = new HashMap(5);
  125. map.put("level", String.valueOf(finalIndex));
  126. map.put("count", yibanCount);
  127. zhenggai(map, unit.getNature());
  128. res.add(map);
  129. index++;
  130. }
  131. return res;
  132. }
  133. // 责任追究方式监理、施工、质量检测
  134. // 1:责令整改 2:约谈 3:停工整改 4:经济责任 5:通报批评 6:建议解除合同 7:降低资质
  135. // 项目法人 8:责令整改 9:约谈 10 通报批评
  136. // 1:项目法人(建设单位) 2:施工单位 3:监理单位 4:勘测设计单位
  137. private void zhenggai(Map<String, Object> map, String type) {
  138. if ("1".equals(type)) {
  139. xiangmufaren(map);
  140. } else {
  141. sjg(map);
  142. }
  143. }
  144. private void xiangmufaren(Map<String, Object> map) {
  145. String level = MapUtils.getString(map, "level");
  146. int count = MapUtils.getIntValue(map, "count");
  147. if (count == 0) {
  148. return;
  149. }
  150. String max = "";
  151. String chose = "";
  152. Set<String> set = new HashSet<>();
  153. switch (level) {
  154. case "0":
  155. if (count <= 15) {
  156. max = "责令整改";
  157. set.add("8");
  158. } else {
  159. max = "约谈";
  160. chose = "责令整改";
  161. set.add("9");
  162. set.add("8");
  163. }
  164. break;
  165. case "1":
  166. if (count <= 10) {
  167. max = "责令整改";
  168. set.add("8");
  169. } else if (count <= 20) {
  170. max = "约谈";
  171. chose = "责令整改";
  172. set.add("9");
  173. set.add("8");
  174. } else {
  175. max = "通报批评";
  176. chose = "责令整改、约谈";
  177. set.add("10");
  178. set.add("8");
  179. set.add("9");
  180. }
  181. break;
  182. case "2":
  183. if (count <= 7) {
  184. max = "责令整改";
  185. set.add("8");
  186. } else if (count <= 15) {
  187. max = "约谈";
  188. chose = "责令整改";
  189. set.add("9");
  190. set.add("8");
  191. } else {
  192. max = "通报批评";
  193. chose = "责令整改、约谈";
  194. set.add("10");
  195. set.add("8");
  196. set.add("9");
  197. }
  198. default:
  199. }
  200. map.put("chose", chose);
  201. map.put("max", max);
  202. map.put("set", set);
  203. }
  204. private void sjg(Map<String, Object> map) {
  205. String level = MapUtils.getString(map, "level");
  206. int count = MapUtils.getIntValue(map, "count");
  207. if (count == 0) {
  208. return;
  209. }
  210. String max = "";
  211. String chose = "";
  212. Set<String> set = new HashSet<>();
  213. switch (level) {
  214. case "0":
  215. if (count <= 20) {
  216. max = "责令整改";
  217. set.add("8");
  218. } else {
  219. max = "约谈";
  220. chose = "责令整改";
  221. set.add("9");
  222. set.add("8");
  223. }
  224. break;
  225. case "1":
  226. if (count <= 6) {
  227. max = "责令整改";
  228. set.add("8");
  229. } else if (count <= 12) {
  230. max = "约谈";
  231. chose = "责令整改";
  232. set.add("9");
  233. set.add("8");
  234. } else if (count <= 20) {
  235. max = "停工整改";
  236. chose = "责令整改、约谈";
  237. set.add("3");
  238. set.add("8");
  239. set.add("9");
  240. } else {
  241. max = "通报批评";
  242. chose = "责令整改、停工整改、经济责任";
  243. set.add("10");
  244. set.add("8");
  245. set.add("3");
  246. set.add("4");
  247. }
  248. break;
  249. case "2":
  250. if (count <= 5) {
  251. max = "责令整改";
  252. set.add("8");
  253. } else if (count <= 10) {
  254. max = "约谈";
  255. chose = "责令整改";
  256. set.add("9");
  257. set.add("8");
  258. } else if (count <= 15) {
  259. max = "停工整改";
  260. chose = "责令整改";
  261. set.add("3");
  262. set.add("8");
  263. } else if (count <= 20) {
  264. max = "通报批评";
  265. chose = "责令整改、经济责任";
  266. set.add("10");
  267. set.add("8");
  268. set.add("4");
  269. } else {
  270. max = "建议解除合同";
  271. chose = "责令整改、经济责任、通报批评、降低资质";
  272. set.add("6");
  273. set.add("8");
  274. set.add("4");
  275. set.add("10");
  276. set.add("7");
  277. }
  278. default:
  279. }
  280. map.put("chose", chose);
  281. map.put("max", max);
  282. map.put("set", set);
  283. }
  284. /**
  285. * 水利项目安全生产巡检样表
  286. *
  287. * @param id 公司ID
  288. * @param response 导出PDF版检样表文件
  289. */
  290. @Override
  291. public void exportCheckList(String id, String orgId, HttpServletResponse response) {
  292. response.setContentType("application/x-msdownload");
  293. try (OutputStream out = response.getOutputStream()) {
  294. Map<String, Object> checkListData = getCheckListData(id, orgId);
  295. String fileName = MapUtils.getString(checkListData, "unitNm") + "检查表.pdf";
  296. String fileNameURL = URLEncoder.encode(fileName, "UTF-8");
  297. response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";filename*=utf-8''" + fileNameURL);
  298. // 1.获取数据
  299. updateCheckList(checkListData, out);
  300. out.flush();
  301. } catch (IOException | DocumentException e) {
  302. e.printStackTrace();
  303. }
  304. }
  305. private void updateCheckList(Map<String, Object> checkListData, OutputStream out) throws IOException, DocumentException {
  306. BaseFont bfCN = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
  307. // 正文的字体
  308. Font topFont = new Font(bfCN, 24f, Font.BOLD);
  309. Font headFont = new Font(bfCN, 12f, Font.BOLD);
  310. Font textFont = new Font(bfCN, 12f, Font.NORMAL);
  311. Document document = new Document();
  312. PdfWriter.getInstance(document, out);
  313. document.open();
  314. //建立一个4列的表格
  315. PdfPTableUtil table = new PdfPTableUtil(new PdfPTable(new float[]{6f, 20f, 20f, 40f, 14f}));
  316. table.getTable().setTotalWidth(PageSize.A4.getWidth() - 20f);
  317. table.getTable().setLockedWidth(true);
  318. table.addNoBorderPCell(new Paragraph(MapUtils.getString(checkListData, "title"), topFont),
  319. PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 5);
  320. table.addNoBorderPCell(new Paragraph(" ", topFont),
  321. PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 5);
  322. // 在相应的单元格进行赋值
  323. setPdfPCell(table.getTable(), MapUtils.getString(checkListData, "name"), 3, 0, Element.ALIGN_LEFT);
  324. setPdfPCell(table.getTable(), MapUtils.getString(checkListData, "time"), 2, 0, Element.ALIGN_LEFT);
  325. setPdfPCell(table.getTable(), MapUtils.getString(checkListData, "unit"), 5, 0, Element.ALIGN_LEFT);
  326. setPdfPCell(table.getTable(), MapUtils.getString(checkListData, "prjCtgy"), 5, 0, Element.ALIGN_LEFT);
  327. setPdfPCell(table.getTable(), MapUtils.getString(checkListData, "prjType"), 5, 0, Element.ALIGN_LEFT);
  328. setPdfPCell(table.getTable(), MapUtils.getString(checkListData, "prjRisk"), 5, 0, Element.ALIGN_LEFT);
  329. //加表格头部序号 类别 巡查项目 严重程度 问题描述
  330. String[] titleArr = {"序号", "类别", "项目", "发现问题", "严重程度"};
  331. for (String aTitleArr : titleArr) {
  332. table.addPCell(new Paragraph(aTitleArr, headFont), PdfPCell.ALIGN_CENTER);
  333. }
  334. //遍历问题
  335. List<Map<String, String>> bisInspPblmList = (List<Map<String, String>>) checkListData.get("pblms");
  336. int index = 0;
  337. //计算'合并列'的合并相关集合
  338. List<Integer> indexs;
  339. //每个'合并列'的初始下标集合
  340. List<Integer> spanStartIndex;
  341. //每个'合并列'的合并数量集合
  342. List<Integer> spanNumList;
  343. //取出'合并列'的所有数据计算
  344. List<String> ListIn = new ArrayList<>();
  345. for (Map<String, String> res : bisInspPblmList) {
  346. ListIn.add(MapUtils.getString(res, "SEQ"));
  347. }
  348. spanNumList = getSpanNumList(ListIn);
  349. spanStartIndex = getStartIndexList(ListIn, spanNumList);
  350. indexs = getIndexs(bisInspPblmList.size(), spanNumList, spanStartIndex);
  351. for (Map<String, String> pblm : bisInspPblmList) {
  352. PdfPCell cell1 = new PdfPCell(new Paragraph(MapUtils.getString(pblm, "SEQ"), textFont));
  353. cell1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
  354. cell1.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
  355. setRowsSpan(indexs, spanStartIndex, spanNumList, table.getTable(), cell1, index);
  356. //合并列
  357. PdfPCell cell2 = new PdfPCell(new Paragraph(MapUtils.getString(pblm, "CHECK_POINT", ""), textFont));
  358. cell2.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
  359. cell2.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
  360. setRowsSpan(indexs, spanStartIndex, spanNumList, table.getTable(), cell2, index);
  361. if ("true".equals(MapUtils.getString(pblm, "CHECK", ""))) {
  362. table.addPCell(new Paragraph(" ", textFont), PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 3);
  363. } else {
  364. table.addPCell(new Paragraph(MapUtils.getString(pblm, "PBLM_DESC", ""), textFont));
  365. table.addPCell(new Paragraph(MapUtils.getString(pblm, "desc", ""), textFont));
  366. table.addPCell(new Paragraph(MapUtils.getString(pblm, "level", ""), textFont));
  367. }
  368. index++;
  369. }
  370. table.addPCell(new Paragraph("整改意见", textFont), PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 2);
  371. table.addPCell(new Paragraph(MapUtils.getString(checkListData, "mendNote", ""), textFont),
  372. PdfPCell.ALIGN_LEFT, PdfPCell.ALIGN_MIDDLE, 3);
  373. PdfPCell leftTitle3 = new PdfPCell();
  374. leftTitle3.setColspan(3);
  375. leftTitle3.setMinimumHeight(28f);
  376. leftTitle3.setLeading(0, 1.2F);
  377. leftTitle3.addElement(new Paragraph("督查人员签字:", textFont));
  378. if (StringUtils.isNotBlank(MapUtils.getString(checkListData, "ducha"))) {
  379. String imgPath = webUploadPath.replace("/upload/", "") + MapUtils.getString(checkListData, "ducha");
  380. logger.info("督查人员签字:" + imgPath);
  381. Image img = Image.getInstance(imgPath);
  382. img.setRotation((float) Math.PI / 2);
  383. img.setAlignment(Image.RIGHT);
  384. img.scaleAbsolute(100,50);
  385. leftTitle3.addElement(img);
  386. }
  387. table.getTable().addCell(leftTitle3);
  388. PdfPCell leftTitle4 = new PdfPCell();
  389. leftTitle4.setColspan(2);
  390. leftTitle4.setMinimumHeight(28f);
  391. leftTitle4.setLeading(0, 1.2F);
  392. leftTitle4.addElement(new Paragraph("被检查单位负责人签字:", textFont));
  393. if (StringUtils.isNotBlank(MapUtils.getString(checkListData, "beijiancha"))) {
  394. String imgPath = webUploadPath.replace("/upload/", "") + MapUtils.getString(checkListData, "beijiancha");
  395. logger.info("被检查单位负责人签字:" + imgPath);
  396. Image img = Image.getInstance(imgPath);
  397. img.setRotation((float) Math.PI / 2);
  398. img.setAlignment(Image.RIGHT);
  399. img.scaleAbsolute(100,50);
  400. leftTitle4.addElement(img);
  401. }
  402. table.getTable().addCell(leftTitle4);
  403. document.add(table.getTable());
  404. document.close();
  405. out.flush();
  406. out.close();
  407. }
  408. private Map<String, Object> getCheckListData(String id, String orgId) {
  409. // 获取数据
  410. BisInspWtprjUnit bisInspWtprjUnit = bisInspWtprjUnitDao.get(id);
  411. BisInspWtprjSection bisInspWtprjSection = bisInspWtprjSectionService.get(bisInspWtprjUnit.getSecId());
  412. BisInspWtprjRegister bisInspWtprjRegister = bisInspWtprjRegisterService.get(bisInspWtprjSection.getRgstrId());
  413. List<BisInspPblm> bisInspPblmList = bisInspPblmDao.list(Builder.of(BisInspPblmParam::new)
  414. .with(BisInspPblmParam::setObjId, bisInspWtprjSection.getObjId())
  415. .with(BisInspPblmParam::setRegid, id).build());
  416. String duchaImage = "";
  417. String beijianchaImage = "";
  418. List<GwComFile> ducha = gwComFileService.findList(Builder.of(GwComFileParam::new).with(GwComFileParam::setBizId, bisInspWtprjUnit.getId() + orgId).with(GwComFileParam::setBizType, "liableSignature1").build());
  419. logger.info("督查人员:{}", ducha);
  420. if (ducha != null && ducha.size() > 0) {
  421. duchaImage = ducha.get(0).getFilePath();
  422. }
  423. List<GwComFile> beijiancha = gwComFileService.findList(Builder.of(GwComFileParam::new).with(GwComFileParam::setBizId, bisInspWtprjUnit.getId() + orgId).with(GwComFileParam::setBizType, "liableSignature2").build());
  424. logger.info("被检查人员:{}", beijiancha);
  425. if (beijiancha != null && beijiancha.size() > 0) {
  426. beijianchaImage = beijiancha.get(0).getFilePath();
  427. }
  428. Map<String, Object> checkListMap = new HashMap<>(6);
  429. checkListMap.put("title", "水利项目" + WtprjConvert.nature(bisInspWtprjUnit.getNature()) + "安全生产巡查检查表");
  430. checkListMap.put("name", "工程名称:" + bisInspWtprjRegister.getNm());
  431. checkListMap.put("time", "巡查时间:" + DateUtils.Date2Str(bisInspWtprjRegister.getUptm(), "yyyy-MM-dd"));
  432. checkListMap.put("unit", "被检查单位:" + bisInspWtprjUnit.getNm());
  433. checkListMap.put("unitNm", bisInspWtprjUnit.getNm());
  434. checkListMap.put("prjCtgy", "工程类别:" + WtprjConvert.prjType(bisInspWtprjRegister.getPrjType()));
  435. checkListMap.put("prjType", "工程类型:" + WtprjConvert.prjCtgy(bisInspWtprjRegister.getPrjCtgy()));
  436. checkListMap.put("prjRisk", "所包含的危险性较大工程:" + WtprjConvert.prjRisk(bisInspWtprjRegister.getPrjRisk()));
  437. checkListMap.put("ducha", duchaImage);
  438. checkListMap.put("beijiancha", beijianchaImage);
  439. checkListMap.put("mendNote", bisInspWtprjUnit.getMendNote());
  440. checkListMap.put("pblms", getPblmData(bisInspPblmList, bisInspWtprjUnit.getNature()));
  441. return checkListMap;
  442. }
  443. private List<Map<String, String>> getPblmData(List<BisInspPblm> bisInspPblmList, String type) {
  444. List<Map<String, String>> pblmDataList = new ArrayList<>();
  445. if (StringUtils.isBlank(type)) {
  446. return null;
  447. }
  448. List<String> checkPointList = new ArrayList<>();
  449. switch (type) {
  450. case "1":
  451. checkPointList.add("安全管理体系");
  452. checkPointList.add("安全技术管理");
  453. checkPointList.add("安全过程控制");
  454. checkPointList.add("事故隐患排查与治理");
  455. checkPointList.add("危险源管理");
  456. checkPointList.add("安全事故处理");
  457. checkPointList.add("项目法人安全责任");
  458. checkPointList.add("其他");
  459. break;
  460. case "2":
  461. checkPointList.add("安全管理体系");
  462. checkPointList.add("技术方案管理");
  463. checkPointList.add("设施、设备、材料管理");
  464. checkPointList.add("施工作业管理");
  465. checkPointList.add("施工环境管理");
  466. checkPointList.add("危险源、隐患及事故处理");
  467. checkPointList.add("防洪度汛与应急管理");
  468. checkPointList.add("安全培训教育");
  469. checkPointList.add("档案管理");
  470. checkPointList.add("其他");
  471. break;
  472. case "3":
  473. checkPointList.add("安全控制体系");
  474. checkPointList.add("安全过程控制");
  475. checkPointList.add("安全检查");
  476. checkPointList.add("其他");
  477. break;
  478. case "4":
  479. checkPointList.add("安全管理体系");
  480. checkPointList.add("勘察设计文件");
  481. checkPointList.add("勘察设计服务");
  482. checkPointList.add("其他");
  483. break;
  484. default:
  485. return null;
  486. }
  487. for (int i = 1; i <= checkPointList.size(); i++) {
  488. String checkPoint = checkPointList.get(i - 1);
  489. List<BisInspPblm> pblmList = new ArrayList<>();
  490. if (bisInspPblmList != null && bisInspPblmList.size() > 0) {
  491. pblmList = bisInspPblmList.stream()
  492. .filter(p -> checkPoint.equals(p.getCheckPointBz()))
  493. .collect(Collectors.toList());
  494. }
  495. if (pblmList == null || pblmList.size() == 0) {
  496. Map<String, String> pblm = new HashMap<>(5);
  497. pblm.put("SEQ", String.valueOf(i));
  498. pblm.put("CHECK_POINT", checkPoint);
  499. pblm.put("CHECK", "true");
  500. pblmDataList.add(pblm);
  501. continue;
  502. }
  503. List<String> pblmsTypeIdList = pblmList.stream().map(BisInspPblm::getPblmsTypeId).distinct().collect(Collectors.toList());
  504. for (String pblmsTypeId : pblmsTypeIdList) {
  505. Map<String, String> pblm = new HashMap<>(5);
  506. pblm.put("SEQ", String.valueOf(i));
  507. pblm.put("CHECK_POINT", checkPoint);
  508. pblm.put("PBLM_DESC", bisInspPblmList.stream()
  509. .filter(p -> pblmsTypeId.equals(p.getPblmsTypeId()))
  510. .map(BisInspPblm::getPblmDescBz)
  511. .findFirst().orElse(""));
  512. pblm.put("desc", bisInspPblmList.stream()
  513. .filter(p -> pblmsTypeId.equals(p.getPblmsTypeId()))
  514. .map(BisInspPblm::getInspPblmDesc)
  515. .collect(Collectors.joining(";")));
  516. pblm.put("level", bisInspPblmList.stream()
  517. .filter(p -> pblmsTypeId.equals(p.getPblmsTypeId()))
  518. .map(o -> InspPblmUtils.plbmCateDesc(o.getInspPblmCate()))
  519. .distinct()
  520. .collect(Collectors.joining("、")));
  521. pblmDataList.add(pblm);
  522. }
  523. }
  524. return pblmDataList;
  525. }
  526. private void setPdfPCell(PdfPTable table, String value, int colspan, int border, int horizontalAlignment) {
  527. Font fontZh = FontFactory.getFont("STSongStd-Light", "UniGB-UCS2-H", 14);
  528. PdfPCell leftTitleOne = new PdfPCell(new Paragraph(value, fontZh));
  529. leftTitleOne.setColspan(colspan);
  530. leftTitleOne.setBorder(border);
  531. leftTitleOne.setHorizontalAlignment(horizontalAlignment);
  532. leftTitleOne.setMinimumHeight(28f);
  533. leftTitleOne.setLeading(0, 1.2F);
  534. table.addCell(leftTitleOne);
  535. }
  536. /**
  537. * 获取某列要合并的单元格数量
  538. *
  539. * @param list 内容必须符合'A,A,B,C,D,D,D,E' 而不是 'A,A,B,C,A,D,D,D,E' ,即所有相同的值必须在一起不能分散
  540. * @return
  541. */
  542. private List<Integer> getSpanNumList(List<String> list) {
  543. LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
  544. if (list.size() > 0) {
  545. for (int i = 0; i < list.size(); i = i + 1) {
  546. map.put(list.get(i), i);
  547. }
  548. }
  549. //修改对应key值的value
  550. Set<String> s = map.keySet();//获取KEY集合
  551. List<String> strings = new ArrayList<>(s);
  552. int spanNum = 0;
  553. for (String string : strings) {
  554. int tmpSpanNum = map.get(string) - spanNum + 1;
  555. map.put(string, tmpSpanNum);
  556. spanNum += tmpSpanNum;
  557. }
  558. List<Integer> res = new ArrayList<>();
  559. for (String string : strings) {
  560. res.add(map.get(string));
  561. }
  562. return res;
  563. }
  564. /**
  565. * 获取某列要合并的单元格初始下标
  566. *
  567. * @param list 内容必须符合'A,A,B,C,D,D,D,E' 而不是 'A,A,B,C,A,D,D,D,E' ,即所有相同的值必须在一起不能分散
  568. * @param resSpanNumList
  569. * @return
  570. */
  571. private List<Integer> getStartIndexList(List<String> list, List<Integer> resSpanNumList) {
  572. LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
  573. if (list.size() > 0) {
  574. for (int i = 0; i < list.size(); i = i + 1) {
  575. map.put(list.get(i), i);
  576. }
  577. }
  578. Set<String> keys = map.keySet();//获取KEY集合
  579. List<String> stringKeys = new ArrayList<>(keys);
  580. List<Integer> res = new ArrayList<>();
  581. if (stringKeys.size() == resSpanNumList.size()) {
  582. for (int i = 0; i < stringKeys.size(); i++) {
  583. res.add(map.get(stringKeys.get(i)) - resSpanNumList.get(i) + 1);
  584. }
  585. }
  586. return res;
  587. }
  588. /**
  589. * 不加某字段的索引集合
  590. *
  591. * @param listLength
  592. * @param resSpanNumList
  593. * @param resStartIndexList
  594. * @return
  595. */
  596. private List<Integer> getIndexs(int listLength,
  597. List<Integer> resSpanNumList, List<Integer> resStartIndexList) {
  598. List<Integer> indexs = new ArrayList<>();
  599. for (int i = 0; i < listLength; i++) {
  600. for (int j = 0; j < resStartIndexList.size(); j++) {
  601. if (i == resStartIndexList.get(j)) {
  602. for (int k = i + 1; k < i + resSpanNumList.get(j); k++) {
  603. indexs.add(k);
  604. }
  605. }
  606. }
  607. }
  608. return indexs;
  609. }
  610. /**
  611. * 设置恰当位置的setRowSpan属性
  612. *
  613. * @param indexs 不加单元格的索引集合
  614. * @param spanStartIndex 要加的单元格开始索引集合
  615. * @param spanNumList 要加的单元格合并的值集合
  616. * @param table table
  617. * @param cell cell
  618. * @param i 索引
  619. */
  620. private void setRowsSpan(List<Integer> indexs, List<Integer> spanStartIndex,
  621. List<Integer> spanNumList, PdfPTable table, PdfPCell cell, int i) {
  622. if (indexs != null) {
  623. boolean isAllNotEqual = true;
  624. for (Integer index : indexs) {
  625. if (i == index) {
  626. isAllNotEqual = false;
  627. break;
  628. }
  629. }
  630. //没有不加的下标
  631. if (isAllNotEqual) {
  632. // 判断在哪里设置span值
  633. if (spanStartIndex != null) {
  634. boolean isSpan = false;
  635. int copyJ = 0;
  636. for (int j = 0; j < spanStartIndex.size(); j++) {
  637. if (i == spanStartIndex.get(j)) {
  638. isSpan = true;
  639. copyJ = j;
  640. break;
  641. }
  642. }
  643. if (isSpan) {
  644. int spanNum = spanNumList.get(copyJ);
  645. cell.setRowspan(spanNum);
  646. }
  647. }
  648. table.addCell(cell);
  649. }
  650. } else {
  651. table.addCell(cell);
  652. }
  653. }
  654. }