package com.om.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.om.entity.dto.AppDiagLogDTO; import com.om.entity.dto.DiaLogQueryPageDTO; import com.om.entity.dto.DiagnoseLogVehicleInfo; import com.om.entity.dto.GuidDTO; import com.om.entity.po.*; import com.om.entity.vo.DiaLogQueryPageVO; import com.om.entity.vo.DiaLogQueryVO; import com.om.exception.BadReqException; import com.om.mapper.DiagnosticLogMapper; import com.om.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.om.utils.AesUtil; import com.om.utils.HuaweiObsUtil; import com.om.utils.Result; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import static com.om.constant.UploadConstant.DIAGNOSTIC_LOG_PREFIX; /** *

* 服务实现类 *

* * @author bmmx * @since 2024-02-27 */ @Service public class DiagnosticLogServiceImpl extends ServiceImpl implements IDiagnosticLogService { @Resource private IUserService userService; @Resource private IBrandService brandService; @Resource private IClientService clientService; @Resource private HuaweiObsUtil obsUtil; @Resource private IVciInfoService vciInfoService; @Override public Result getPageList(DiaLogQueryPageDTO dto) { //从dto中获取数据 Integer pageIndex = dto.getPageIndex(); Integer pageSize = dto.getPageSize(); LocalDateTime beginTime = dto.getBeginTime(); LocalDateTime endTime = dto.getEndTime(); String vciSn = dto.getVciSn(); String account = dto.getAccount(); Page page = this.lambdaQuery() .like(StringUtils.isNotBlank(account), DiagnosticLog::getUsername, account) .like(StringUtils.isNotBlank(vciSn), DiagnosticLog::getVciSn, vciSn) .ge(beginTime != null, DiagnosticLog::getCreateTime, beginTime) .le(endTime != null, DiagnosticLog::getCreateTime, endTime) .orderByDesc(DiagnosticLog::getCreateTime) .page(new Page<>(pageIndex, pageSize)); DiaLogQueryPageVO vo = new DiaLogQueryPageVO(); vo.setCurrent((int) page.getCurrent()); vo.setSize((int) page.getSize()); vo.setPages((int) page.getPages()); vo.setTotal((int) page.getTotal()); if (dto.getAccount() != null || dto.getVciSn() != null || beginTime != null || endTime != null) { vo.setSearchCount(true); } List records = page.getRecords(); List diaLogQueryVOS = new ArrayList<>(); for (DiagnosticLog record : records) { DiaLogQueryVO diaLogQueryVO = BeanUtil.copyProperties(record, DiaLogQueryVO.class); diaLogQueryVO.setAccount(record.getUsername()); diaLogQueryVO.setBrand(record.getBrandName()); Client client = clientService .lambdaQuery() .eq(Client::getNumber,record.getClientNum()) .one(); if (client != null) { diaLogQueryVO.setClientNum(client.getNumber()); diaLogQueryVO.setClientName(client.getName()); } diaLogQueryVO.setVciSn(record.getVciSn()); //todo 车型id vehicleId 查询车型 diaLogQueryVOS.add(diaLogQueryVO); } vo.setRecords(diaLogQueryVOS); return Result.ok(vo); } @Override public Result batchDownload(List ids) { //根据id集合查询 List diagnosticLogs = this.listByIds(ids); if (CollectionUtil.isEmpty(diagnosticLogs)) { throw new BadReqException("本页诊断文件异常"); } List downloadUrls = new ArrayList<>(); String prefix = DIAGNOSTIC_LOG_PREFIX; for (DiagnosticLog diagnosticLog : diagnosticLogs) { String nameLog = diagnosticLog.getNameLog(); int lastIndexOf = nameLog.lastIndexOf("/"); if (lastIndexOf != -1) { nameLog = nameLog.substring(lastIndexOf + 1); } //获取下载链接 String downloadUrl = obsUtil.getUploadUrl(nameLog, prefix); downloadUrls.add(downloadUrl); } return Result.ok(downloadUrls); } @Override public Result downloadFile(Integer id) { //根据id进行查询 DiagnosticLog diagnosticLog = this.getById(id); if (BeanUtil.isEmpty(diagnosticLog)) { throw new BadReqException("该诊断日志不存在"); } //获取文件名称 String nameLog = diagnosticLog.getNameLog(); int lastIndexOf = nameLog.lastIndexOf("/"); if (lastIndexOf != -1) { nameLog = nameLog.substring(lastIndexOf + 1); } String prefix = DIAGNOSTIC_LOG_PREFIX; //获取下载链接 String downloadUrl = obsUtil.getUploadUrl(nameLog, prefix); return Result.ok(downloadUrl); } @Override @Transactional public Result updateDiagLog(AppDiagLogDTO dto) { if (BeanUtil.isEmpty(dto)) { throw new BadReqException("参数为空!!"); } String username = dto.getUsername(); String guid = dto.getGuid(); GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid); String clientNum = guidDTO.getClientNum(); List vehicleInfo = dto.getVehicleInfo(); for (DiagnoseLogVehicleInfo diagnoseLogVehicleInfo : vehicleInfo) { DiagnosticLog diagnosticLog = BeanUtil.copyProperties(diagnoseLogVehicleInfo, DiagnosticLog.class); /* VciInfo vciInfo = vciInfoService.lambdaQuery() .eq(VciInfo::getVciNum, diagnoseLogVehicleInfo.getVciSn()) .one(); if (BeanUtil.isEmpty(vciInfo)){ throw new BadReqException("该vci设备不存在!!!"); } */ diagnosticLog.setVciSn(diagnoseLogVehicleInfo.getVciSn()); diagnosticLog.setClientNum(clientNum); diagnosticLog.setBrandName(diagnoseLogVehicleInfo.getBrand()); diagnosticLog.setCreateTime(LocalDateTime.now()); diagnosticLog.setUpdateTime(LocalDateTime.now()); diagnosticLog.setUsername(username); this.save(diagnosticLog); } return Result.ok(); } @Override public Result delete(Integer id) { DiagnosticLog diagnosticLog = this.getById(id); if (BeanUtil.isEmpty(diagnosticLog)) { throw new BadReqException("该诊断日志不存在"); } return Result.ok(this.removeById(diagnosticLog.getId())); } }