package com.fdkankan.manage.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fdkankan.manage.common.CacheUtil;
import com.fdkankan.manage.common.PageInfo;
import com.fdkankan.manage.common.ResultCode;
import com.fdkankan.manage.entity.AuthorizeInstall;
import com.fdkankan.manage.entity.IncrementUseType;
import com.fdkankan.manage.entity.SysUser;
import com.fdkankan.manage.exception.BusinessException;
import com.fdkankan.manage.mapper.IAuthorizeInstallMapper;
import com.fdkankan.manage.service.IAuthorizeInstallService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.manage.service.IIncrementUseTypeService;
import com.fdkankan.manage.service.ISysUserService;
import com.fdkankan.manage.vo.request.AuthorizeParam;
import com.fdkankan.reg.RegCodeUtil;
import com.fdkankan.reg.dto.MachineRegDto;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
* 服务实现类
*
*
* @author
* @since 2023-07-07
*/
@Service
public class AuthorizeInstallServiceImpl extends ServiceImpl implements IAuthorizeInstallService {
@Autowired
ISysUserService sysUserService;
@Autowired
IIncrementUseTypeService iIncrementUseTypeService;
@Override
public Object pageList(AuthorizeParam param) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
if(StringUtils.isNotBlank(param.getCustomerName())){
wrapper.like(AuthorizeInstall::getCustomerName,param.getCustomerName());
}
if(param.getCustomerType() != null){
wrapper.eq(AuthorizeInstall::getCustomerType,param.getCustomerType());
}
if(param.getUseType() != null){
wrapper.eq(AuthorizeInstall::getUseType,param.getUseType());
}
if(StringUtils.isNotBlank(param.getAuthorizeKey())){
wrapper.like(AuthorizeInstall::getAuthorizeKey,param.getAuthorizeKey());
}
if(StringUtils.isNotBlank(param.getMachineUuid())){
wrapper.like(AuthorizeInstall::getMachineUuid,param.getMachineUuid());
}
if(StringUtils.isNotBlank(param.getMachineCode())){
wrapper.like(AuthorizeInstall::getMachineCode,param.getMachineCode());
}
wrapper.orderByDesc(AuthorizeInstall::getCreateTime);
Page page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
Set sysIds = page.getRecords().stream().map(AuthorizeInstall::getSysUserId).collect(Collectors.toSet());
HashMap userMap = sysUserService.getByIds(sysIds);
HashMap typeMap = iIncrementUseTypeService.getTypeMap();
for (AuthorizeInstall record : page.getRecords()) {
if(userMap.get(record.getSysUserId())!=null){
record.setSysUserName(userMap.get(record.getSysUserId()).getNickName());
}
if(typeMap.get(record.getUseType()) !=null){
record.setUseTypeStr(typeMap.get(record.getUseType()).getName());
}
}
return PageInfo.PageInfo(page);
}
@Override
public AuthorizeInstall addOrUpdate(AuthorizeInstall param) {
param.setSysUserId(Long.valueOf((String) StpUtil.getLoginId()));
if(param.getId() == null){
//获取机器UUID,机器名称
MachineRegDto machineRegDto = RegCodeUtil.builder().env(CacheUtil.laserRegEnv).build().ParseMachineCode(param.getMachineCode());
if(machineRegDto == null){
throw new BusinessException(ResultCode.READ_MACHINE_CODE_ERROR);
}
param.setMachineUuid( machineRegDto.getUuid());
try {
String authorizeKey = RegCodeUtil.builder().env(CacheUtil.laserRegEnv).build().GenRegeditCode(param.getMachineCode());
if(StringUtils.isBlank(authorizeKey)){
throw new BusinessException(ResultCode.GET_MACHINE_CODE_ERROR);
}
param.setAuthorizeKey(authorizeKey);
}catch (Exception e){
throw new BusinessException(ResultCode.GET_MACHINE_CODE_ERROR);
}
}
this.saveOrUpdate(param);
return param;
}
@Override
public AuthorizeInstall checkMachineCode(String machineCode) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AuthorizeInstall::getMachineCode,machineCode);
List list = this.list(wrapper);
if(list!=null && list.size() >0){
return list.get(0);
}
MachineRegDto machineRegDto = null;
try {
machineRegDto = RegCodeUtil.builder().env(CacheUtil.laserRegEnv).build().ParseMachineCode(machineCode);
}catch (Exception e){
throw new BusinessException(ResultCode.MACHINE_CODE_ERROR);
}
if(machineRegDto == null){
throw new BusinessException(ResultCode.READ_MACHINE_CODE_ERROR);
}
String uuid = machineRegDto.getUuid();
LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>();
wrapper2.eq(AuthorizeInstall::getMachineUuid,uuid);
List list2 = this.list(wrapper2);
if(list2!=null && list2.size() >0){
return list2.get(0);
}
return null;
}
}