DiagnosticMenuServiceImpl.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package com.om.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.om.entity.dto.AppmenuUpdateDTO;
  6. import com.om.entity.dto.DiaMenuQueryPageDTO;
  7. import com.om.entity.dto.DiagnosticMenuDTO;
  8. import com.om.entity.dto.GuidDTO;
  9. import com.om.entity.po.Client;
  10. import com.om.entity.po.DiagnosticMenu;
  11. import com.om.entity.po.DiagnosticMenuVO;
  12. import com.om.entity.po.Distributor;
  13. import com.om.entity.vo.AppMenuVO;
  14. import com.om.entity.vo.DiaMenuQueryPageVO;
  15. import com.om.entity.vo.DiaMenuUploadVO;
  16. import com.om.entity.vo.DistributorQueryPageVO;
  17. import com.om.exception.BadReqException;
  18. import com.om.exception.BizException;
  19. import com.om.mapper.DiagnosticMenuMapper;
  20. import com.om.service.IClientService;
  21. import com.om.service.IDiagnosticMenuService;
  22. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  23. import com.om.utils.*;
  24. import org.springframework.context.annotation.Bean;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.web.multipart.MultipartFile;
  27. import javax.annotation.Resource;
  28. import java.io.IOException;
  29. import java.lang.reflect.Array;
  30. import java.time.LocalDate;
  31. import java.time.LocalDateTime;
  32. import java.time.ZoneOffset;
  33. import java.util.ArrayList;
  34. import java.util.Arrays;
  35. import java.util.List;
  36. import java.util.stream.Collectors;
  37. import static com.om.constant.UploadConstant.DIAGNOSTIC_MENU_PREFIX;
  38. /**
  39. * <p>
  40. * 服务实现类
  41. * </p>
  42. *
  43. * @author bmmx
  44. * @since 2024-03-05
  45. */
  46. @Service
  47. public class DiagnosticMenuServiceImpl extends ServiceImpl<DiagnosticMenuMapper, DiagnosticMenu> implements IDiagnosticMenuService {
  48. @Resource
  49. private HuaweiObsUtil obsUtil;
  50. @Resource
  51. private IClientService clientService;
  52. @Resource
  53. private JwtUtils jwtUtils;
  54. @Override
  55. public Result createDiaMenu(DiagnosticMenuDTO dto) {
  56. if (BeanUtil.isEmpty(dto)) {
  57. throw new BadReqException("数据为空");
  58. }
  59. List<Integer> clientIds = dto.getClientIds();
  60. //查询 客户端id
  61. List<Client> clients = clientService.listByIds(clientIds);
  62. if (clients.isEmpty()) {
  63. throw new BadReqException("客户端查询错误");
  64. }
  65. DiagnosticMenu diagnosticMenu = BeanUtil.copyProperties(dto, DiagnosticMenu.class);
  66. diagnosticMenu.setCreateTime(LocalDateTime.now());
  67. diagnosticMenu.setUpdateTime(LocalDateTime.now());
  68. diagnosticMenu.setClientIds(diagnosticMenu.getClientIds()
  69. .substring(1, diagnosticMenu.getClientIds().length() - 1)
  70. .replaceAll(" ", ""));
  71. this.save(diagnosticMenu);
  72. return Result.ok();
  73. }
  74. @Override
  75. public Result<DiaMenuUploadVO> uploadDiaMenu(MultipartFile file) {
  76. long fileSize = file.getSize();
  77. String size = FileSizeConverter.convertBytes(fileSize);
  78. String filename = file.getOriginalFilename();
  79. //上传文件
  80. LocalDate now = LocalDate.now();
  81. int year = now.getYear();
  82. int monthValue = now.getMonthValue();
  83. int day = now.getDayOfMonth();
  84. String prefix = DIAGNOSTIC_MENU_PREFIX + "/" + year + "/" + monthValue + "/" + day;
  85. try {
  86. String upload = obsUtil.upload(file, prefix);
  87. DiaMenuUploadVO vo = new DiaMenuUploadVO();
  88. vo.setFileName(filename);
  89. vo.setFileSize(size);
  90. vo.setSavePath(upload);
  91. return Result.ok(vo);
  92. } catch (IOException e) {
  93. throw new RuntimeException(e);
  94. }
  95. }
  96. @Override
  97. public Result deleteDiaMenu(Integer id) {
  98. //根据id查询
  99. DiagnosticMenu diagnosticMenu = this.getById(id);
  100. if (BeanUtil.isEmpty(diagnosticMenu)) {
  101. throw new BadReqException("该诊断菜单不存在");
  102. }
  103. //根据id删除
  104. this.removeById(id);
  105. return Result.ok();
  106. }
  107. @Override
  108. public Result updateStatus(Integer id, Integer status) {
  109. //根据id查询
  110. DiagnosticMenu diagnosticMenu = this.getById(id);
  111. if (BeanUtil.isEmpty(diagnosticMenu)) {
  112. throw new BadReqException("该诊断菜单不存在");
  113. }
  114. diagnosticMenu.setEnableStatus(status);
  115. diagnosticMenu.setUpdateTime(LocalDateTime.now());
  116. //修改
  117. this.updateById(diagnosticMenu);
  118. return Result.ok();
  119. }
  120. @Override
  121. public Result<DiaMenuQueryPageVO> getPageList(DiaMenuQueryPageDTO dto) {
  122. //从dto中获取数据
  123. Integer pageSize = dto.getPageSize();
  124. Integer pageIndex = dto.getPageIndex();
  125. String fileName = dto.getFileName();
  126. String versionNum = dto.getVersionNum();
  127. //分页查询数据库
  128. Page<DiagnosticMenu> page = this.lambdaQuery()
  129. .like(fileName != null, DiagnosticMenu::getFileName, fileName)
  130. .like(versionNum != null, DiagnosticMenu::getVersionNum, versionNum)
  131. .orderByDesc(DiagnosticMenu::getCreateTime)
  132. .page(new Page<>(pageIndex, pageSize));
  133. //封装vo
  134. DiaMenuQueryPageVO vo = new DiaMenuQueryPageVO();
  135. vo.setCurrent((int) page.getCurrent());
  136. vo.setSize((int) page.getSize());
  137. vo.setPages((int) page.getPages());
  138. vo.setTotal((int) page.getTotal());
  139. if (fileName != null || versionNum != null) {
  140. vo.setSearchCount(true);
  141. }
  142. List<DiagnosticMenu> records = page.getRecords();
  143. List<DiagnosticMenuVO> voList = new ArrayList<>();
  144. for (DiagnosticMenu diagnosticMenu : records) {
  145. DiagnosticMenuVO diagnosticMenuVO = BeanUtil.copyProperties(diagnosticMenu, DiagnosticMenuVO.class);
  146. List<Integer> clientIds = new ArrayList<>();
  147. try {
  148. clientIds = Arrays.stream(diagnosticMenu.getClientIds()
  149. .trim()
  150. .split(","))
  151. .map(Integer::parseInt)
  152. .collect(Collectors.toList());
  153. } catch (Exception e) {
  154. throw new BizException("字符串转换数组错误,请检查字符串是否正确");
  155. }
  156. //根据id集合批量查询 客户端
  157. List<Client> clients = clientService.listByIds(clientIds);
  158. List<String> clientNames = clients.stream().map(c -> c.getName()).collect(Collectors.toList());
  159. List<String> clientNums = clients.stream().map(c -> c.getNumber()).collect(Collectors.toList());
  160. if (clients != null) {
  161. diagnosticMenuVO.setClientNames(clientNames);
  162. diagnosticMenuVO.setClientNums(clientNums);
  163. }
  164. voList.add(diagnosticMenuVO);
  165. }
  166. vo.setRecords(voList);
  167. return Result.ok(vo);
  168. }
  169. @Override
  170. public Result menuUpdate(AppmenuUpdateDTO dto) {
  171. if (BeanUtil.isEmpty(dto)) {
  172. return Result.fail("未获取到数据").result(ResultCode.NO_DATA);
  173. }
  174. String version = dto.getVersion();
  175. String guid = dto.getGuid();
  176. GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
  177. String clientNum = guidDTO.getClientNum();
  178. //根据客户端编号查询id
  179. Client client = clientService.lambdaQuery()
  180. .eq(Client::getNumber, clientNum)
  181. .one();
  182. if (BeanUtil.isEmpty(client)) {
  183. return Result.fail(52306,"该客户端不存在!!",null);
  184. }
  185. QueryWrapper<DiagnosticMenu> wrapper = new QueryWrapper<>();
  186. wrapper.apply("CONCAT(',', client_ids, ',') LIKE {0}", "%," + client.getId() + ",%");
  187. DiagnosticMenu diagnosticMenu = this.getOne(wrapper);
  188. if (BeanUtil.isEmpty(diagnosticMenu)) {
  189. return Result.fail("该菜单不存在").result(24001);
  190. }
  191. if (Integer.parseInt(diagnosticMenu.getVersionNum()) <= Integer.parseInt(version)) {
  192. return Result.ok().message("无菜单更新");
  193. }
  194. AppMenuVO vo = new AppMenuVO();
  195. LocalDate now = LocalDate.now();
  196. String prefix = DIAGNOSTIC_MENU_PREFIX;
  197. String uploadUrl = obsUtil.getUploadUrl(diagnosticMenu.getFileName(), prefix);
  198. vo.setUrl(uploadUrl);
  199. vo.setVersion(diagnosticMenu.getVersionNum());
  200. vo.setCreateTime(diagnosticMenu.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
  201. vo.setFileSize((long) (Double.valueOf(diagnosticMenu.getFileSize()) * 1024 * 1024));
  202. vo.setFileName(diagnosticMenu.getFileName());
  203. return Result.ok(vo);
  204. }
  205. }