a34c1440d611279c617475254afe160eae48eae7.svn-base 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. package cn.com.goldenwater.dcproj.service.impl;
  2. import cn.com.goldenwater.core.service.AbstractCrudService;
  3. import cn.com.goldenwater.dcproj.constValue.BisInspEnum;
  4. import cn.com.goldenwater.dcproj.constValue.SplitValue;
  5. import cn.com.goldenwater.dcproj.dao.BisInspPblmDao;
  6. import cn.com.goldenwater.dcproj.dao.BisInspYndrdmpRgstrDao;
  7. import cn.com.goldenwater.dcproj.dto.BisInspYndrdmpRgstrDto;
  8. import cn.com.goldenwater.dcproj.model.*;
  9. import cn.com.goldenwater.dcproj.param.*;
  10. import cn.com.goldenwater.dcproj.service.*;
  11. import cn.com.goldenwater.dcproj.util.PdfPTableUtil;
  12. import cn.com.goldenwater.dcproj.utils.*;
  13. import cn.com.goldenwater.id.util.UuidUtil;
  14. import com.alibaba.fastjson.JSONArray;
  15. import com.github.pagehelper.PageHelper;
  16. import com.github.pagehelper.PageInfo;
  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.lang.StringUtils;
  24. import org.slf4j.Logger;
  25. import org.slf4j.LoggerFactory;
  26. import org.springframework.beans.BeanUtils;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.beans.factory.annotation.Value;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import javax.servlet.http.HttpServletResponse;
  32. import java.io.IOException;
  33. import java.io.OutputStream;
  34. import java.net.URLEncoder;
  35. import java.util.List;
  36. import java.util.*;
  37. import java.util.stream.Collectors;
  38. import static cn.com.goldenwater.dcproj.util.CheckUtil.check;
  39. /**
  40. * @author lhc
  41. * @date 2021-3-23
  42. */
  43. @Service
  44. @Transactional
  45. public class BisInspYndrdmpRgstrServiceImpl extends AbstractCrudService<BisInspYndrdmpRgstr, BisInspYndrdmpRgstrParam> implements BisInspYndrdmpRgstrService, BisInspObjStrategy {
  46. private Logger logger = LoggerFactory.getLogger(getClass());
  47. @Autowired
  48. private AttYndepBaseService attYndepBaseService;
  49. @Autowired
  50. private BisInspYndrdmpRgstrDao bisInspYndrdmpRgstrDao;
  51. @Autowired
  52. private BisInspYnDrdmpItService bisInspYnDrdmpItService;
  53. @Autowired
  54. private BisInspYnDrdmpSafetyService bisInspYnDrdmpSafetyService;
  55. @Autowired
  56. private BisInspYnDrdmpSystemService bisInspYnDrdmpSystemService;
  57. @Autowired
  58. private BisInspPblmDao bisInspPblmDao;
  59. @Autowired
  60. private GwComFileService gwComFileService;
  61. @Value("${web.upload-path}")
  62. public String webUploadPath;
  63. public BisInspYndrdmpRgstrServiceImpl(BisInspYndrdmpRgstrDao bisInspYndrdmpRgstrDao) {
  64. super(bisInspYndrdmpRgstrDao);
  65. this.bisInspYndrdmpRgstrDao = bisInspYndrdmpRgstrDao;
  66. }
  67. @Override
  68. public int insert(BisInspYndrdmpRgstr bisInspYndrdmpRgstr) {
  69. String uuid = UuidUtil.uuid();
  70. bisInspYndrdmpRgstr.setId(uuid);
  71. bisInspYndrdmpRgstr.setIntm(new Date());
  72. bisInspYndrdmpRgstr.setUptm(new Date());
  73. bisInspYndrdmpRgstr.setDataStat("0");
  74. return this.bisInspYndrdmpRgstrDao.insert(bisInspYndrdmpRgstr);
  75. }
  76. @Override
  77. public int update(BisInspYndrdmpRgstr bisInspYndrdmpRgstr) {
  78. if (StringUtils.isBlank(bisInspYndrdmpRgstr.getId()) ||
  79. StringUtils.isNotBlank(bisInspYndrdmpRgstr.getRgstrId())) {
  80. // rgstrId 不为 空 时,传给ID
  81. bisInspYndrdmpRgstr.setId(bisInspYndrdmpRgstr.getRgstrId());
  82. }
  83. check(StringUtils.isNotBlank(bisInspYndrdmpRgstr.getId()), "缺少登记表编码!");
  84. bisInspYndrdmpRgstr.setUptm(new Date());
  85. int ret = bisInspYndrdmpRgstrDao.update(bisInspYndrdmpRgstr);
  86. // 更新基础表信息
  87. updateAttBase(bisInspYndrdmpRgstr);
  88. return ret;
  89. }
  90. private void updateAttBase(BisInspYndrdmpRgstr rgstr) {
  91. BisInspYndrdmpRgstr r = get(rgstr.getId());
  92. AttYndepBase attWiuqhBase = attYndepBaseService.getObjId(r.getObjId());
  93. attWiuqhBase.setAdCode(rgstr.getAdCode());
  94. attWiuqhBase.setAdName(rgstr.getAdName());
  95. attWiuqhBase.setCenterX(rgstr.getCenterX());
  96. attWiuqhBase.setCenterY(rgstr.getCenterY());
  97. attWiuqhBase.setDepName(rgstr.getDepName());
  98. attWiuqhBase.setDepPers(rgstr.getDepPers());
  99. attWiuqhBase.setDepPersTel(rgstr.getDepPersTel());
  100. attWiuqhBase.setGdX(rgstr.getGdX());
  101. attWiuqhBase.setGdY(rgstr.getGdY());
  102. attWiuqhBase.setLoc(rgstr.getLoc());
  103. attWiuqhBase.setNote(rgstr.getNote());
  104. attWiuqhBase.setUtLead(rgstr.getUtLead());
  105. attWiuqhBase.setPrincipalTel(rgstr.getPrincipalTel());
  106. attYndepBaseService.update(attWiuqhBase);
  107. }
  108. @Override
  109. public int delete(String id) {
  110. return this.bisInspYndrdmpRgstrDao.delete(id);
  111. }
  112. @Override
  113. public void insertObj(BisInspAllObj bisInspAllObj, String persId) {
  114. BisInspYndrdmpRgstr b = new BisInspYndrdmpRgstr();
  115. AttYndepBase base = attYndepBaseService.get(bisInspAllObj.getCode());
  116. BeanUtils.copyProperties(base, b);
  117. b.setObjId(bisInspAllObj.getObjId());
  118. b.setId(UuidUtil.uuid());
  119. b.setIntm(new Date());
  120. b.setUptm(new Date());
  121. b.setDataStat("0");
  122. b.setState("0");
  123. b.setItStat("0");
  124. b.setSafetyStat("0");
  125. b.setYstemStat("0");
  126. /* 添加 登记表 */
  127. bisInspYndrdmpRgstrDao.insert(b);
  128. // 添加 子表
  129. bisInspYnDrdmpItService.insert(Builder.of(BisInspYnDrdmpItParam::new).with(BisInspYnDrdmpItParam::setRgstrId, b.getId()).build());
  130. bisInspYnDrdmpSafetyService.insert(Builder.of(BisInspYnDrdmpSafetyParam::new).with(BisInspYnDrdmpSafetyParam::setRgstrId, b.getId()).build());
  131. bisInspYnDrdmpSystemService.insert(Builder.of(BisInspYnDrdmpSystemParam::new).with(BisInspYnDrdmpSystemParam::setRgstrId, b.getId()).build());
  132. }
  133. @Override
  134. public String getType() {
  135. return BisInspEnum.YNDEP.getValue();
  136. }
  137. @Override
  138. public void cleanObjData(String objId) {
  139. BisInspYndrdmpRgstrParam rgstrParam = new BisInspYndrdmpRgstrParam();
  140. rgstrParam.setObjId(objId);
  141. List<BisInspYndrdmpRgstr> list = this.bisInspYndrdmpRgstrDao.findList(rgstrParam);
  142. if (list.size() > 0) {
  143. String id = list.get(0).getId();
  144. // 删除登记表
  145. this.bisInspYndrdmpRgstrDao.delete(id);
  146. // 添加 子表
  147. bisInspYnDrdmpItService.deleteBy(Builder.of(BisInspYnDrdmpItParam::new).with(BisInspYnDrdmpItParam::setRgstrId, id).build());
  148. bisInspYnDrdmpSafetyService.deleteBy(Builder.of(BisInspYnDrdmpSafetyParam::new).with(BisInspYnDrdmpSafetyParam::setRgstrId, id).build());
  149. bisInspYnDrdmpSystemService.deleteBy(Builder.of(BisInspYnDrdmpSystemParam::new).with(BisInspYnDrdmpSystemParam::setRgstrId, id).build());
  150. }
  151. }
  152. @Override
  153. public PageInfo findObjPageByType(TypeParam typeParam, HttpServletResponse response) {
  154. if (StringUtils.isNotBlank(typeParam.getAdCode())) {
  155. typeParam.setAdCode(String.valueOf(AdLevelUtil.SubAd(typeParam.getAdCode()).get(SplitValue.SUBAD)));
  156. }
  157. PageHelper.startPage(typeParam);
  158. List<BisInspYndrdmpRgstrDto> list = this.bisInspYndrdmpRgstrDao.findPageList(typeParam);
  159. return new PageInfo(list);
  160. }
  161. @Override
  162. public void updateState(Map<String, Object> map) {
  163. BisInspYndrdmpRgstr rgstr = get(MapUtils.getString(map, "rgstrId"));
  164. if (!Constant.STRING_TWO.equals(rgstr.getState()) &&
  165. StringUtils.isNotBlank(MapUtils.getString(map, "state"))) {
  166. rgstr.setUptm(new Date());
  167. rgstr.setState(Constant.STRING_ONE);
  168. switch (MapUtils.getString(map, "param")) {
  169. case "it":
  170. rgstr.setItStat(MapUtils.getString(map, "state"));
  171. break;
  172. case "safety":
  173. rgstr.setSafetyStat(MapUtils.getString(map, "state"));
  174. break;
  175. case "system":
  176. rgstr.setYstemStat(MapUtils.getString(map, "state"));
  177. break;
  178. default:
  179. }
  180. update(rgstr);
  181. }
  182. }
  183. @Override
  184. public Object findObjListByType(TypeParam typeParam) {
  185. return this.bisInspYndrdmpRgstrDao.findPageList(typeParam);
  186. }
  187. @Override
  188. public void exportCheckList(String id, String orgId, HttpServletResponse response) {
  189. String fileName = "水行政主管部门安全生产巡查检查表.pdf";
  190. response.setContentType("application/x-msdownload");
  191. try (OutputStream out = response.getOutputStream()) {
  192. // 修改模板内容导出新模板
  193. String fileNameURL = URLEncoder.encode(fileName, "UTF-8");
  194. response.setHeader("Content-disposition", "attachment;filename=" + fileNameURL + ";filename*=utf-8''" + fileNameURL);
  195. exportCheckList(id, orgId, out);
  196. out.flush();
  197. } catch (IOException | DocumentException e) {
  198. e.printStackTrace();
  199. }
  200. }
  201. private void exportCheckList(String id, String orgId, OutputStream out) throws IOException, DocumentException {
  202. BaseFont bfCN = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
  203. // 正文的字体
  204. Font topFont = new Font(bfCN, 24f, Font.BOLD);
  205. Font headFont = new Font(bfCN, 12f, Font.BOLD);
  206. Font textFont = new Font(bfCN, 12f, Font.NORMAL);
  207. Document document = new Document();
  208. PdfWriter.getInstance(document, out);
  209. document.open();
  210. // 获取数据
  211. Map<String, Object> mapData = getCheckListData(id, orgId);
  212. //建立一个4列的表格
  213. PdfPTableUtil table = new PdfPTableUtil(new PdfPTable(new float[]{5f, 14f, 38f, 5f, 38f}));
  214. table.getTable().setTotalWidth(PageSize.A4.getWidth() - 20f);
  215. table.getTable().setLockedWidth(true);
  216. String adName = "";
  217. String duchaDate = "";
  218. if (!mapData.isEmpty()) {
  219. adName = "州(市):" + MapUtils.getString(mapData, "shi", " ") +
  220. " 县(市、区):" + MapUtils.getString(mapData, "xian", "");
  221. duchaDate = DateUtils.Date2Str((Date) mapData.get("time"), "yyyy-MM-dd");
  222. }
  223. table.addNoBorderPCell(new Paragraph("水行政主管部门安全生产巡查检查表", topFont),
  224. PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 5);
  225. table.addNoBorderPCell(new Paragraph(" ", topFont),
  226. PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 5);
  227. table.addNoBorderPCell(new Paragraph(adName, textFont),
  228. PdfPCell.ALIGN_LEFT, PdfPCell.ALIGN_MIDDLE, 5);
  229. table.addNoBorderPCell(new Paragraph("巡查时间:" + duchaDate, textFont),
  230. PdfPCell.ALIGN_LEFT, PdfPCell.ALIGN_MIDDLE, 5);
  231. //加表格头部序号 类别 巡查项目 严重程度 问题描述
  232. String[] titleArr = {"序号", "类别", "巡查项目", "是否存在问题", "问题描述"};
  233. for (String aTitleArr : titleArr) {
  234. table.addPCell(new Paragraph(aTitleArr, headFont), PdfPCell.ALIGN_CENTER);
  235. }
  236. //加表格内容
  237. if (mapData.get("pblms") != null) {
  238. addContent(table, (List<Map<String, String>>) mapData.get("pblms"), textFont);
  239. }
  240. //第1列
  241. PdfPCell cell3 = new PdfPCell();
  242. cell3.setHorizontalAlignment(PdfPCell.ALIGN_LEFT);
  243. cell3.setBorder(0);
  244. cell3.addElement(new Paragraph("组长签名:", textFont));
  245. if (StringUtils.isNotBlank(MapUtils.getString(mapData, "ducha"))) {
  246. String imgPath = webUploadPath.replace("/upload/", "") + MapUtils.getString(mapData, "ducha");
  247. Image img = Image.getInstance(imgPath);
  248. img.setRotation((float) Math.PI / 2);
  249. img.setAlignment(Image.RIGHT);
  250. img.scaleAbsolute(100, 50);
  251. cell3.addElement(img);
  252. }
  253. cell3.setColspan(3);
  254. table.getTable().addCell(cell3);
  255. PdfPCell cell4 = new PdfPCell();
  256. cell4.setHorizontalAlignment(PdfPCell.ALIGN_LEFT);
  257. cell4.setBorder(0);
  258. cell4.addElement(new Paragraph("被检查单位责任人签名:", textFont));
  259. if (StringUtils.isNotBlank(MapUtils.getString(mapData, "beijiancha"))) {
  260. String imgPath = webUploadPath.replace("/upload/", "") + MapUtils.getString(mapData, "beijiancha");
  261. Image img = Image.getInstance(imgPath);
  262. img.setRotation((float) Math.PI / 2);
  263. img.setAlignment(Image.RIGHT);
  264. img.scaleAbsolute(100, 50);
  265. cell4.addElement(img);
  266. }
  267. cell4.setColspan(2);
  268. table.getTable().addCell(cell4);
  269. document.add(table.getTable());
  270. document.close();
  271. }
  272. private void addContent(PdfPTableUtil table, List<Map<String, String>> list, Font textFont) {
  273. int index = 0;
  274. //计算'合并列'的合并相关集合
  275. List<Integer> indexs;
  276. //每个'合并列'的初始下标集合
  277. List<Integer> spanStartIndex;
  278. //每个'合并列'的合并数量集合
  279. List<Integer> spanNumList;
  280. //取出'合并列'的所有数据计算
  281. List<String> ListIn = new ArrayList<>();
  282. for (Map<String, String> res : list) {
  283. ListIn.add(MapUtils.getString(res, "seq"));
  284. }
  285. spanNumList = getSpanNumList(ListIn);
  286. spanStartIndex = getStartIndexList(ListIn, spanNumList);
  287. indexs = getIndexs(list.size(), spanNumList, spanStartIndex);
  288. for (Map<String, String> pblm : list) {
  289. PdfPCell cell1 = new PdfPCell(new Paragraph(MapUtils.getString(pblm, "seq"), textFont));
  290. cell1.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
  291. cell1.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
  292. setRowsSpan(indexs, spanStartIndex, spanNumList, table.getTable(), cell1, index);
  293. //合并列
  294. PdfPCell cell2 = new PdfPCell(new Paragraph(MapUtils.getString(pblm, "category"), textFont));
  295. cell2.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
  296. cell2.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
  297. setRowsSpan(indexs, spanStartIndex, spanNumList, table.getTable(), cell2, index);
  298. table.addPCell(new Paragraph(MapUtils.getString(pblm, "prj"), textFont));
  299. if ("9".equals(MapUtils.getString(pblm, "seq"))) {
  300. table.addPCell(new Paragraph(MapUtils.getString(pblm, "desc", ""), textFont),
  301. PdfPCell.ALIGN_CENTER, PdfPCell.ALIGN_MIDDLE, 2);
  302. } else {
  303. table.addPCell(new Paragraph(MapUtils.getIntValue(pblm, "count") > 0 ? "是" : "否", textFont));
  304. table.addPCell(new Paragraph(MapUtils.getString(pblm, "desc", ""), textFont));
  305. }
  306. index++;
  307. }
  308. }
  309. private Map<String, Object> getCheckListData(String id, String orgId) {
  310. Map<String, Object> result = new HashMap<>(6);
  311. BisInspYndrdmpRgstr rgstr = bisInspYndrdmpRgstrDao.get(id);
  312. BisInspYnDrdmpIt it = bisInspYnDrdmpItService.get(id);
  313. BisInspYnDrdmpSafety safety = bisInspYnDrdmpSafetyService.get(id);
  314. BisInspYnDrdmpSystem system = bisInspYnDrdmpSystemService.get(id);
  315. Optional.ofNullable(rgstr).ifPresent(r -> {
  316. result.put("time", r.getUptm());
  317. String[] ad = r.getAdFullName().split("-");
  318. if (ad.length == 3) {
  319. result.put("shi", ad[1]);
  320. result.put("xian", ad[2]);
  321. } else if (ad.length == 2) {
  322. result.put("shi", ad[1]);
  323. }
  324. String checkListJson = "[\n" +
  325. "{\"seq\":1,\"category\":\"贯彻落实安全生产各项决策部署\",\"prj\":\"学习贯彻习近平总书记关于安全生产工作重要论述和指示批示精神情况\",\"id\":\"B5FA42944566A83F89A1505807075001\"},\n" +
  326. "{\"seq\":1,\"category\":\"贯彻落实安全生产各项决策部署\",\"prj\":\"安全生产法律法规学习培训、岗位能力提升、安全生产宣传、政策解读等组织情况\",\"id\":\"B5FA42944566A83F89A1505807075002\"},\n" +
  327. "{\"seq\":2,\"category\":\"落实安全生产重要政策文件规定\",\"prj\":\"水利部和流域委 2020 年以来印发的有关安全生产监督管理文件的组织落实情况\",\"id\":\"B5FA42944566A83F89A1505807075003\"},\n" +
  328. "{\"seq\":2,\"category\":\"落实安全生产重要政策文件规定\",\"prj\":\"省水利厅 2020 年以来印发的有关安全生产监督管理文件的组织落实情况\",\"id\":\"B5FA42944566A83F89A1505807075004\"},\n" +
  329. "{\"seq\":3,\"category\":\"落实水利行业安全生产专项整治三年活动\",\"prj\":\"落实《云南省水利行业安全生产专项整治三年行动实施方案》(云水监督〔2020〕1 号)情况\",\"id\":\"B5FA42944566A83F89A1505807075005\"},\n" +
  330. "{\"seq\":3,\"category\":\"落实水利行业安全生产专项整治三年活动\",\"prj\":\"落实《云南省水利行业安全生产专项整治三年行动 2020 年重点工作措施清单》(云水监督〔2020〕8 号)情况\",\"id\":\"B5FA42944566A83F89A1505807075006\"},\n" +
  331. "{\"seq\":3,\"category\":\"落实水利行业安全生产专项整治三年活动\",\"prj\":\"其他水利行业安全生产专项整治三年行动措施落实情况\",\"id\":\"B5FA42944566A83F89A1505807075007\"},\n" +
  332. "{\"seq\":4,\"category\":\"落实安全生产工作责任制\",\"prj\":\"《地方党政领导干部安全生产责任制实施办法》《云南省水利系统党政领导干部安全生产责任制实施办法》(云水党〔2018〕133 号)《关于建立全省水利安全生产监管责任清单的意见》等是否有效落实\",\"id\":\"B5FA42944566A83F89A1505807075008\"},\n" +
  333. "{\"seq\":5,\"category\":\"水利安全风险管控、事故隐患排查治理\",\"prj\":\"按照《水利部关于开展水利安全风险分级管控的指导意见》(水安监〔2018〕323 号)等要求组织辖区内水利生产经营单位开展危险源辨识与风险评价工作情况\",\"id\":\"B5FA42944566A83F89A1505807075009\"},\n" +
  334. "{\"seq\":5,\"category\":\"水利安全风险管控、事故隐患排查治理\",\"prj\":\"针对不同风险等级制定分级管控措施的情况\",\"id\":\"B5FA42944566A83F89A1505807075010\"},\n" +
  335. "{\"seq\":5,\"category\":\"水利安全风险管控、事故隐患排查治理\",\"prj\":\"对重点区域、重点项目、重点领域、重点环节、重大危险源开展重点监管等情况\",\"id\":\"B5FA42944566A83F89A1505807075011\"},\n" +
  336. "{\"seq\":5,\"category\":\"水利安全风险管控、事故隐患排查治理\",\"prj\":\"按照《水利部关于进一步加强水利生产安全事故隐患排查治理工作的意见》(水安监〔2017〕409 号)要求,建立健全重大事故隐患治理督办制度情况\",\"id\":\"B5FA42944566A83F89A1505807075012\"},\n" +
  337. "{\"seq\":5,\"category\":\"水利安全风险管控、事故隐患排查治理\",\"prj\":\"建立辖区内的重大事故隐患台账、采取监管措施、实行闭环管理等情况\",\"id\":\"B5FA42944566A83F89A1505807075013\"},\n" +
  338. "{\"seq\":5,\"category\":\"水利安全风险管控、事故隐患排查治理\",\"prj\":\"对安全风险隐患实施清单化管理,建立问题隐患和制度措施“两个清单”情 况\",\"id\":\"B5FA42944566A83F89A1505807075014\"},\n" +
  339. "{\"seq\":6,\"category\":\"安全生产事故应急预案管理\",\"prj\":\"组织制定、修编生产安全事故应急预案情况\",\"id\":\"B5FA42944566A83F89A1505807075015\"},\n" +
  340. "{\"seq\":6,\"category\":\"安全生产事故应急预案管理\",\"prj\":\"预案符合实际、实用有效情况和按照相关规定审查备案情况\",\"id\":\"B5FA42944566A83F89A1505807075016\"},\n" +
  341. "{\"seq\":6,\"category\":\"安全生产事故应急预案管理\",\"prj\":\"推动有效开展应急处置演练情况\",\"id\":\"B5FA42944566A83F89A1505807075017\"},\n" +
  342. "{\"seq\":7,\"category\":\"水利安全生产监管执法\",\"prj\":\"建立安全生产举报制度情况\",\"id\":\"B5FA42944566A83F89A1505807075018\"},\n" +
  343. "{\"seq\":7,\"category\":\"水利安全生产监管执法\",\"prj\":\"建立安全生产违法行为信息库,如实记录生产经营单位的安全生产违法行为信息情况\",\"id\":\"B5FA42944566A83F89A1505807075019\"},\n" +
  344. "{\"seq\":7,\"category\":\"水利安全生产监管执法\",\"prj\":\"推进安全生产执法工作规范化、信息化等情况\",\"id\":\"B5FA42944566A83F89A1505807075020\"},\n" +
  345. "{\"seq\":8,\"category\":\"水利生产防范工作\",\"prj\":\"安全生产防范工作流于形式,安全生产监管存在形式主义、官僚主义现象等情况\",\"id\":\"B5FA42944566A83F89A1505807075021\"},\n" +
  346. "{\"seq\":8,\"category\":\"水利生产防范工作\",\"prj\":\"安全生产工作存在监管不到位、检查形式化等突出问题情况\",\"id\":\"B5FA42944566A83F89A1505807075022\"},\n" +
  347. "{\"seq\":9,\"category\":\"安全生产信息化建设\",\"prj\":\"水利安全生产信息系统使用情况\",\"id\":\"\"},\n" +
  348. "{\"seq\":9,\"category\":\"安全生产信息化建设\",\"prj\":\"水利安全生产信息系统用户启用情况,包括用户总量、未启用数量和未启用原因等情况\",\"id\":\"\"},\n" +
  349. "{\"seq\":9,\"category\":\"安全生产信息化建设\",\"prj\":\"安全生产信息化建设存在的问题和下一步推进措施\",\"id\":\"\"},\n" +
  350. "\n" +
  351. "]";
  352. List<Map<String, String>> mapList = JSONArray.parseObject(checkListJson, List.class);
  353. List<BisInspPblm> bisInspPblmList = bisInspPblmDao.findList(Builder.of(BisInspPblmParam::new)
  354. .with(BisInspPblmParam::setObjId, r.getObjId()).build());
  355. if (bisInspPblmList == null) {
  356. bisInspPblmList = new ArrayList<>();
  357. }
  358. for (Map<String, String> map : mapList) {
  359. map.put("desc", bisInspPblmList.stream()
  360. .filter(p -> MapUtils.getString(map, "id").equals(p.getPblmsTypeId()))
  361. .map(BisInspPblm::getInspPblmDesc)
  362. .collect(Collectors.joining(";")));
  363. map.put("level", bisInspPblmList.stream()
  364. .filter(p -> MapUtils.getString(map, "id").equals(p.getPblmsTypeId()))
  365. .map(BisInspPblm::getInspPblmCate)
  366. .distinct()
  367. .map(InspPblmUtils::plbmCateDesc)
  368. .collect(Collectors.joining("、")));
  369. map.put("count", String.valueOf(bisInspPblmList.stream()
  370. .filter(p -> MapUtils.getString(map, "id").equals(p.getPblmsTypeId()))
  371. .map(BisInspPblm::getPblmId)
  372. .distinct()
  373. .count()));
  374. if (!(MapUtils.getIntValue(map, "count") > 0)) {
  375. String prj = MapUtils.getString(map, "id", "");
  376. switch (prj) {
  377. case "B5FA42944566A83F89A1505807075001":
  378. map.put("desc", system.getLearnNote());
  379. break;
  380. case "B5FA42944566A83F89A1505807075002":
  381. map.put("desc", system.getOrgLearNote());
  382. break;
  383. case "B5FA42944566A83F89A1505807075003":
  384. map.put("desc", system.getImpFileNote());
  385. break;
  386. case "B5FA42944566A83F89A1505807075004":
  387. map.put("desc", system.getImpPdcNote());
  388. break;
  389. case "B5FA42944566A83F89A1505807075005":
  390. map.put("desc", system.getImpAckNote());
  391. break;
  392. case "B5FA42944566A83F89A1505807075006":
  393. map.put("desc", system.getImpPblmNote());
  394. break;
  395. case "B5FA42944566A83F89A1505807075007":
  396. map.put("desc", system.getImpOtherNote());
  397. break;
  398. case "B5FA42944566A83F89A1505807075008":
  399. map.put("desc", system.getImpLeadNote());
  400. break;
  401. case "B5FA42944566A83F89A1505807075009":
  402. map.put("desc", safety.getSafeGuidNote());
  403. break;
  404. case "B5FA42944566A83F89A1505807075010":
  405. map.put("desc", safety.getMakLevNote());
  406. break;
  407. case "B5FA42944566A83F89A1505807075011":
  408. map.put("desc", safety.getMakKeyNote());
  409. break;
  410. case "B5FA42944566A83F89A1505807075012":
  411. map.put("desc", safety.getMakMwrNote());
  412. break;
  413. case "B5FA42944566A83F89A1505807075013":
  414. map.put("desc", safety.getMakBookNote());
  415. break;
  416. case "B5FA42944566A83F89A1505807075014":
  417. map.put("desc", safety.getManListNote());
  418. break;
  419. case "B5FA42944566A83F89A1505807075015":
  420. map.put("desc", safety.getMakPlanNote());
  421. break;
  422. case "B5FA42944566A83F89A1505807075016":
  423. map.put("desc", safety.getPlanActNote());
  424. break;
  425. case "B5FA42944566A83F89A1505807075017":
  426. map.put("desc", safety.getDrvRunNote());
  427. break;
  428. case "B5FA42944566A83F89A1505807075018":
  429. map.put("desc", safety.getMakSysNote());
  430. break;
  431. case "B5FA42944566A83F89A1505807075019":
  432. map.put("desc", safety.getMakDbNote());
  433. break;
  434. case "B5FA42944566A83F89A1505807075020":
  435. map.put("desc", safety.getActItNote());
  436. break;
  437. case "B5FA42944566A83F89A1505807075021":
  438. map.put("desc", safety.getNactPhnNote());
  439. break;
  440. case "B5FA42944566A83F89A1505807075022":
  441. map.put("desc", safety.getActPblmNote());
  442. break;
  443. default:
  444. }
  445. }
  446. if ("9".equals(MapUtils.getString(map, "seq"))) {
  447. if ("水利安全生产信息系统使用情况".equals(MapUtils.getString(map, "prj"))) {
  448. map.put("desc", it.getSysUsrNote());
  449. }
  450. if ("水利安全生产信息系统用户启用情况,包括用户总量、未启用数量和未启用原因等情况".equals(MapUtils.getString(map, "prj"))) {
  451. map.put("desc", it.getSysAbleNote());
  452. }
  453. if ("安全生产信息化建设存在的问题和下一步推进措施".equals(MapUtils.getString(map, "prj"))) {
  454. map.put("desc", it.getSysSug());
  455. }
  456. }
  457. }
  458. result.put("pblms", mapList);
  459. String duchaImage = "";
  460. String beijianchaImage = "";
  461. List<GwComFile> ducha = gwComFileService.findList(Builder.of(GwComFileParam::new).with(GwComFileParam::setBizId, r.getId() + orgId).with(GwComFileParam::setBizType, "signatureYndepLeader").build());
  462. if (ducha != null && ducha.size() > 0) {
  463. duchaImage = ducha.get(0).getFilePath();
  464. }
  465. List<GwComFile> beijiancha = gwComFileService.findList(Builder.of(GwComFileParam::new).with(GwComFileParam::setBizId, r.getId() + orgId).with(GwComFileParam::setBizType, "signatureYndepUnit").build());
  466. if (beijiancha != null && beijiancha.size() > 0) {
  467. beijianchaImage = beijiancha.get(0).getFilePath();
  468. }
  469. result.put("ducha", duchaImage);
  470. result.put("beijiancha", beijianchaImage);
  471. logger.info("ducha img path" + duchaImage);
  472. logger.info("beijiancha img path" + beijianchaImage);
  473. });
  474. return result;
  475. }
  476. /**
  477. * 设置恰当位置的setRowSpan属性
  478. *
  479. * @param indexs 不加单元格的索引集合
  480. * @param spanStartIndex 要加的单元格开始索引集合
  481. * @param spanNumList 要加的单元格合并的值集合
  482. * @param table table
  483. * @param cell cell
  484. * @param i 索引
  485. */
  486. private void setRowsSpan(List<Integer> indexs, List<Integer> spanStartIndex,
  487. List<Integer> spanNumList, PdfPTable table, PdfPCell cell, int i) {
  488. if (indexs != null) {
  489. boolean isAllNotEqual = true;
  490. for (Integer index : indexs) {
  491. if (i == index) {
  492. isAllNotEqual = false;
  493. break;
  494. }
  495. }
  496. //没有不加的下标
  497. if (isAllNotEqual) {
  498. // 判断在哪里设置span值
  499. if (spanStartIndex != null) {
  500. boolean isSpan = false;
  501. int copyJ = 0;
  502. for (int j = 0; j < spanStartIndex.size(); j++) {
  503. if (i == spanStartIndex.get(j)) {
  504. isSpan = true;
  505. copyJ = j;
  506. break;
  507. }
  508. }
  509. if (isSpan) {
  510. int spanNum = spanNumList.get(copyJ);
  511. cell.setRowspan(spanNum);
  512. }
  513. }
  514. table.addCell(cell);
  515. }
  516. } else {
  517. table.addCell(cell);
  518. }
  519. }
  520. /**
  521. * 获取某列要合并的单元格数量
  522. *
  523. * @param list 内容必须符合'A,A,B,C,D,D,D,E' 而不是 'A,A,B,C,A,D,D,D,E' ,即所有相同的值必须在一起不能分散
  524. * @return
  525. */
  526. private List<Integer> getSpanNumList(List<String> list) {
  527. LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
  528. if (list.size() > 0) {
  529. for (int i = 0; i < list.size(); i = i + 1) {
  530. map.put(list.get(i), i);
  531. }
  532. }
  533. //修改对应key值的value
  534. Set<String> s = map.keySet();//获取KEY集合
  535. List<String> strings = new ArrayList<>(s);
  536. int spanNum = 0;
  537. for (String string : strings) {
  538. int tmpSpanNum = map.get(string) - spanNum + 1;
  539. map.put(string, tmpSpanNum);
  540. spanNum += tmpSpanNum;
  541. }
  542. List<Integer> res = new ArrayList<>();
  543. for (String string : strings) {
  544. res.add(map.get(string));
  545. }
  546. return res;
  547. }
  548. /**
  549. * 获取某列要合并的单元格初始下标
  550. *
  551. * @param list 内容必须符合'A,A,B,C,D,D,D,E' 而不是 'A,A,B,C,A,D,D,D,E' ,即所有相同的值必须在一起不能分散
  552. * @param resSpanNumList
  553. * @return
  554. */
  555. private List<Integer> getStartIndexList(List<String> list, List<Integer> resSpanNumList) {
  556. LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
  557. if (list.size() > 0) {
  558. for (int i = 0; i < list.size(); i = i + 1) {
  559. map.put(list.get(i), i);
  560. }
  561. }
  562. Set<String> keys = map.keySet();//获取KEY集合
  563. List<String> stringKeys = new ArrayList<>(keys);
  564. List<Integer> res = new ArrayList<>();
  565. if (stringKeys.size() == resSpanNumList.size()) {
  566. for (int i = 0; i < stringKeys.size(); i++) {
  567. res.add(map.get(stringKeys.get(i)) - resSpanNumList.get(i) + 1);
  568. }
  569. }
  570. return res;
  571. }
  572. /**
  573. * 不加某字段的索引集合
  574. *
  575. * @param listLength
  576. * @param resSpanNumList
  577. * @param resStartIndexList
  578. * @return
  579. */
  580. private List<Integer> getIndexs(int listLength,
  581. List<Integer> resSpanNumList, List<Integer> resStartIndexList) {
  582. List<Integer> indexs = new ArrayList<>();
  583. for (int i = 0; i < listLength; i++) {
  584. for (int j = 0; j < resStartIndexList.size(); j++) {
  585. if (i == resStartIndexList.get(j)) {
  586. for (int k = i + 1; k < i + resSpanNumList.get(j); k++) {
  587. indexs.add(k);
  588. }
  589. }
  590. }
  591. }
  592. return indexs;
  593. }
  594. }