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.AppBaseDTO;
import com.om.entity.dto.GuidDTO;
import com.om.entity.dto.VciQueryPageDTO;
import com.om.entity.po.*;
import com.om.entity.vo.*;
import com.om.exception.BadReqException;
import com.om.mapper.UserMapper;
import com.om.mapper.VciInfoMapper;
import com.om.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.om.utils.*;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author bmmx
* @since 2024-02-27
*/
@Service
public class VciInfoServiceImpl extends ServiceImpl implements IVciInfoService {
@Resource
private UserMapper userMapper;
@Resource
private IUserVciService userVciService;
@Resource
private JwtUtils jwtUtils;
@Resource
private ISdkClientsService sdkClientsService;
@Resource
private ISdkVersionInfoService sdkVersionInfoService;
@Resource
private ISdkVersionDescribeService sdkVersionDescribeService;
@Resource
private IPcbVersionInfoService pcbVersionInfoService;
@Resource
private IAppService appService;
@Resource
private IAppVersionDescribeService appVersionDescribeService;
@Resource
private IAppsClientsService appsClientsService;
@Resource
private HuaweiObsUtil obsUtil;
@Override
public Result addVci(VciInfo vciInfo) {
if (BeanUtil.isEmpty(vciInfo)){
throw new BadReqException("参数为空");
}
vciInfo.setCreateTime(LocalDateTime.now());
vciInfo.setUpdateTime(LocalDateTime.now());
this.save(vciInfo);
return Result.ok();
}
@Override
public Result addList(List vciInfos) {
if (BeanUtil.isEmpty(vciInfos)){
throw new BadReqException("参数为空");
}
for (VciInfo vciInfo : vciInfos) {
vciInfo.setCreateTime(LocalDateTime.now());
vciInfo.setUpdateTime(LocalDateTime.now());
}
this.saveBatch(vciInfos);
return Result.ok();
}
@Override
public Result deleteByNum(String vciNum) {
//根据vciNum查询
VciInfo one = this.lambdaQuery()
.eq(VciInfo::getVciNum, vciNum)
.one();
if (BeanUtil.isEmpty(one)){
throw new BadReqException("vci设备不存在");
}
//删除
this.removeById(one);
return Result.ok();
}
@Override
public Result updateState(Integer id, Integer state) {
//根据id查询
VciInfo vciInfo = this.getById(id);
if (BeanUtil.isEmpty(vciInfo)){
throw new BadReqException("vci设备不存在");
}
vciInfo.setState(state);
this.updateById(vciInfo);
return Result.ok();
}
@Override
public Result getList() {
List list = this.list();
return Result.ok(list);
}
@Override
public Result> getUserList(Integer vciId) {
VciInfo vciInfo = this.getById(vciId);
if (BeanUtil.isEmpty(vciInfo)){
throw new BadReqException("该vci不存在");
}
List list = userVciService.lambdaQuery()
.eq(UserVci::getVciInfoId, vciId)
.list();
if (CollectionUtil.isEmpty(list)){
return Result.ok(Collections.emptyList());
}
List vos= new ArrayList<>();
for (UserVci userVci : list) {
Integer userId = userVci.getUserId();
User user = userMapper.selectById(userId);
UserVciVO userVciVO = BeanUtil.copyProperties(userVci, UserVciVO.class);
userVciVO.setUsername(user.getUsername());
vos.add(userVciVO);
}
return Result.ok(vos);
}
@Override
public Result getPageList(VciQueryPageDTO dto) {
Integer pageIndex = dto.getPageIndex();
Integer pageSize = dto.getPageSize();
String vciNum = dto.getVciNum();
Page page = this.lambdaQuery()
.like(vciNum != null, VciInfo::getVciNum, vciNum)
.orderByDesc(VciInfo::getCreateTime)
.page(new Page<>(pageIndex, pageSize));
VciQueryPageVO vo = new VciQueryPageVO();
vo.setCurrent((int) page.getCurrent());
vo.setSize((int) page.getSize());
vo.setPages((int) page.getPages());
vo.setTotal((int) page.getTotal());
if (vciNum != null){
vo.setSearchCount(true);
}
List records = page.getRecords();
vo.setRecords(records);
return Result.ok(vo);
}
@Override
public Result VciUpdate(AppBaseDTO dto) {
if (BeanUtil.isEmpty(dto)){
return Result.fail("未获取到数据").result(ResultCode.NO_DATA);
}
String guid = dto.getGuid();
GuidDTO guidDTO = AesUtil.getGuidDTOFromGuid(guid);
String clientNum = guidDTO.getClientNum();
String language = dto.getLanguage();
Integer userId = guidDTO.getUserId();
AppSDKVO appSDKVO = new AppSDKVO();
List sdkData = new ArrayList<>();
List appData = new ArrayList<>();
//根据客户端clientNum查询sdk
List sdkIds = sdkClientsService.lambdaQuery()
.eq(SdkClients::getClientNum, clientNum)
.list().stream().map(c -> c.getSdkId()).collect(Collectors.toList());
if (!sdkIds.isEmpty()){
List sdkVersionInfos = sdkVersionInfoService.listByIds(sdkIds);
for (SdkVersionInfo sdkVersionInfo : sdkVersionInfos) {
SDKData sdk = BeanUtil.copyProperties(sdkVersionInfo, SDKData.class);
sdk.setVersion(sdkVersionInfo.getVersionNum());
String uploadUrl = obsUtil.getUploadUrl(sdkVersionInfo.getFileName(), "appv");
sdk.setUrl(uploadUrl);
//根据pcbId查询pcb
PcbVersionInfo pcbVersionInfo = pcbVersionInfoService.getById(sdkVersionInfo.getId());
if(BeanUtil.isEmpty(pcbVersionInfo)){
throw new BadReqException("该PCB版本不存在!!!");
}
SdkVersionDescribe sdkVersionDescribe = sdkVersionDescribeService.lambdaQuery()
.eq(SdkVersionDescribe::getSdkId, sdkVersionInfo.getId())
.eq(SdkVersionDescribe::getLanguage, language)
.one();
if (BeanUtil.isEmpty(sdkVersionDescribe)){
throw new BadReqException("SDK版本描述不存在");
}
sdk.setDescription(sdkVersionDescribe.getDescription());
sdk.setPcbVersion(pcbVersionInfo.getVersionNum());
sdkData.add(sdk);
}
}
List appIds = appsClientsService.lambdaQuery()
.eq(AppsClients::getClientNum, clientNum)
.list().stream().map(c -> c.getAppId()).collect(Collectors.toList());
if (!appIds.isEmpty()){
List apps = appService.listByIds(appIds);
if (apps.isEmpty()){
return Result.error().result(ResultCode.SERVICE_HANDLE_ERROR);
}
for (App app : apps) {
appData appData1 = BeanUtil.copyProperties(app, appData.class);
appData1.setVersion(app.getVersionNum());
appData1.setUrl(app.getSavePath());
AppVersionDescribe appVersionDescribe = appVersionDescribeService.lambdaQuery()
.eq(AppVersionDescribe::getAppId, app.getId())
.eq(AppVersionDescribe::getLanguage, language)
.one();
if (BeanUtil.isEmpty(appVersionDescribe)){
throw new BadReqException("app版本描述不存在");
}
appData1.setDescription(appVersionDescribe.getDescription());
Integer sdkId = app.getSdkId();
//根据sdkid查询sdk版本
SdkVersionInfo sdkVersionInfo = sdkVersionInfoService.getById(sdkId);
if (BeanUtil.isEmpty(sdkVersionInfo)){
throw new BadReqException("该sdk版本不存在");
}
appData1.setMinSdkVersion(sdkVersionInfo.getVersionNum());
appData.add(appData1);
}
}
appSDKVO.setAppData(appData);
appSDKVO.setSdkData(sdkData);
return Result.ok(appSDKVO);
}
}