CustomMaintenanceServiceImpl.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. package com.tofly.dyrq.custom.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonIntegerFormatVisitor;
  8. import com.tofly.common.core.constant.SecurityConstants;
  9. import com.tofly.common.core.entity.ResultRespone;
  10. import com.tofly.common.core.util.Date8Util;
  11. import com.tofly.common.core.util.DateUtil;
  12. import com.tofly.common.core.util.FtpUtil;
  13. import com.tofly.common.core.util.StringUtil;
  14. import com.tofly.common.mapper.ToflyCodeCommonMapper;
  15. import com.tofly.common.oauth.exception.ToflyDeniedException;
  16. import com.tofly.common.oauth.util.SecurityUtils;
  17. import com.tofly.dyrq.custom.entity.*;
  18. import com.tofly.dyrq.custom.mapper.CustomMaintenanceMapper;
  19. import com.tofly.dyrq.custom.service.BaseInfoService;
  20. import com.tofly.dyrq.custom.service.CustomMaintenanceService;
  21. import com.tofly.dyrq.custom.service.CustomPointService;
  22. import com.tofly.dyrq.custom.service.GisAboutService;
  23. import com.tofly.dyrq.entity.*;
  24. import com.tofly.dyrq.config.FilePathBean;
  25. import com.tofly.dyrq.service.*;
  26. import lombok.AllArgsConstructor;
  27. import org.apache.commons.lang.StringUtils;
  28. import org.springframework.stereotype.Service;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import org.springframework.util.MultiValueMap;
  31. import org.springframework.web.multipart.MultipartFile;
  32. import org.springframework.web.multipart.MultipartHttpServletRequest;
  33. import javax.servlet.http.HttpServletRequest;
  34. import java.util.*;
  35. import java.util.concurrent.ExecutorService;
  36. import java.util.concurrent.Executors;
  37. import java.util.stream.Collectors;
  38. @AllArgsConstructor
  39. @Service
  40. public class CustomMaintenanceServiceImpl implements CustomMaintenanceService {
  41. private final MaintenanceService maintenanceService;
  42. private final MaintenanceContentService maintenanceContentService;
  43. private final MaintenanceDeviceService maintenanceDeviceService;
  44. private final MaintenanceMenuService maintenanceMenuService;
  45. private final MaintenanceDeviceConService maintenanceDeviceConService;
  46. private final MaintenanceFileService maintenanceFileService;
  47. private final MaintenanceDeviceFileService maintenanceDeviceFileService;
  48. private final FilePathBean filePathBean;
  49. private final CustomMaintenanceMapper customMaintenanceMapper;
  50. private final ToflyCodeCommonMapper toflyCodeCommonMapper;
  51. private final BaseInfoService baseInfoService;
  52. private final PlanPointTempService planPointTempService;
  53. private final SysDeviceTypeService sysDeviceTypeService;
  54. private final GisAboutService gisAboutService;
  55. private final CustomPointService customPointService;
  56. @Override
  57. public IPage getMaintenancePage(Page page, MaintenanceSearch maintenanceSearch) {
  58. return page.setRecords(customMaintenanceMapper.getMaintenancePage(page, maintenanceSearch));
  59. //查询主记录
  60. // IPage result = maintenanceService.pageMaps(page, Wrappers.<Maintenance>lambdaQuery()
  61. // .in(maintenanceSearch.getIds() != null, Maintenance::getId, maintenanceSearch.getIds())
  62. //// .eq(maintenanceSearch.getRegion() != null, Maintenance::getRegion, maintenanceSearch.getRegion())
  63. // .ge(maintenanceSearch.getStartDate() != null, Maintenance::getCheckEndDate, maintenanceSearch.getStartDate())
  64. // .le(maintenanceSearch.getEndDate() != null, Maintenance::getCheckBeginDate, maintenanceSearch.getEndDate())
  65. // .eq(maintenanceSearch.getChildPlanId() != null, Maintenance::getChildPlanId, maintenanceSearch.getChildPlanId())
  66. // .eq(maintenanceSearch.getPlanTempPointId() != null, Maintenance::getPlanTempPointId, maintenanceSearch.getPlanTempPointId())
  67. // .eq(maintenanceSearch.getCreateUser() != null, Maintenance::getCreateUser, maintenanceSearch.getCreateUser())
  68. // );
  69. // List<Map> records = result.getRecords();
  70. // //查询记录关联的检查内容及详情
  71. // for (Map i : records) {
  72. // i.put("userName", i.get("userid") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("userid").toString())) : "");
  73. // i.put("userDeptId", i.get("userid") != null ? toflyCodeCommonMapper.getDeptName(Long.parseLong(i.get("userid").toString())) : "");
  74. // i.put("checkUserName", i.get("checkUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("checkUser").toString())) : "");
  75. // i.put("createUserName", i.get("createUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("createUser").toString())) : "");
  76. // Long recordId = Long.parseLong(i.get("id").toString());
  77. // List<Map<String, Object>> list = maintenanceContentService.listMaps(Wrappers.<MaintenanceContent>lambdaQuery()
  78. // .eq(MaintenanceContent::getRecordId, recordId)
  79. // .select(MaintenanceContent::getMenuId, MaintenanceContent::getNote));
  80. // for (Map j : list) {
  81. // Long menuId = j.get("menuId") != null ? Long.parseLong(j.get("menuId").toString()) : 0;
  82. // MaintenanceMenu maintenanceMenu = menuId != null ? maintenanceMenuService.getById(menuId) : null;
  83. // if (maintenanceMenu == null) {
  84. // throw new ToflyDeniedException("检查内容菜单不存在该项检查内容");
  85. // }
  86. // j.put("parentId", maintenanceMenu.getParentId());
  87. // j.put("name", maintenanceMenu.getName());
  88. // }
  89. // i.put("content", list);
  90. // //添加文件
  91. // MaintenanceFile maintenanceFile = new MaintenanceFile();
  92. // maintenanceFile.setMaintenanceId(recordId);
  93. // List<MaintenanceFile> files = maintenanceFileService.list(Wrappers.query(maintenanceFile));
  94. // List<Map> fileStream = files.stream().map(f -> {
  95. // HashMap hm = new HashMap();
  96. // hm.put("fileName", f.getFileName());
  97. // hm.put("filePath", f.getFilePath());
  98. // return hm;
  99. // }).collect(Collectors.toList());
  100. // i.put("files", fileStream);
  101. // }
  102. // result.setRecords(records);
  103. // return result;
  104. }
  105. @Transactional
  106. @Override
  107. public Boolean addMaintenance(HttpServletRequest request, AddMaintenance addMaintenance) {
  108. Long childPlanId = addMaintenance.getChildPlanId();
  109. Long pointId = addMaintenance.getPlanTempPointId();
  110. //判断该计划中该点是否已上传
  111. // Maintenance one = maintenanceService.getOne(Wrappers.<Maintenance>lambdaQuery().eq(Maintenance::getChildPlanId, childPlanId)
  112. // .eq(Maintenance::getPlanTempPointId, pointId));
  113. // if (one != null) {
  114. // throw new ToflyDeniedException("当前计划该设备记录已上传");
  115. // }
  116. Date now = Date8Util.getCurrentDate();
  117. //更新计划的点
  118. planPointTempService.update(Wrappers.<PlanPointTemp>lambdaUpdate()
  119. .eq(PlanPointTemp::getChildPlanId, childPlanId)
  120. .eq(PlanPointTemp::getPointId, pointId)
  121. .set(PlanPointTemp::getIsover, "1")
  122. .set(PlanPointTemp::getState, "1")
  123. .set(PlanPointTemp::getOverDate, now)
  124. .set(PlanPointTemp::getCheckState, '1')
  125. .set(PlanPointTemp::getCheckDate, now));
  126. //保存记录表
  127. maintenanceService.save(addMaintenance);
  128. Long recordId = addMaintenance.getId();
  129. if (addMaintenance.getContent() == null || addMaintenance.getContent().size() == 0) {
  130. throw new ToflyDeniedException("检查内容不能为空");
  131. }
  132. //保存记录关联的检查内容
  133. addMaintenance.getContent().forEach(content -> {
  134. if (content.getParentId() == null) {
  135. throw new ToflyDeniedException("检查设施不能为空");
  136. }
  137. //记录设备信息和备注
  138. MaintenanceContent maintenanceContent = new MaintenanceContent();
  139. maintenanceContent.setRecordId(recordId);
  140. maintenanceContent.setMenuId(content.getParentId());
  141. maintenanceContent.setNote(content.getNote());
  142. maintenanceContentService.save(maintenanceContent);
  143. //存储子检查内容
  144. if (StringUtil.isNotEmpty(content.getMenuIds())) {
  145. for (Long id : content.getMenuIds()) {
  146. MaintenanceContent maintenanceContent2 = new MaintenanceContent();
  147. maintenanceContent2.setRecordId(recordId);
  148. maintenanceContent2.setMenuId(Long.valueOf(id));
  149. maintenanceContentService.save(maintenanceContent2);
  150. }
  151. }
  152. });
  153. //更新点到位情况
  154. //遍历请求中key包含photo的所有文件,包括photo1,photo2中的多个文件
  155. MultiValueMap<String, MultipartFile> multiFileMap = ((MultipartHttpServletRequest) request).getMultiFileMap();
  156. multiFileMap.forEach((k, v) -> {
  157. //保存照片
  158. v.forEach(file -> {
  159. String fileName = file.getOriginalFilename();
  160. String filePath = filePathBean.getMaintenance() + IdWorker.getIdStr() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
  161. boolean b = FtpUtil.uploadFile2Ftp(file, filePath);
  162. if (b) {
  163. MaintenanceFile maintenanceFile = new MaintenanceFile();
  164. maintenanceFile.setFilePath(filePath);
  165. maintenanceFile.setFileName(fileName);
  166. maintenanceFile.setMaintenanceId(addMaintenance.getId());
  167. maintenanceFileService.save(maintenanceFile);
  168. }
  169. });
  170. });
  171. //异步更新到位比例
  172. ExecutorService executorService = Executors.newSingleThreadExecutor();
  173. executorService.execute(new Runnable() {
  174. @Override
  175. public void run() {
  176. customPointService.percentUpdate(childPlanId.toString());
  177. }
  178. });
  179. return true;
  180. }
  181. @Override
  182. @Transactional
  183. public Boolean putMaintenance(HttpServletRequest request, AddMaintenance addMaintenance) {
  184. //更新主记录
  185. maintenanceService.updateById(addMaintenance);
  186. //更新关联表 删除原关联并添加
  187. Long recordId = addMaintenance.getId();
  188. maintenanceContentService.remove(Wrappers.<MaintenanceContent>lambdaQuery().eq(MaintenanceContent::getRecordId, recordId));
  189. //保存记录关联的检查内容
  190. if(addMaintenance.getContent() != null) {
  191. addMaintenance.getContent().forEach(content -> {
  192. //记录设备信息和备注
  193. MaintenanceContent maintenanceContent = new MaintenanceContent();
  194. maintenanceContent.setRecordId(recordId);
  195. maintenanceContent.setMenuId(content.getParentId());
  196. maintenanceContent.setNote(content.getNote());
  197. maintenanceContentService.save(maintenanceContent);
  198. //存储子检查内容
  199. // List menuIds = Arrays.asList(content.getMenuIds().split(","));
  200. content.getMenuIds().forEach(id -> {
  201. MaintenanceContent maintenanceContent2 = new MaintenanceContent();
  202. maintenanceContent2.setRecordId(recordId);
  203. maintenanceContent2.setMenuId((Long) id);
  204. maintenanceContentService.save(maintenanceContent2);
  205. });
  206. });
  207. }
  208. //清除文件
  209. List<MaintenanceFile> files = maintenanceFileService.list(Wrappers.<MaintenanceFile>lambdaQuery().eq(MaintenanceFile::getMaintenanceId, recordId));
  210. files.forEach(file -> {
  211. Boolean b = FtpUtil.deleteFile(file.getFilePath());
  212. });
  213. //清除原文件记录
  214. maintenanceFileService.remove(Wrappers.<MaintenanceFile>lambdaQuery().eq(MaintenanceFile::getMaintenanceId, recordId));
  215. //遍历请求中key包含photo的所有文件,包括photo1,photo2中的多个文件
  216. MultiValueMap<String, MultipartFile> multiFileMap = ((MultipartHttpServletRequest) request).getMultiFileMap();
  217. multiFileMap.forEach((k, v) -> {
  218. //保存照片
  219. v.forEach(file -> {
  220. String fileName = file.getOriginalFilename();
  221. String filePath = filePathBean.getMaintenance() + IdWorker.getIdStr() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
  222. boolean b = FtpUtil.uploadFile2Ftp(file, filePath);
  223. if (b) {
  224. MaintenanceFile maintenanceFile = new MaintenanceFile();
  225. maintenanceFile.setFilePath(filePath);
  226. maintenanceFile.setFileName(fileName);
  227. maintenanceFile.setMaintenanceId(addMaintenance.getId());
  228. maintenanceFileService.save(maintenanceFile);
  229. }
  230. });
  231. });
  232. return true;
  233. }
  234. @Override
  235. public IPage getMaintenanceDevicePage(Page page, MaintenanceDeviceSearch maintenanceDeviceSearch) {
  236. return page.setRecords(customMaintenanceMapper.getMaintenanceDevicePage(page, maintenanceDeviceSearch));
  237. // //查询主记录
  238. // IPage result = maintenanceDeviceService.pageMaps(page, Wrappers.<MaintenanceDevice>lambdaQuery()
  239. // .in(maintenanceDeviceSearch.getIds() != null, MaintenanceDevice::getId, maintenanceDeviceSearch.getIds())
  240. // .ge(maintenanceDeviceSearch.getStartDate() != null, MaintenanceDevice::getCreateDate, maintenanceDeviceSearch.getStartDate())
  241. // .le(maintenanceDeviceSearch.getEndDate() != null, MaintenanceDevice::getCreateDate, maintenanceDeviceSearch.getEndDate())
  242. // .eq(maintenanceDeviceSearch.getChildPlanId() != null, MaintenanceDevice::getChildPlanId, maintenanceDeviceSearch.getChildPlanId())
  243. // .eq(maintenanceDeviceSearch.getPlanTempPointId() != null, MaintenanceDevice::getPlanTempPointId, maintenanceDeviceSearch.getPlanTempPointId())
  244. // .eq(maintenanceDeviceSearch.getCreateUser() != null, MaintenanceDevice::getCreateUser, maintenanceDeviceSearch.getCreateUser()));
  245. // List<Map> records = result.getRecords();
  246. // //查询记录关联的检查内容及详情
  247. // for (Map i : records) {
  248. // i.put("maintainUserName", i.get("maintainUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("maintainUser").toString())) : "");
  249. // i.put("checkUserName", i.get("checkUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("checkUser").toString())) : "");
  250. // i.put("createUserName", i.get("createUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("createUser").toString())) : "");
  251. // i.put("deviceUserName", i.get("deviceUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("deviceUser").toString())) : "");
  252. // i.put("repairUserName", i.get("repairUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("repairUser").toString())) : "");
  253. // i.put("useUserName", i.get("useUser") != null ? toflyCodeCommonMapper.getUserName(Long.parseLong(i.get("useUser").toString())) : "");
  254. // //添加设备操作人部门
  255. // i.put("deviceUserDeptId", i.get("deviceUser") != null ? toflyCodeCommonMapper.getDeptName(Long.parseLong(i.get("deviceUser").toString())) : null);
  256. // Long recordId = Long.parseLong(i.get("id").toString());
  257. // MaintenanceDeviceCon maintenanceDeviceCon = new MaintenanceDeviceCon();
  258. // maintenanceDeviceCon.setDeviceRecordId(recordId);
  259. // List<MaintenanceDeviceCon> list = maintenanceDeviceConService.list(Wrappers.query(maintenanceDeviceCon));
  260. // List<Long> list1 = list.stream().map(m -> {
  261. // Long typeId = m.getTypeId();
  262. // return typeId;
  263. // }).collect(Collectors.toList());
  264. // i.put("content", list1);
  265. // //添加文件
  266. // MaintenanceDeviceFile maintenanceDeviceFile = new MaintenanceDeviceFile();
  267. // maintenanceDeviceFile.setMaintenanceDeviceId(recordId);
  268. // List<MaintenanceDeviceFile> files = maintenanceDeviceFileService.list(Wrappers.query(maintenanceDeviceFile));
  269. // List<Map> fileStream = files.stream().map(f -> {
  270. // HashMap hm = new HashMap();
  271. // hm.put("fileName", f.getFileName());
  272. // hm.put("filePath", f.getFilePath());
  273. // return hm;
  274. // }).collect(Collectors.toList());
  275. // i.put("files", fileStream);
  276. // }
  277. // result.setRecords(records);
  278. // return result;
  279. }
  280. @Transactional
  281. @Override
  282. public Boolean addMaintenanceDevice(HttpServletRequest request, AddMaintenanceDevice addMaintenanceDevice) {
  283. // if (addMaintenanceDevice.getChildPlanId() == null) {
  284. // throw new ToflyDeniedException("巡检计划id不能为空");
  285. // }
  286. // if (addMaintenanceDevice.getPlanTempPointId() == null) {
  287. // throw new ToflyDeniedException("巡检计划临时点ID");
  288. // }
  289. Long childPlanId = addMaintenanceDevice.getChildPlanId();
  290. Long pointId = addMaintenanceDevice.getPlanTempPointId();
  291. //判断是否该计划该点存在
  292. // PlanPointTemp pointTemp = planPointTempService.getOne(Wrappers.<PlanPointTemp>lambdaQuery()
  293. // .eq(PlanPointTemp::getChildPlanId, childPlanId)
  294. // .eq(PlanPointTemp::getPointId, pointId));
  295. // if (pointTemp == null) {
  296. // throw new ToflyDeniedException("该计划不存在该点信息");
  297. // }
  298. //判断该计划中该点是否已上传
  299. // MaintenanceDevice one = maintenanceDeviceService.getOne(Wrappers.<MaintenanceDevice>lambdaQuery()
  300. // .eq(MaintenanceDevice::getChildPlanId, childPlanId)
  301. // .eq(MaintenanceDevice::getPlanTempPointId, pointId));
  302. // if (one != null) {
  303. // throw new ToflyDeniedException("当前计划该设备记录已上传");
  304. // }
  305. Date now = Date8Util.getCurrentDate();
  306. //更新计划的点
  307. planPointTempService.update(Wrappers.<PlanPointTemp>lambdaUpdate()
  308. .eq(PlanPointTemp::getChildPlanId, childPlanId)
  309. .eq(PlanPointTemp::getPointId, pointId)
  310. .set(PlanPointTemp::getIsover, "1")
  311. .set(PlanPointTemp::getState, "1")
  312. .set(PlanPointTemp::getOverDate, now)
  313. .set(PlanPointTemp::getCheckState, '1')
  314. .set(PlanPointTemp::getCheckDate, now));
  315. //根据巡检计划id和点sid查询gis服务,获取竣工日期,设备参数,型号
  316. Map param = new HashMap();
  317. param.put("ckey", "pipe1");
  318. ResultRespone resultRespone = baseInfoService.getSourcePage(param);
  319. if (resultRespone.getCode() != 1) {
  320. throw new ToflyDeniedException("gis服务地址获取失败");
  321. }
  322. //获取计划点对应的layerId
  323. SysDeviceType sysDeviceType = sysDeviceTypeService.getOne(Wrappers.<SysDeviceType>lambdaQuery()
  324. .select(SysDeviceType::getContactLayerId)
  325. .apply("point_type_id =\n" +
  326. "(select device_type_id from TF_plan_point_temp pt where pt.child_plan_id ={0} and pt.point_id = {1} )"
  327. , childPlanId, pointId));
  328. String layerId = sysDeviceType.getContactLayerId();
  329. Map result = (Map) resultRespone.getResult();
  330. List<Map> records = (List) result.get("records");
  331. String gisUrl = "";
  332. if (records != null && records.size() > 0) {
  333. gisUrl = records.get(0).get("cval").toString() + "/" + layerId + "/query";
  334. }
  335. //Gis查询
  336. ExcelParam excelParam = new ExcelParam();
  337. excelParam.setGeometry("1");
  338. excelParam.setObjectids(pointId.toString());
  339. excelParam.setLayerurl(gisUrl);
  340. excelParam.setOutfields("SID,OBJECTID,CODE,GASDATE,FINISHDATE,MATERIAL,SPEC,DIAMETER");
  341. JSONArray geo = gisAboutService.exceloutList(excelParam);
  342. //保存使用年限,设备参数,型号
  343. if(geo.size() >0){
  344. String material = geo.getJSONObject(0).getJSONObject("attributes").getString("MATERIAL");
  345. Integer dimameter = geo.getJSONObject(0).getJSONObject("attributes").getInteger("DIAMETER");
  346. String type = geo.getJSONObject(0).getJSONObject("attributes").getString("SPEC");
  347. addMaintenanceDevice.setType(type);
  348. addMaintenanceDevice.setTechParam("材质:" + (material == null ? "无" : material) + " 管径:" + (dimameter == null ? "无" : dimameter.toString()));
  349. Date gasDate = geo.getJSONObject(0).getJSONObject("attributes").getDate("GASDATE");
  350. Integer differentYear = null;
  351. if (gasDate != null) {
  352. differentYear = getDifferentYear(gasDate);
  353. }
  354. addMaintenanceDevice.setUsedYears(differentYear == null ? null : differentYear.shortValue());
  355. }
  356. // String material = geo.getJSONObject(0).getJSONObject("attributes").getString("MATERIAL");
  357. // Integer dimameter = geo.getJSONObject(0).getJSONObject("attributes").getInteger("DIAMETER");
  358. // String type = geo.getJSONObject(0).getJSONObject("attributes").getString("SPEC");
  359. // addMaintenanceDevice.setType(type);
  360. // addMaintenanceDevice.setTechParam("材质:" + (material == null ? "无" : material) + " 管径:" + (dimameter == null ? "无" : dimameter.toString()));
  361. // Date gasDate = geo.getJSONObject(0).getJSONObject("attributes").getDate("GASDATE");
  362. // Integer differentYear = null;
  363. // if (gasDate != null) {
  364. // differentYear = getDifferentYear(gasDate);
  365. // }
  366. // addMaintenanceDevice.setUsedYears(differentYear == null ? null : differentYear.shortValue());
  367. //保存登记表 保养人,保养时间
  368. addMaintenanceDevice.setMaintainUser(SecurityUtils.getUserId());
  369. addMaintenanceDevice.setMaintainDate(Date8Util.getCurrentDate());
  370. addMaintenanceDevice.setSecurity("严格按照相关要求和部门《燃气管网附属设备设施维护保养制度》执行");
  371. maintenanceDeviceService.save(addMaintenanceDevice);
  372. Long recordId = addMaintenanceDevice.getId();
  373. //保存记录关联的保养内容
  374. if(addMaintenanceDevice.getContent() != null) {
  375. addMaintenanceDevice.getContent().stream().forEach(content -> {
  376. MaintenanceDeviceCon maintenanceDeviceCon = new MaintenanceDeviceCon();
  377. maintenanceDeviceCon.setDeviceRecordId(recordId);
  378. maintenanceDeviceCon.setTypeId(content);
  379. maintenanceDeviceConService.save(maintenanceDeviceCon);
  380. });
  381. }
  382. //遍历请求中key包含photo的所有文件,包括photo1,photo2中的多个文件
  383. MultiValueMap<String, MultipartFile> multiFileMap = ((MultipartHttpServletRequest) request).getMultiFileMap();
  384. multiFileMap.forEach((k, v) -> {
  385. //保存照片
  386. v.forEach(file -> {
  387. String fileName = file.getOriginalFilename();
  388. String filePath = filePathBean.getMaintenanceDevice() + IdWorker.getIdStr() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
  389. boolean b = FtpUtil.uploadFile2Ftp(file, filePath);
  390. if (b) {
  391. MaintenanceDeviceFile maintenanceDeviceFile = new MaintenanceDeviceFile();
  392. maintenanceDeviceFile.setFilePath(filePath);
  393. maintenanceDeviceFile.setFileName(fileName);
  394. maintenanceDeviceFile.setMaintenanceDeviceId(addMaintenanceDevice.getId());
  395. maintenanceDeviceFileService.save(maintenanceDeviceFile);
  396. }
  397. });
  398. });
  399. //更新到位比例
  400. //异步更新到位比例
  401. ExecutorService executorService = Executors.newSingleThreadExecutor();
  402. executorService.execute(new Runnable() {
  403. @Override
  404. public void run() {
  405. customPointService.percentUpdate(childPlanId.toString());
  406. }
  407. });
  408. return true;
  409. }
  410. @Override
  411. public Boolean putMaintenanceDevice(HttpServletRequest request, AddMaintenanceDevice addMaintenanceDevice) {
  412. //更新主记录
  413. maintenanceDeviceService.updateById(addMaintenanceDevice);
  414. //更新关联表 删除原关联并添加
  415. Long recordId = addMaintenanceDevice.getId();
  416. maintenanceDeviceConService.remove(Wrappers.<MaintenanceDeviceCon>lambdaQuery().eq(MaintenanceDeviceCon::getDeviceRecordId, recordId));
  417. //保存记录关联的检查内容
  418. if (addMaintenanceDevice.getContent() != null){
  419. addMaintenanceDevice.getContent().forEach(content -> {
  420. MaintenanceDeviceCon maintenanceDeviceCon = new MaintenanceDeviceCon();
  421. maintenanceDeviceCon.setDeviceRecordId(recordId);
  422. maintenanceDeviceCon.setTypeId(content);
  423. maintenanceDeviceConService.save(maintenanceDeviceCon);
  424. });
  425. }
  426. //清除文件
  427. List<MaintenanceDeviceFile> files = maintenanceDeviceFileService.list(Wrappers.<MaintenanceDeviceFile>lambdaQuery().eq(MaintenanceDeviceFile::getMaintenanceDeviceId, recordId));
  428. files.forEach(file -> {
  429. Boolean b = FtpUtil.deleteFile(file.getFilePath());
  430. });
  431. //清除原文件记录
  432. maintenanceDeviceFileService.remove(Wrappers.<MaintenanceDeviceFile>lambdaQuery().eq(MaintenanceDeviceFile::getMaintenanceDeviceId, recordId));
  433. //遍历请求中key包含photo的所有文件,包括photo1,photo2中的多个文件
  434. MultiValueMap<String, MultipartFile> multiFileMap = ((MultipartHttpServletRequest) request).getMultiFileMap();
  435. multiFileMap.forEach((k, v) -> {
  436. //保存照片
  437. v.forEach(file -> {
  438. String fileName = file.getOriginalFilename();
  439. String filePath = filePathBean.getMaintenanceDevice() + IdWorker.getIdStr() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
  440. boolean b = FtpUtil.uploadFile2Ftp(file, filePath);
  441. if (b) {
  442. MaintenanceDeviceFile maintenanceDeviceFile = new MaintenanceDeviceFile();
  443. maintenanceDeviceFile.setFilePath(filePath);
  444. maintenanceDeviceFile.setFileName(fileName);
  445. maintenanceDeviceFile.setMaintenanceDeviceId(addMaintenanceDevice.getId());
  446. maintenanceDeviceFileService.save(maintenanceDeviceFile);
  447. }
  448. });
  449. });
  450. return true;
  451. }
  452. private int getDifferentYear(Date before) {
  453. Calendar calendar1 = Calendar.getInstance();
  454. calendar1.setTime(before);
  455. Calendar calendar2 = Calendar.getInstance();
  456. return calendar2.get(Calendar.YEAR) - calendar1.get(Calendar.YEAR);
  457. }
  458. private int getDifferentMonth(Date before) {
  459. Calendar calendar1 = Calendar.getInstance();
  460. calendar1.setTime(before);
  461. Calendar calendar2 = Calendar.getInstance();
  462. return calendar2.get(Calendar.MONTH) - calendar1.get(Calendar.MONTH);
  463. }
  464. }