RepairServiceImpl.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. package com.om.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollectionUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.om.entity.dto.*;
  7. import com.om.entity.po.*;
  8. import com.om.entity.vo.*;
  9. import com.om.exception.BadReqException;
  10. import com.om.exception.BizException;
  11. import com.om.mapper.RepairMapper;
  12. import com.om.service.*;
  13. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  14. import com.om.utils.*;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.springframework.context.annotation.Bean;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import org.springframework.web.multipart.MultipartFile;
  20. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  21. import org.springframework.web.multipart.support.StandardServletMultipartResolver;
  22. import javax.annotation.Resource;
  23. import javax.servlet.http.HttpServletRequest;
  24. import java.io.File;
  25. import java.io.FileInputStream;
  26. import java.io.IOException;
  27. import java.time.LocalDateTime;
  28. import java.time.format.DateTimeFormatter;
  29. import java.util.*;
  30. import java.util.stream.Collectors;
  31. /**
  32. * <p>
  33. * 服务实现类
  34. * </p>
  35. *
  36. * @author bmmx
  37. * @since 2024-02-18
  38. */
  39. @Service
  40. public class RepairServiceImpl extends ServiceImpl<RepairMapper, Repair> implements IRepairService {
  41. @Resource
  42. private IFaultCodeService faultCodeService;
  43. @Resource
  44. private IEcuInfoService ecuInfoService;
  45. @Resource
  46. private IElectronicControlService electronicControlService;
  47. @Resource
  48. RepairMapper repairMapper;
  49. @Resource
  50. IUserService userService;
  51. @Resource
  52. private HuaweiObsUtil huaweiObsUtil;
  53. @Resource
  54. private HttpServletRequest request;
  55. @Override
  56. @Transactional
  57. public Result AppCreateReport(APPReportCreateDTO dto) {
  58. Integer userId = UserContext.getUserId();
  59. User user = userService.getById(userId);
  60. // 判断数据、
  61. if (BeanUtil.isEmpty(dto)) {
  62. throw new BadReqException("数据为空");
  63. }
  64. Repair repair = BeanUtil.copyProperties(dto, Repair.class);
  65. List<AppElectronicDTO> electronicControls = dto.getElectronicControls();
  66. List<Integer> eleIds = new ArrayList<>();
  67. List<ElectronicControl> electronicControlList = new ArrayList<>();
  68. for (AppElectronicDTO electronicControlDTO : electronicControls) {
  69. ElectronicControl electronicControl = BeanUtil.copyProperties(electronicControlDTO, ElectronicControl.class);
  70. electronicControlList.add(electronicControl);
  71. List<AppEcuInfoDTO> ecuInfors = electronicControlDTO.getEcuInfors();
  72. List<AppFaultCodeDTO> faultCodes = electronicControlDTO.getFaultCodes();
  73. List<EcuInfo> ecuInfos = BeanUtil.copyToList(ecuInfors, EcuInfo.class);
  74. List<FaultCode> faultCodes1 = BeanUtil.copyToList(faultCodes, FaultCode.class);
  75. for (EcuInfo ecuInfo : ecuInfos) {
  76. ecuInfo.setElectronicControlId(electronicControl.getId());
  77. }
  78. for (FaultCode faultCode : faultCodes1) {
  79. faultCode.setElectronicControlId(electronicControl.getId());
  80. }
  81. eleIds.add(electronicControl.getId());
  82. ecuInfoService.saveBatch(ecuInfos);
  83. faultCodeService.saveBatch(faultCodes1);
  84. }
  85. StringBuffer sb = new StringBuffer();
  86. for (int i = 0; i < eleIds.size(); i++) {
  87. sb.append(eleIds);
  88. if (i != eleIds.size() - 1) {
  89. sb.append(",");
  90. }
  91. }
  92. repair.setElectronicControlIds(sb.toString());
  93. electronicControlService.saveBatch(electronicControlList);
  94. repair.setUsername(user.getUsername());
  95. this.save(repair);
  96. return Result.ok();
  97. }
  98. @Override
  99. public Result<AppRepairQueryPageVO> AppGetPageList(APPRepairQueryPageDTO dto) {
  100. Integer userId = UserContext.getUserId();
  101. User user = userService.getById(userId);
  102. if (BeanUtil.isEmpty(user)) {
  103. throw new BizException("用户不存在");
  104. }
  105. //获取数据
  106. Integer pageIndex = dto.getPageIndex();
  107. Integer pageSize = dto.getPageSize();
  108. //分页查询
  109. Page<Repair> page = this.lambdaQuery()
  110. .orderByDesc(Repair::getCreateTime)
  111. .eq(Repair::getUsername, user.getUsername())
  112. .page(new Page<>(pageIndex, pageSize));
  113. if (BeanUtil.isEmpty(page)) {
  114. throw new BadReqException("请求失败");
  115. }
  116. AppRepairQueryPageVO vo = new AppRepairQueryPageVO();
  117. vo.setSize(pageSize);
  118. vo.setCurrent(pageIndex);
  119. vo.setPages((int) page.getPages());
  120. vo.setTotal((int) page.getTotal());
  121. List<Repair> records = page.getRecords();
  122. if (CollectionUtil.isEmpty(records)) {
  123. records = Collections.emptyList();
  124. }
  125. List<DiagnosticReportVO> list = new ArrayList<>();
  126. for (Repair record : records) {
  127. DiagnosticReportVO diagnosticReportVO = new DiagnosticReportVO();
  128. diagnosticReportVO.setCreationTime(LocalDateTime.now());
  129. diagnosticReportVO.setDiagnosticReportId(record.getId());
  130. diagnosticReportVO.setDiagnosticReportName(record.getMainTitle());
  131. diagnosticReportVO.setFileName(record.getFileName());
  132. String electronicControlIds = record.getElectronicControlIds();
  133. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  134. .map(Integer::parseInt)
  135. .collect(Collectors.toList());
  136. for (Integer eleId : eleIds) {
  137. List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
  138. .eq(FaultCode::getElectronicControlId, eleId)
  139. .list();
  140. diagnosticReportVO.setFaultCodesNumber(String.valueOf(faultCodeList.size()));
  141. }
  142. list.add(diagnosticReportVO);
  143. }
  144. vo.setRecords(list);
  145. return Result.ok(vo);
  146. }
  147. @Override
  148. @Transactional
  149. public Result create(RepairDTO repairDTO) {
  150. Repair repair = new Repair();
  151. BeanUtil.copyProperties(repairDTO,repair);
  152. return Result.ok();
  153. }
  154. @Override
  155. @Transactional
  156. public Result delete(Integer id) {
  157. Repair repair = this.getById(id);
  158. if (repair == null) {
  159. throw new BadReqException("删除错误");
  160. }
  161. String electronicControlIds = repair.getElectronicControlIds();
  162. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  163. .map(Integer::parseInt)
  164. .collect(Collectors.toList());
  165. for (Integer eleId : eleIds) {
  166. List<Integer> faultIds = faultCodeService.lambdaQuery()
  167. .eq(FaultCode::getElectronicControlId, eleId)
  168. .list().stream().map(c -> c.getId()).collect(Collectors.toList());
  169. List<Integer> ecuIds = ecuInfoService.lambdaQuery()
  170. .eq(EcuInfo::getElectronicControlId, eleId)
  171. .list().stream().map(c -> c.getId()).collect(Collectors.toList());
  172. faultCodeService.removeByIds(faultIds);
  173. ecuInfoService.removeByIds(ecuIds);
  174. }
  175. electronicControlService.removeByIds(eleIds);
  176. this.removeById(id);
  177. return Result.ok();
  178. }
  179. @Override
  180. public Result<RepairVO> getByIds(Integer id) {
  181. Repair repair = this.getById(id);
  182. if (repair == null) {
  183. throw new BadReqException("查询错误");
  184. }
  185. String electronicControlIds = repair.getElectronicControlIds();
  186. RepairVO vo = new RepairVO();
  187. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  188. .map(Integer::parseInt)
  189. .collect(Collectors.toList());
  190. BeanUtil.copyProperties(repair, vo);
  191. ReportTitleDto reportTitleDto = new ReportTitleDto();
  192. BeanUtil.copyProperties(repair,reportTitleDto);
  193. List<ElectronicControls> electronicControlsList = new ArrayList<>();
  194. int eleCount = 0;
  195. int faultCount = 0;
  196. for (Integer eleId : eleIds) {
  197. ElectronicControls electronicControls = new ElectronicControls();
  198. ElectronicControl electronicControl = electronicControlService.getById(eleId);
  199. BeanUtil.copyProperties(electronicControl,reportTitleDto);
  200. electronicControls.setElectronicControlName(electronicControl.getElectronicControlName());
  201. List<EcuInfo> list = ecuInfoService.lambdaQuery()
  202. .eq(EcuInfo::getElectronicControlId, eleId)
  203. .list();
  204. electronicControls.setEcuInfo(list);
  205. List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
  206. .eq(FaultCode::getElectronicControlId, eleId)
  207. .list();
  208. electronicControls.setFaultCode(faultCodeList);
  209. electronicControlsList.add(electronicControls);
  210. eleCount++;
  211. faultCount += faultCodeList.size();
  212. }
  213. vo.setElectronicControls(electronicControlsList);
  214. vo.setElectronicControlCount(eleCount);
  215. vo.setFaultCodeCount(faultCount);
  216. vo.setReportTitleDto(reportTitleDto);
  217. return Result.ok(vo);
  218. }
  219. @Override
  220. public Result<RepairQueryPageVO> getPageList(RepairQueryPageDTO dto) {
  221. //从dto中获取数据
  222. Integer pageIndex = dto.getPageIndex();
  223. Integer pageSize = dto.getPageSize();
  224. LocalDateTime beginTime = dto.getBeginTime();
  225. LocalDateTime endTime = dto.getEndTime();
  226. String searchNum = dto.getSearchNum();
  227. // String searchVIN = dto.getSearchVIN();
  228. String searchDistributor = dto.getSearchDistributor();
  229. //分页查询
  230. Page<Repair> page = this.lambdaQuery()
  231. .like(StringUtils.isNotBlank(searchNum), Repair::getRepairNum, searchNum)
  232. // .like(StringUtils.isNotBlank(searchVIN),Repair::)
  233. .like(StringUtils.isNotBlank(searchDistributor), Repair::getDepartmentName, searchDistributor)
  234. .ge(beginTime != null, Repair::getCreateTime, beginTime)
  235. .le(endTime != null, Repair::getCreateTime, endTime)
  236. .page(new Page<>(pageIndex, pageSize));
  237. RepairQueryPageVO vo = new RepairQueryPageVO();
  238. vo.setCurrent((int) page.getCurrent());
  239. vo.setSize((int) page.getSize());
  240. vo.setPages((int) page.getPages());
  241. vo.setTotal((int) page.getTotal());
  242. if (StringUtils.isNotBlank(searchNum) || StringUtils.isNotBlank(searchDistributor) || beginTime != null || endTime != null) {
  243. vo.setSearchCount(true);
  244. }
  245. List<Repair> records = page.getRecords();
  246. List<QueryRepairVO> queryRepairVOList = new ArrayList<>();
  247. for (Repair record : records) {
  248. QueryRepairVO queryRepairVO = BeanUtil.copyProperties(record, QueryRepairVO.class);
  249. String electronicControlIds = record.getElectronicControlIds();
  250. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  251. .map(Integer::parseInt)
  252. .collect(Collectors.toList());
  253. List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
  254. //查询系统数量
  255. queryRepairVO.setSystemCount(electronicControlList.size());
  256. int faultCount = 0;
  257. for (ElectronicControl electronicControl : electronicControlList) {
  258. List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
  259. .eq(electronicControl != null, FaultCode::getElectronicControlId, electronicControl.getId())
  260. .list();
  261. faultCount += faultCodeList.size();
  262. }
  263. //查询故障数量
  264. queryRepairVO.setFaultCount(faultCount);
  265. queryRepairVOList.add(queryRepairVO);
  266. }
  267. vo.setRecords(queryRepairVOList);
  268. return Result.ok(vo);
  269. }
  270. @Override
  271. public Result<String> reportPdf(Integer id) {
  272. //根据id查询报告是否存在
  273. Repair repair = this.getById(id);
  274. if (BeanUtil.isEmpty(repair)){
  275. throw new BadReqException("该诊断报告不存在");
  276. }
  277. Map<String,String> baseMap = new HashMap<>();
  278. baseMap.put("车架号",repair.getVin());
  279. baseMap.put("年款",repair.getMileage());
  280. baseMap.put("里程",repair.getMileage());
  281. baseMap.put("诊断路径",repair.getDiagnosticPath());
  282. baseMap.put("报告编号",repair.getRepairNum());
  283. baseMap.put("SN",repair.getSn());
  284. String username = repair.getUsername();
  285. //根据用户名查询用户
  286. User user = userService.lambdaQuery()
  287. .eq(User::getUsername, username)
  288. .one();
  289. if (BeanUtil.isEmpty(user)){
  290. throw new BadReqException("该用户不存在");
  291. }
  292. Map<String,String> companyMap = new HashMap<>();
  293. companyMap.put("公司",user.getCompany());
  294. companyMap.put("电话",user.getTel());
  295. companyMap.put("地址",user.getAddress());
  296. List<ControlListMap> controlListMap = new ArrayList<>();
  297. String electronicControlIds = repair.getElectronicControlIds();
  298. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  299. .map(Integer::parseInt)
  300. .collect(Collectors.toList());
  301. List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
  302. for (Integer eleId : eleIds) {
  303. ElectronicControl electronicControl = electronicControlService.getById(eleId);
  304. List<EcuInfo> EcuList = ecuInfoService.lambdaQuery()
  305. .eq(EcuInfo::getElectronicControlId, eleId)
  306. .list();
  307. List<FaultCode> FaultList = faultCodeService.lambdaQuery()
  308. .eq(FaultCode::getElectronicControlId, eleId)
  309. .eq(FaultCode::getStatus,1)
  310. .list();
  311. Map<String,String> faultCodeMap = new HashMap<>();
  312. Map<String,String> versionMap = new HashMap<>();
  313. for (EcuInfo ecuInfo : EcuList) {
  314. versionMap.put(ecuInfo.getStrCaption(),ecuInfo.getStrInformation());
  315. }
  316. for (FaultCode faultCode : FaultList) {
  317. faultCodeMap.put(faultCode.getFaultCode(),faultCode.getDescription());
  318. }
  319. ControlListMap controlListMap1 = new ControlListMap();
  320. controlListMap1.setName(electronicControl.getElectronicControlName());
  321. controlListMap1.setVersionMap(versionMap);
  322. controlListMap1.setFaultCodeMap(faultCodeMap);
  323. controlListMap.add(controlListMap1);
  324. }
  325. File file = ITextPdfUtil.MapToPDF(repair.getId(), controlListMap, baseMap, companyMap);
  326. if (file==null){
  327. throw new BizException("该pdf文件不存在");
  328. }
  329. try {
  330. huaweiObsUtil.upload(file, "report");
  331. String uploadUrl1 = huaweiObsUtil.getUploadUrl(file.getName(), "report");
  332. file.delete();
  333. return Result.ok(uploadUrl1);
  334. } catch (IOException e) {
  335. throw new RuntimeException(e);
  336. }
  337. }
  338. @Override
  339. public Result<String> reportH5(Integer id) {
  340. //根据id查询报告是否存在
  341. Repair repair = this.getById(id);
  342. if (BeanUtil.isEmpty(repair)){
  343. throw new BadReqException("该诊断报告不存在");
  344. }
  345. Map<String,String> baseMap = new HashMap<>();
  346. baseMap.put("车架号",repair.getVin());
  347. baseMap.put("年款",repair.getMileage());
  348. baseMap.put("里程",repair.getMileage());
  349. baseMap.put("诊断路径",repair.getDiagnosticPath());
  350. baseMap.put("报告编号",repair.getRepairNum());
  351. baseMap.put("SN",repair.getSn());
  352. String username = repair.getUsername();
  353. //根据用户名查询用户
  354. User user = userService.lambdaQuery()
  355. .eq(User::getUsername, username)
  356. .one();
  357. if (BeanUtil.isEmpty(user)){
  358. throw new BadReqException("该用户不存在");
  359. }
  360. Map<String,String> companyMap = new HashMap<>();
  361. companyMap.put("公司",user.getCompany());
  362. companyMap.put("电话",user.getTel());
  363. companyMap.put("地址",user.getAddress());
  364. List<ControlListMap> controlListMap = new ArrayList<>();
  365. String electronicControlIds = repair.getElectronicControlIds();
  366. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  367. .map(Integer::parseInt)
  368. .collect(Collectors.toList());
  369. List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
  370. for (Integer eleId : eleIds) {
  371. ElectronicControl electronicControl = electronicControlService.getById(eleId);
  372. List<EcuInfo> EcuList = ecuInfoService.lambdaQuery()
  373. .eq(EcuInfo::getElectronicControlId, eleId)
  374. .list();
  375. List<FaultCode> FaultList = faultCodeService.lambdaQuery()
  376. .eq(FaultCode::getElectronicControlId, eleId)
  377. .eq(FaultCode::getStatus,1)
  378. .list();
  379. Map<String,String> faultCodeMap = new HashMap<>();
  380. Map<String,String> versionMap = new HashMap<>();
  381. for (EcuInfo ecuInfo : EcuList) {
  382. versionMap.put(ecuInfo.getStrCaption(),ecuInfo.getStrInformation());
  383. }
  384. for (FaultCode faultCode : FaultList) {
  385. faultCodeMap.put(faultCode.getFaultCode(),faultCode.getDescription());
  386. }
  387. ControlListMap controlListMap1 = new ControlListMap();
  388. controlListMap1.setName(electronicControl.getElectronicControlName());
  389. controlListMap1.setVersionMap(versionMap);
  390. controlListMap1.setFaultCodeMap(faultCodeMap);
  391. controlListMap.add(controlListMap1);
  392. }
  393. File file = HtmlGenerator.generateHtmlByMap(repair.getId(), controlListMap, baseMap, companyMap);
  394. if (file==null){
  395. throw new BizException("该h5文件不存在");
  396. }
  397. try {
  398. huaweiObsUtil.upload(file,"h5");
  399. String uploadUrl1 = huaweiObsUtil.getUploadUrl(file.getName(), "h5");
  400. file.delete();
  401. return Result.ok(uploadUrl1);
  402. } catch (IOException e) {
  403. throw new RuntimeException(e);
  404. }
  405. }
  406. }