RepairServiceImpl.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576
  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. @Resource
  56. private ITextPdfUtil pdfUtil;
  57. @Resource
  58. private HtmlGenerator htmlGenerator;
  59. @Override
  60. @Transactional
  61. public Result AppCreateReport(APPReportCreateDTO dto) {
  62. Integer userId = UserContext.getUserId();
  63. User user = userService.getById(userId);
  64. // 判断数据、
  65. if (BeanUtil.isEmpty(dto)) {
  66. throw new BadReqException("数据为空");
  67. }
  68. Repair repair = BeanUtil.copyProperties(dto, Repair.class);
  69. List<AppElectronicDTO> electronicControls = dto.getElectronicControls();
  70. List<Integer> eleIds = new ArrayList<>();
  71. List<ElectronicControl> electronicControlList = new ArrayList<>();
  72. for (AppElectronicDTO electronicControlDTO : electronicControls) {
  73. ElectronicControl electronicControl = BeanUtil.copyProperties(electronicControlDTO, ElectronicControl.class);
  74. electronicControlList.add(electronicControl);
  75. List<AppEcuInfoDTO> ecuInfors = electronicControlDTO.getEcuInfors();
  76. List<AppFaultCodeDTO> faultCodes = electronicControlDTO.getFaultCodes();
  77. List<EcuInfo> ecuInfos = BeanUtil.copyToList(ecuInfors, EcuInfo.class);
  78. List<FaultCode> faultCodes1 = BeanUtil.copyToList(faultCodes, FaultCode.class);
  79. for (EcuInfo ecuInfo : ecuInfos) {
  80. ecuInfo.setElectronicControlId(electronicControl.getId());
  81. }
  82. for (FaultCode faultCode : faultCodes1) {
  83. faultCode.setElectronicControlId(electronicControl.getId());
  84. }
  85. eleIds.add(electronicControl.getId());
  86. ecuInfoService.saveBatch(ecuInfos);
  87. faultCodeService.saveBatch(faultCodes1);
  88. }
  89. StringBuffer sb = new StringBuffer();
  90. for (int i = 0; i < eleIds.size(); i++) {
  91. sb.append(eleIds);
  92. if (i != eleIds.size() - 1) {
  93. sb.append(",");
  94. }
  95. }
  96. repair.setElectronicControlIds(sb.toString());
  97. electronicControlService.saveBatch(electronicControlList);
  98. repair.setUsername(user.getUsername());
  99. this.save(repair);
  100. return Result.ok();
  101. }
  102. @Override
  103. public Result<AppRepairQueryPageVO> AppGetPageList(APPRepairQueryPageDTO dto) {
  104. Integer userId = UserContext.getUserId();
  105. User user = userService.getById(userId);
  106. if (BeanUtil.isEmpty(user)) {
  107. throw new BizException("用户不存在");
  108. }
  109. //获取数据
  110. Integer pageIndex = dto.getPageIndex();
  111. Integer pageSize = dto.getPageSize();
  112. //分页查询
  113. Page<Repair> page = this.lambdaQuery()
  114. .orderByDesc(Repair::getCreateTime)
  115. .eq(Repair::getUsername, user.getUsername())
  116. .page(new Page<>(pageIndex, pageSize));
  117. if (BeanUtil.isEmpty(page)) {
  118. throw new BadReqException("请求失败");
  119. }
  120. AppRepairQueryPageVO vo = new AppRepairQueryPageVO();
  121. vo.setSize(pageSize);
  122. vo.setCurrent(pageIndex);
  123. vo.setPages((int) page.getPages());
  124. vo.setTotal((int) page.getTotal());
  125. List<Repair> records = page.getRecords();
  126. if (CollectionUtil.isEmpty(records)) {
  127. records = Collections.emptyList();
  128. }
  129. List<DiagnosticReportVO> list = new ArrayList<>();
  130. for (Repair record : records) {
  131. DiagnosticReportVO diagnosticReportVO = new DiagnosticReportVO();
  132. diagnosticReportVO.setCreationTime(LocalDateTime.now());
  133. diagnosticReportVO.setDiagnosticReportId(record.getId());
  134. diagnosticReportVO.setDiagnosticReportName(record.getMainTitle());
  135. diagnosticReportVO.setFileName(record.getFileName());
  136. String electronicControlIds = record.getElectronicControlIds();
  137. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  138. .map(Integer::parseInt)
  139. .collect(Collectors.toList());
  140. for (Integer eleId : eleIds) {
  141. List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
  142. .eq(FaultCode::getElectronicControlId, eleId)
  143. .list();
  144. diagnosticReportVO.setFaultCodesNumber(String.valueOf(faultCodeList.size()));
  145. }
  146. list.add(diagnosticReportVO);
  147. }
  148. vo.setRecords(list);
  149. return Result.ok(vo);
  150. }
  151. @Override
  152. @Transactional
  153. public Result create(RepairDTO repairDTO) {
  154. Repair repair = new Repair();
  155. BeanUtil.copyProperties(repairDTO,repair);
  156. return Result.ok();
  157. }
  158. @Override
  159. @Transactional
  160. public Result delete(Integer id) {
  161. Repair repair = this.getById(id);
  162. if (repair == null) {
  163. throw new BadReqException("删除错误");
  164. }
  165. String electronicControlIds = repair.getElectronicControlIds();
  166. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  167. .map(Integer::parseInt)
  168. .collect(Collectors.toList());
  169. for (Integer eleId : eleIds) {
  170. List<Integer> faultIds = faultCodeService.lambdaQuery()
  171. .eq(FaultCode::getElectronicControlId, eleId)
  172. .list().stream().map(c -> c.getId()).collect(Collectors.toList());
  173. List<Integer> ecuIds = ecuInfoService.lambdaQuery()
  174. .eq(EcuInfo::getElectronicControlId, eleId)
  175. .list().stream().map(c -> c.getId()).collect(Collectors.toList());
  176. faultCodeService.removeByIds(faultIds);
  177. ecuInfoService.removeByIds(ecuIds);
  178. }
  179. electronicControlService.removeByIds(eleIds);
  180. this.removeById(id);
  181. return Result.ok();
  182. }
  183. @Override
  184. public Result<RepairVO> getByIds(Integer id) {
  185. Repair repair = this.getById(id);
  186. if (repair == null) {
  187. throw new BadReqException("查询错误");
  188. }
  189. String electronicControlIds = repair.getElectronicControlIds();
  190. RepairVO vo = new RepairVO();
  191. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  192. .map(Integer::parseInt)
  193. .collect(Collectors.toList());
  194. BeanUtil.copyProperties(repair, vo);
  195. ReportTitleDto reportTitleDto = new ReportTitleDto();
  196. BeanUtil.copyProperties(repair,reportTitleDto);
  197. List<ElectronicControls> electronicControlsList = new ArrayList<>();
  198. int eleCount = 0;
  199. int faultCount = 0;
  200. for (Integer eleId : eleIds) {
  201. ElectronicControls electronicControls = new ElectronicControls();
  202. ElectronicControl electronicControl = electronicControlService.getById(eleId);
  203. BeanUtil.copyProperties(electronicControl,reportTitleDto);
  204. electronicControls.setElectronicControlName(electronicControl.getElectronicControlName());
  205. List<EcuInfo> list = ecuInfoService.lambdaQuery()
  206. .eq(EcuInfo::getElectronicControlId, eleId)
  207. .list();
  208. electronicControls.setEcuInfo(list);
  209. List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
  210. .eq(FaultCode::getElectronicControlId, eleId)
  211. .list();
  212. electronicControls.setFaultCode(faultCodeList);
  213. electronicControlsList.add(electronicControls);
  214. eleCount++;
  215. faultCount += faultCodeList.size();
  216. }
  217. vo.setElectronicControls(electronicControlsList);
  218. vo.setElectronicControlCount(eleCount);
  219. vo.setFaultCodeCount(faultCount);
  220. vo.setReportTitleDto(reportTitleDto);
  221. return Result.ok(vo);
  222. }
  223. @Override
  224. public Result<RepairQueryPageVO> getPageList(RepairQueryPageDTO dto) {
  225. //从dto中获取数据
  226. Integer pageIndex = dto.getPageIndex();
  227. Integer pageSize = dto.getPageSize();
  228. LocalDateTime beginTime = dto.getBeginTime();
  229. LocalDateTime endTime = dto.getEndTime();
  230. String searchNum = dto.getSearchNum();
  231. // String searchVIN = dto.getSearchVIN();
  232. String searchDistributor = dto.getSearchDistributor();
  233. //分页查询
  234. Page<Repair> page = this.lambdaQuery()
  235. .like(StringUtils.isNotBlank(searchNum), Repair::getRepairNum, searchNum)
  236. // .like(StringUtils.isNotBlank(searchVIN),Repair::)
  237. .like(StringUtils.isNotBlank(searchDistributor), Repair::getDepartmentName, searchDistributor)
  238. .ge(beginTime != null, Repair::getCreateTime, beginTime)
  239. .le(endTime != null, Repair::getCreateTime, endTime)
  240. .page(new Page<>(pageIndex, pageSize));
  241. RepairQueryPageVO vo = new RepairQueryPageVO();
  242. vo.setCurrent((int) page.getCurrent());
  243. vo.setSize((int) page.getSize());
  244. vo.setPages((int) page.getPages());
  245. vo.setTotal((int) page.getTotal());
  246. if (StringUtils.isNotBlank(searchNum) || StringUtils.isNotBlank(searchDistributor) || beginTime != null || endTime != null) {
  247. vo.setSearchCount(true);
  248. }
  249. List<Repair> records = page.getRecords();
  250. List<QueryRepairVO> queryRepairVOList = new ArrayList<>();
  251. for (Repair record : records) {
  252. QueryRepairVO queryRepairVO = BeanUtil.copyProperties(record, QueryRepairVO.class);
  253. String electronicControlIds = record.getElectronicControlIds();
  254. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  255. .map(Integer::parseInt)
  256. .collect(Collectors.toList());
  257. List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
  258. //查询系统数量
  259. queryRepairVO.setSystemCount(electronicControlList.size());
  260. int faultCount = 0;
  261. for (ElectronicControl electronicControl : electronicControlList) {
  262. List<FaultCode> faultCodeList = faultCodeService.lambdaQuery()
  263. .eq(electronicControl != null, FaultCode::getElectronicControlId, electronicControl.getId())
  264. .list();
  265. faultCount += faultCodeList.size();
  266. }
  267. //查询故障数量
  268. queryRepairVO.setFaultCount(faultCount);
  269. queryRepairVOList.add(queryRepairVO);
  270. }
  271. vo.setRecords(queryRepairVOList);
  272. return Result.ok(vo);
  273. }
  274. @Override
  275. public Result<String> reportPdf(Integer id) {
  276. //根据id查询报告是否存在
  277. Repair repair = this.getById(id);
  278. if (BeanUtil.isEmpty(repair)){
  279. throw new BadReqException("该诊断报告不存在");
  280. }
  281. Map<String,String> baseMap = new HashMap<>();
  282. baseMap.put("车架号",repair.getVin());
  283. baseMap.put("年款",repair.getModelYear());
  284. baseMap.put("里程",repair.getMileage());
  285. baseMap.put("诊断路径",repair.getDiagnosticPath());
  286. baseMap.put("报告编号",repair.getRepairNum());
  287. baseMap.put("SN",repair.getSn());
  288. String username = repair.getUsername();
  289. //根据用户名查询用户
  290. User user = userService.lambdaQuery()
  291. .eq(User::getUsername, username)
  292. .one();
  293. if (BeanUtil.isEmpty(user)){
  294. throw new BadReqException("该用户不存在");
  295. }
  296. Map<String,String> companyMap = new HashMap<>();
  297. companyMap.put("公司",user.getCompany());
  298. companyMap.put("电话",user.getTel());
  299. companyMap.put("地址",user.getAddress());
  300. List<ControlListMap> controlListMap = new ArrayList<>();
  301. String electronicControlIds = repair.getElectronicControlIds();
  302. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  303. .map(Integer::parseInt)
  304. .collect(Collectors.toList());
  305. List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
  306. for (Integer eleId : eleIds) {
  307. ElectronicControl electronicControl = electronicControlService.getById(eleId);
  308. List<EcuInfo> EcuList = ecuInfoService.lambdaQuery()
  309. .eq(EcuInfo::getElectronicControlId, eleId)
  310. .list();
  311. List<FaultCode> FaultList = faultCodeService.lambdaQuery()
  312. .eq(FaultCode::getElectronicControlId, eleId)
  313. .eq(FaultCode::getStatus,1)
  314. .list();
  315. Map<String,String> faultCodeMap = new HashMap<>();
  316. Map<String,String> versionMap = new HashMap<>();
  317. for (EcuInfo ecuInfo : EcuList) {
  318. versionMap.put(ecuInfo.getStrCaption(),ecuInfo.getStrInformation());
  319. }
  320. for (FaultCode faultCode : FaultList) {
  321. faultCodeMap.put(faultCode.getFaultCode(),faultCode.getDescription());
  322. }
  323. ControlListMap controlListMap1 = new ControlListMap();
  324. controlListMap1.setName(electronicControl.getElectronicControlName());
  325. controlListMap1.setVersionMap(versionMap);
  326. controlListMap1.setFaultCodeMap(faultCodeMap);
  327. controlListMap.add(controlListMap1);
  328. }
  329. File file = pdfUtil.MapToPDF(repair.getId(), controlListMap, baseMap, companyMap);
  330. if (file==null){
  331. throw new BizException("该pdf文件不存在");
  332. }
  333. try {
  334. huaweiObsUtil.upload(file, "report");
  335. String uploadUrl1 = huaweiObsUtil.getUploadUrl(file.getName(), "report");
  336. file.delete();
  337. return Result.ok(uploadUrl1);
  338. } catch (IOException e) {
  339. throw new RuntimeException(e);
  340. }
  341. }
  342. @Override
  343. public Result<String> reportH5(Integer id) {
  344. //根据id查询报告是否存在
  345. Repair repair = this.getById(id);
  346. if (BeanUtil.isEmpty(repair)){
  347. throw new BadReqException("该诊断报告不存在");
  348. }
  349. Map<String,String> baseMap = new HashMap<>();
  350. baseMap.put("车架号",repair.getVin());
  351. baseMap.put("年款",repair.getModelYear());
  352. baseMap.put("里程",repair.getMileage());
  353. baseMap.put("诊断路径",repair.getDiagnosticPath());
  354. baseMap.put("报告编号",repair.getRepairNum());
  355. baseMap.put("SN",repair.getSn());
  356. String username = repair.getUsername();
  357. //根据用户名查询用户
  358. User user = userService.lambdaQuery()
  359. .eq(User::getUsername, username)
  360. .one();
  361. if (BeanUtil.isEmpty(user)){
  362. throw new BadReqException("该用户不存在");
  363. }
  364. Map<String,String> companyMap = new HashMap<>();
  365. companyMap.put("公司",user.getCompany());
  366. companyMap.put("电话",user.getTel());
  367. companyMap.put("地址",user.getAddress());
  368. List<ControlListMap> controlListMap = new ArrayList<>();
  369. String electronicControlIds = repair.getElectronicControlIds();
  370. List<Integer> eleIds = Arrays.stream(electronicControlIds.split(","))
  371. .map(Integer::parseInt)
  372. .collect(Collectors.toList());
  373. List<ElectronicControl> electronicControlList = electronicControlService.listByIds(eleIds);
  374. for (Integer eleId : eleIds) {
  375. ElectronicControl electronicControl = electronicControlService.getById(eleId);
  376. List<EcuInfo> EcuList = ecuInfoService.lambdaQuery()
  377. .eq(EcuInfo::getElectronicControlId, eleId)
  378. .list();
  379. List<FaultCode> FaultList = faultCodeService.lambdaQuery()
  380. .eq(FaultCode::getElectronicControlId, eleId)
  381. .eq(FaultCode::getStatus,1)
  382. .list();
  383. Map<String,String> faultCodeMap = new HashMap<>();
  384. Map<String,String> versionMap = new HashMap<>();
  385. for (EcuInfo ecuInfo : EcuList) {
  386. versionMap.put(ecuInfo.getStrCaption(),ecuInfo.getStrInformation());
  387. }
  388. for (FaultCode faultCode : FaultList) {
  389. faultCodeMap.put(faultCode.getFaultCode(),faultCode.getDescription());
  390. }
  391. ControlListMap controlListMap1 = new ControlListMap();
  392. controlListMap1.setName(electronicControl.getElectronicControlName());
  393. controlListMap1.setVersionMap(versionMap);
  394. controlListMap1.setFaultCodeMap(faultCodeMap);
  395. controlListMap.add(controlListMap1);
  396. }
  397. File file = htmlGenerator.generateHtmlByMap(repair.getId(), controlListMap, baseMap, companyMap);
  398. if (file==null){
  399. throw new BizException("该h5文件不存在");
  400. }
  401. try {
  402. huaweiObsUtil.upload(file,"h5");
  403. String uploadUrl1 = huaweiObsUtil.getUploadUrl(file.getName(), "h5");
  404. file.delete();
  405. return Result.ok(uploadUrl1);
  406. } catch (IOException e) {
  407. throw new RuntimeException(e);
  408. }
  409. }
  410. @Override
  411. public Result updateBase(AppRepairUpdateBaseDTO dto) {
  412. Integer id = dto.getId();
  413. String type = dto.getType();
  414. String value = dto.getValue();
  415. //根据id进行查询
  416. Repair repair = this.getById(id);
  417. if (BeanUtil.isEmpty(repair)){
  418. throw new BadReqException("该诊断报告不存在");
  419. }
  420. if (type.equals("vin")){
  421. repair.setVin(value);
  422. }else if (type.equals("year")){
  423. repair.setModelYear(value);
  424. }
  425. else if (type.equals("mileage")){
  426. repair.setMileage(value);
  427. }
  428. this.updateById(repair);
  429. return Result.ok();
  430. }
  431. @Override
  432. public Result updateCompany(AppRepairUpdateBaseDTO dto) {
  433. Integer id = dto.getId();
  434. String type = dto.getType();
  435. String value = dto.getValue();
  436. //根据id进行查询
  437. Repair repair = this.getById(id);
  438. if (BeanUtil.isEmpty(repair)){
  439. throw new BadReqException("该诊断报告不存在");
  440. }
  441. String username = repair.getUsername();
  442. //根据username查询用户
  443. User user = userService.lambdaQuery()
  444. .eq(User::getUsername, username)
  445. .one();
  446. if (BeanUtil.isEmpty(user)){
  447. throw new BadReqException("该用户不存在");
  448. }
  449. if (type.equals("company")){
  450. user.setCompany(value);
  451. }else if (type.equals("address")){
  452. user.setAddress(value);
  453. }
  454. else if (type.equals("phone")){
  455. user.setTel(value);
  456. }
  457. userService.updateById(user);
  458. return Result.ok();
  459. }
  460. }