package com.ard.work.service.impl;
|
|
import com.ard.common.annotation.DataScope;
|
import com.ard.common.utils.uuid.IdUtils;
|
import com.ard.work.component.forest.TyClient;
|
import com.ard.work.component.netty.TyTcpClientManager;
|
import com.ard.work.domain.dto.TokenDTO;
|
import com.ard.work.domain.entity.ArdServerInfo;
|
import com.ard.work.domain.receiver.AccessTokenReceiver;
|
import com.ard.work.domain.receiver.TyHttpCommonReceiver;
|
import com.ard.work.mapper.ArdServerInfoMapper;
|
import com.ard.work.service.IArdServerInfoService;
|
import com.dtflys.forest.exceptions.ForestRuntimeException;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.DigestUtils;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 服务器管理Service业务层处理
|
*
|
* @author xia
|
* @date 2025-10-10
|
*/
|
@Slf4j
|
@Service
|
public class ArdServerInfoServiceImpl implements IArdServerInfoService {
|
|
@Resource
|
private ArdServerInfoMapper ardServerInfoMapper;
|
@Resource
|
private TyClient tyClient;
|
@Resource
|
private TyTcpClientManager tyTcpClientManager;
|
|
/**
|
* 查询服务器管理
|
*
|
* @param id 服务器管理主键
|
* @return 服务器管理
|
*/
|
@Override
|
public ArdServerInfo selectArdServerInfoById(String id) {
|
return ardServerInfoMapper.selectArdServerInfoById(id);
|
}
|
|
/**
|
* 查询服务器管理列表
|
*
|
* @param ardServerInfo 服务器管理
|
* @return 服务器管理
|
*/
|
@Override
|
@DataScope(deptAlias = "d", userAlias = "u")
|
public List<ArdServerInfo> selectArdServerInfoList(ArdServerInfo ardServerInfo) {
|
return ardServerInfoMapper.selectArdServerInfoList(ardServerInfo);
|
}
|
|
/**
|
* 新增服务器管理
|
*
|
* @param ardServerInfo 服务器管理
|
* @return 结果
|
*/
|
@Override
|
public int insertArdServerInfo(ArdServerInfo ardServerInfo) {
|
ardServerInfo.setId(IdUtils.fastUUID());
|
int i = ardServerInfoMapper.insertArdServerInfo(ardServerInfo);
|
if (i > 0) {
|
tyTcpClientManager.connectServer(ardServerInfo);
|
}
|
return i;
|
}
|
|
/**
|
* 修改服务器管理
|
*
|
* @param ardServerInfo 服务器管理
|
* @return 结果
|
*/
|
@Override
|
public int updateArdServerInfo(ArdServerInfo ardServerInfo) {
|
int i = ardServerInfoMapper.updateArdServerInfo(ardServerInfo);
|
if (i > 0) {
|
tyTcpClientManager.connectServer(ardServerInfo);
|
}
|
return i;
|
}
|
|
/**
|
* 批量删除服务器管理
|
*
|
* @param ids 需要删除的服务器管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdServerInfoByIds(String[] ids) {
|
int i = ardServerInfoMapper.deleteArdServerInfoByIds(ids);
|
if (i > 0) {
|
for (String id : ids) {
|
//移除tcp连接
|
tyTcpClientManager.disconnectServer(id);
|
}
|
}
|
return i;
|
}
|
|
/**
|
* 删除服务器管理信息
|
*
|
* @param id 服务器管理主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdServerInfoById(String id) {
|
return ardServerInfoMapper.deleteArdServerInfoById(id);
|
}
|
|
/**
|
* 根据 id 获取 服务器http接口token
|
*/
|
@Override
|
public AccessTokenReceiver getAccessToken(String id) {
|
long timeStamp = getTimeStamp();
|
|
ArdServerInfo serverInfo = selectArdServerInfoById(id);
|
// 准备请求的json
|
TokenDTO gtd = TokenDTO.builder()
|
.accessKeyId(serverInfo.getAccessKeyId())
|
.encryptStr(getEncryptStr(serverInfo, timeStamp))
|
.timeStamp(timeStamp)
|
.build();
|
// try {
|
TyHttpCommonReceiver<AccessTokenReceiver> getTokenRes = tyClient.getToken(id, gtd);
|
return getTokenRes.getContent();
|
// } catch (Exception e) {
|
// log.error("获取 Token 失败 serverId={}, 异常: {}", id, e.getMessage());
|
// return null; // 请求失败返回 null
|
// }
|
//{"state":0,"content":{"companyId":4127,"accessToken":"sOONT0MMVdoKcMBibb40xxgrUrq0Hw9RFiajic3KOzoNtk"}}
|
}
|
|
/**
|
* 修改服务器状态
|
*/
|
@Override
|
public int updateServerStatus(String id, String status) {
|
return ardServerInfoMapper.updateServerStatus(id, status);
|
}
|
|
@Override
|
public List<String> getServerIdsList() {
|
return ardServerInfoMapper.getServerIdsList();
|
}
|
|
private String getEncryptStr(ArdServerInfo serverInfo, long timeStamp) {
|
String sb = serverInfo.getAccessKeyId() + serverInfo.getAccessKeySecret() + timeStamp;
|
return DigestUtils.md5DigestAsHex(sb.getBytes());
|
}
|
|
private long getTimeStamp() {
|
return new Date().getTime();
|
}
|
|
}
|