package com.om.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.om.entity.dto.AppmenuUpdateDTO; import com.om.entity.dto.DiaMenuQueryPageDTO; import com.om.entity.dto.DiagnosticMenuDTO; import com.om.entity.dto.GuidDTO; import com.om.entity.po.Client; import com.om.entity.po.DiagnosticMenu; import com.om.entity.po.DiagnosticMenuVO; import com.om.entity.po.Distributor; import com.om.entity.vo.AppMenuVO; import com.om.entity.vo.DiaMenuQueryPageVO; import com.om.entity.vo.DiaMenuUploadVO; import com.om.entity.vo.DistributorQueryPageVO; import com.om.exception.BadReqException; import com.om.exception.BizException; import com.om.mapper.DiagnosticMenuMapper; import com.om.service.IClientService; import com.om.service.IDiagnosticMenuService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.om.utils.*; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.lang.reflect.Array; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import static com.om.constant.UploadConstant.DIAGNOSTIC_MENU_PREFIX; /** *

* 服务实现类 *

* * @author bmmx * @since 2024-03-05 */ @Service public class DiagnosticMenuServiceImpl extends ServiceImpl implements IDiagnosticMenuService { @Resource private HuaweiObsUtil obsUtil; @Resource private IClientService clientService; @Resource private JwtUtils jwtUtils; @Override public Result createDiaMenu(DiagnosticMenuDTO dto) { if (BeanUtil.isEmpty(dto)) { throw new BadReqException("数据为空"); } List clientIds = dto.getClientIds(); //查询 客户端id List clients = clientService.listByIds(clientIds); if (clients.isEmpty()) { throw new BadReqException("客户端查询错误"); } DiagnosticMenu diagnosticMenu = BeanUtil.copyProperties(dto, DiagnosticMenu.class); diagnosticMenu.setCreateTime(LocalDateTime.now()); diagnosticMenu.setUpdateTime(LocalDateTime.now()); diagnosticMenu.setClientIds(diagnosticMenu.getClientIds() .substring(1, diagnosticMenu.getClientIds().length() - 1) .replaceAll(" ", "")); this.save(diagnosticMenu); return Result.ok(); } @Override public Result uploadDiaMenu(MultipartFile file) { long fileSize = file.getSize(); String size = FileSizeConverter.convertBytes(fileSize); String filename = file.getOriginalFilename(); //上传文件 LocalDate now = LocalDate.now(); int year = now.getYear(); int monthValue = now.getMonthValue(); int day = now.getDayOfMonth(); String prefix = DIAGNOSTIC_MENU_PREFIX + "/" + year + "/" + monthValue + "/" + day; try { String upload = obsUtil.upload(file, prefix); DiaMenuUploadVO vo = new DiaMenuUploadVO(); vo.setFileName(filename); vo.setFileSize(size); vo.setSavePath(upload); return Result.ok(vo); } catch (IOException e) { throw new RuntimeException(e); } } @Override public Result deleteDiaMenu(Integer id) { //根据id查询 DiagnosticMenu diagnosticMenu = this.getById(id); if (BeanUtil.isEmpty(diagnosticMenu)) { throw new BadReqException("该诊断菜单不存在"); } //根据id删除 this.removeById(id); return Result.ok(); } @Override public Result updateStatus(Integer id, Integer status) { //根据id查询 DiagnosticMenu diagnosticMenu = this.getById(id); if (BeanUtil.isEmpty(diagnosticMenu)) { throw new BadReqException("该诊断菜单不存在"); } diagnosticMenu.setEnableStatus(status); diagnosticMenu.setUpdateTime(LocalDateTime.now()); //修改 this.updateById(diagnosticMenu); return Result.ok(); } @Override public Result getPageList(DiaMenuQueryPageDTO dto) { //从dto中获取数据 Integer pageSize = dto.getPageSize(); Integer pageIndex = dto.getPageIndex(); String fileName = dto.getFileName(); String versionNum = dto.getVersionNum(); //分页查询数据库 Page page = this.lambdaQuery() .like(fileName != null, DiagnosticMenu::getFileName, fileName) .like(versionNum != null, DiagnosticMenu::getVersionNum, versionNum) .orderByDesc(DiagnosticMenu::getCreateTime) .page(new Page<>(pageIndex, pageSize)); //封装vo DiaMenuQueryPageVO vo = new DiaMenuQueryPageVO(); vo.setCurrent((int) page.getCurrent()); vo.setSize((int) page.getSize()); vo.setPages((int) page.getPages()); vo.setTotal((int) page.getTotal()); if (fileName != null || versionNum != null) { vo.setSearchCount(true); } List records = page.getRecords(); List voList = new ArrayList<>(); for (DiagnosticMenu diagnosticMenu : records) { DiagnosticMenuVO diagnosticMenuVO = BeanUtil.copyProperties(diagnosticMenu, DiagnosticMenuVO.class); List clientIds = new ArrayList<>(); try { clientIds = Arrays.stream(diagnosticMenu.getClientIds() .trim() .split(",")) .map(Integer::parseInt) .collect(Collectors.toList()); } catch (Exception e) { throw new BizException("字符串转换数组错误,请检查字符串是否正确"); } //根据id集合批量查询 客户端 List clients = clientService.listByIds(clientIds); List clientNames = clients.stream().map(c -> c.getName()).collect(Collectors.toList()); List clientNums = clients.stream().map(c -> c.getNumber()).collect(Collectors.toList()); if (clients != null) { diagnosticMenuVO.setClientNames(clientNames); diagnosticMenuVO.setClientNums(clientNums); } voList.add(diagnosticMenuVO); } vo.setRecords(voList); return Result.ok(vo); } @Override public Result menuUpdate(AppmenuUpdateDTO dto) { if (BeanUtil.isEmpty(dto)) { return Result.fail("未获取到数据").result(ResultCode.NO_DATA); } String version = dto.getVersion(); String guid = dto.getGuid(); GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid); String clientNum = guidDTO.getClientNum(); //根据客户端编号查询id Client client = clientService.lambdaQuery() .eq(Client::getNumber, clientNum) .one(); if (BeanUtil.isEmpty(client)) { throw new BadReqException("该客户端不存在"); } QueryWrapper wrapper = new QueryWrapper<>(); wrapper.apply("CONCAT(',', client_ids, ',') LIKE {0}", "%," + client.getId() + ",%"); DiagnosticMenu diagnosticMenu = this.getOne(wrapper); if (BeanUtil.isEmpty(diagnosticMenu)) { return Result.fail("该菜单不存在").result(24001); } AppMenuVO vo = new AppMenuVO(); BeanUtil.copyProperties(diagnosticMenu, vo); LocalDate now = LocalDate.now(); int year = now.getYear(); int monthValue = now.getMonthValue(); int day = now.getDayOfMonth(); String prefix = DIAGNOSTIC_MENU_PREFIX + "/" + year + "/" + monthValue + "/" + day; String uploadUrl = obsUtil.getUploadUrl(diagnosticMenu.getFileName(), prefix); vo.setUrl(uploadUrl); vo.setVersion(diagnosticMenu.getVersionNum()); vo.setCreateTime(diagnosticMenu.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli()); return Result.ok(vo); } }