package com.om.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.PageUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.om.entity.dto.*;
import com.om.entity.po.*;
import com.om.entity.vo.DiagnosisVersionVO;
import com.om.entity.vo.DignosisPageVO;
import com.om.exception.BadReqException;
import com.om.mapper.DiagnosisVersionInfoMapper;
import com.om.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.om.utils.*;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author bmmx
* @since 2024-03-06
*/
@Service
@Slf4j
public class DiagnosisVersionInfoServiceImpl extends ServiceImpl implements IDiagnosisVersionInfoService {
@Resource
IDiagnosisVersionDescribeService describeService;
@Resource
IBrandService brandService;
@Resource
IClientService clientService;
@Resource
IUserService userService;
@Resource
IDiagClientsService diagClientsService;
@Resource
private JwtUtils jwtUtils;
@Override
public Result add(DiagnosisVersionVO diagnosisVersionVO) {
DiagnosisVersionInfo info = new DiagnosisVersionInfo();
//客户端编号,需要取id,后面在进行设置
//文件地址
info.setFile(diagnosisVersionVO.getFileUrl());
//文件大小
info.setDiagnosisFileSize(diagnosisVersionVO.getDiagnosisFileSize());
//品牌代码
info.setBrandCode(diagnosisVersionVO.getBrandCode());
//诊断程序名称
info.setDiagnosisName(diagnosisVersionVO.getDiagnosisName());
//程序状态
info.setStatus(0);
//设置用户名
info.setUsername(diagnosisVersionVO.getUsername());
//版本号
info.setVersion(diagnosisVersionVO.getVersion());
//保存地址
info.setSavePath(diagnosisVersionVO.getSavePath());
//保存
this.save(info);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DiagnosisVersionInfo::getId, diagnosisVersionVO.getId());
//保存后获取
DiagnosisVersionInfo versionInfo = getOne(queryWrapper);
log.info("==========={}=========", versionInfo);
for (int i = 0; i < diagnosisVersionVO.getDescriptionList().length; i++) {
DiagnosisVersionDescribe describe = new DiagnosisVersionDescribe();
describe.setDiagnosisId(versionInfo.getId());
describe.setDescription(diagnosisVersionVO.getDescriptionList()[i]);
describe.setLanguage(diagnosisVersionVO.getLanguage()[i]);
describeService.save(describe);
}
for (int i = 0; i < diagnosisVersionVO.getClientNums().length; i++) {
DiagClients diagClients = new DiagClients();
diagClients.setDiagId(versionInfo.getId());
diagClients.setClientNum(diagnosisVersionVO.getClientNums()[i]);
diagClientsService.save(diagClients);
}
return Result.ok();
}
@Override
public Result downloadFile(Integer id) {
return null;
}
@Override
public Result edit(DiagnosisVersionVO diagnosisVersionVO) {
Integer diaId = diagnosisVersionVO.getId();
DiagnosisVersionVO versionVO = getVO(diaId);
BeanUtil.copyProperties(diagnosisVersionVO, versionVO);
DiagnosisVersionInfo info = new DiagnosisVersionInfo();
DiagnosisVersionInfo info2 = this.getById(diaId);//查询到copy过去
BeanUtil.copyProperties(info2, info);
BeanUtil.copyProperties(diagnosisVersionVO, info);
log.info("----修改用户信息{}-----", info);
LambdaQueryWrapper queryWrappeInfo = new LambdaQueryWrapper<>();
queryWrappeInfo.eq(DiagnosisVersionInfo::getId, diaId);
this.update(info, queryWrappeInfo);
//客户端编号也要更改
String[] clientNums = diagnosisVersionVO.getClientNums();
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DiagClients::getDiagId, diaId);
//先删除
diagClientsService.remove(queryWrapper);
//在增加
for (int i = 0; i < clientNums.length; i++) {
DiagClients diagClients = new DiagClients();
diagClients.setClientNum(clientNums[i]);
diagClients.setDiagId(diaId);
log.info("----修改客户端名称{}-----", diagClients);
diagClientsService.save(diagClients);
}
log.info("----修改完成-----");
return Result.ok();
}
@Override
public DiagnosisVersionVO getVO(Integer id) {
log.info("-------查询信息------");
DiagnosisVersionInfo versionInfo = this.getById(id);
DiagnosisVersionVO versionVO = new DiagnosisVersionVO();
BeanUtil.copyProperties(versionInfo, versionVO);
LambdaQueryWrapper clientQueryWrapper = new LambdaQueryWrapper<>();
clientQueryWrapper.eq(DiagClients::getDiagId, id);
List diagClients = diagClientsService.list(clientQueryWrapper);
String[] s = new String[diagClients.size()];
for (int i = 0; i < diagClients.size(); i++) {
s[i] = diagClients.get(i).getClientNum();
}
versionVO.setClientNums(s);
//语言和描述
LambdaQueryWrapper describeLambdaQueryWrapper = new LambdaQueryWrapper<>();
describeLambdaQueryWrapper.eq(DiagnosisVersionDescribe::getDiagnosisId, id);
List describes = describeService.list(describeLambdaQueryWrapper);
String[] l = new String[describes.size()];
String[] d = new String[describes.size()];
for (int i = 0; i < describes.size(); i++) {
l[i] = describes.get(i).getLanguage();
d[i] = describes.get(i).getDescription();
}
versionVO.setDescriptionList(d);
versionVO.setLanguage(l);
log.info("=====getByUserId={}======", versionVO);
return versionVO;
}
@Override
public Result getByUserId(Integer id) {
DiagnosisVersionVO versionVO = this.getVO(id);
return Result.ok(versionVO);
}
@Override
public Result getPageList(Integer pageIndex,
Integer pageSize,
String username) {
Page page = this.lambdaQuery()
.like(StringUtils.isNotBlank(username), DiagnosisVersionInfo::getUsername, username)
.orderByDesc(DiagnosisVersionInfo::getUpdateTime)
.page(new Page<>(pageIndex, pageSize));
//获取总的数据
List diagLists = page.getRecords();
List diagVOLists = new ArrayList<>();
for (int i = 0; i < diagLists.size(); i++) {
//然后取得客户端编号
DiagnosisVersionInfo info = diagLists.get(i);
//创建前端传输数据
DiagnosisVersionVO versionVO = new DiagnosisVersionVO();
BeanUtil.copyProperties(info, versionVO);
Integer diagId = info.getId();
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DiagClients::getDiagId, diagId);
List diagClients = diagClientsService.list(queryWrapper);
log.info("====diagClients={}", diagClients);
String[] s = new String[diagClients.size()];
for (int j = 0; j < diagClients.size(); j++) {
s[j] = diagClients.get(j).getClientNum();
}
//传入客户端num
versionVO.setClientNums(s);
//传输描述和语言集合
LambdaQueryWrapper describeQueryWrapper = new LambdaQueryWrapper<>();
describeQueryWrapper.eq(DiagnosisVersionDescribe::getDiagnosisId, diagId);
List describeList = describeService.list(describeQueryWrapper);
log.info("List describeList ={}", describeList);
String[] language = new String[describeList.size()];
String[] description = new String[describeList.size()];
for (int i1 = 0; i1 < describeList.size(); i1++) {
DiagnosisVersionDescribe describe = describeList.get(i1);
language[i1] = describe.getLanguage();
description[i1] = describe.getDescription();
}
//传入客户端
versionVO.setLanguage(language);
versionVO.setDescriptionList(description);
diagVOLists.add(versionVO);
}
Page pageVO = new Page<>();
BeanUtil.copyProperties(page, pageVO);
pageVO.setRecords(diagVOLists);
log.info("====={}=======", pageVO.getRecords());
return Result.ok(pageVO);
}
@Override
public Result release(Integer id) {
DiagnosisVersionInfo info = this.getById(id);
info.setStatus(1);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DiagnosisVersionInfo::getId, id);
this.update(info, queryWrapper);
return Result.ok();
}
@Override
public Result repeal(Integer id) {
DiagnosisVersionInfo info = this.getById(id);
info.setStatus(2);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DiagnosisVersionInfo::getId, id);
this.update(info, queryWrapper);
return Result.ok();
}
/*
修改状态
*/
@Override
public Result upStatus(Integer id) {
DiagnosisVersionInfo info = this.getById(id);
info.setStatus(2);
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DiagnosisVersionInfo::getId, id);
this.update(info, queryWrapper);
return Result.ok();
}
@Override
public Result diagnosisVersionInfoUpdate(AppDiagVersionUpdateDTO dto) {
if (BeanUtil.isEmpty(dto)) {
return Result.fail("未获取到数据").result(ResultCode.NO_DATA);
}
List brandInfo = dto.getBrandInfo();
String guid = dto.getGuid();
GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
String clientNum = guidDTO.getClientNum();
if (brandInfo.isEmpty()) {
throw new BadReqException("该诊断程序不存在");
}
List voList = new ArrayList<>();
for (AppBrandInfo vehicleDates : brandInfo) {
String version = vehicleDates.getVersion();
DiagnosisVersionInfo diagnosisVersionInfo = this.lambdaQuery()
.eq(DiagnosisVersionInfo::getBrandCode, vehicleDates.getBrandCode())
.apply("CONCAT(',', client_number, ',') LIKE {0}", "%,"+clientNum+",%")
.gt(DiagnosisVersionInfo::getVersion, version)
.one();
if (BeanUtil.isEmpty(diagnosisVersionInfo)) {
return Result.fail("未获取到数据").result(ResultCode.NO_DATA);
}
//根据品牌id查询品牌
Brand brand = brandService.getById(diagnosisVersionInfo.getBrandId());
if (BeanUtil.isEmpty(brand)) {
throw new BadReqException("品牌不存在");
}
VehicleDates vehicleDates1 = BeanUtil.copyProperties(diagnosisVersionInfo, VehicleDates.class);
vehicleDates1.setUrl(diagnosisVersionInfo.getSavePath());
vehicleDates1.setVersion(diagnosisVersionInfo.getVersion());
vehicleDates1.setFileSize(diagnosisVersionInfo.getDiagnosisFileSize());
vehicleDates1.setBrandCn(brand.getBrandCn());
vehicleDates1.setBrandEn(brand.getBrandEn());
voList.add(vehicleDates1);
}
return Result.ok(voList);
}
@Override
public Result getDesc(DiagnosisVersionVO diagnosisVersionVO) {
return null;
}
}