Commit 0b50e2d7 authored by renjie's avatar renjie

增加定时器

单个ip查询接口
parent 5f588c7c
......@@ -152,4 +152,20 @@ public class IpControlloer {
}
return resultDto;
}
@RequestMapping(value = "/detail", method = RequestMethod.POST)
public ResultDto queryIpDetail(Principal principal, @RequestBody IpResourceRequestDto ipResourceRequestDto) {
ResultDto resultDto = new ResultDto();
try {
resultDto.setData(ipResourceService.queryIp(principal.getName(), ipResourceRequestDto));
resultDto.setStatus(0);
} catch (Exception e) {
resultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", 80001);
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
}
return resultDto;
}
}
......@@ -15,6 +15,7 @@ import com.edgec.browserbackend.browser.repository.*;
import com.edgec.browserbackend.browser.service.IpResourceService;
import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.utils.FileUtil;
import com.edgec.browserbackend.common.utils.PollerUtils;
import com.edgec.browserbackend.common.utils.ThreadPoolUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -232,71 +233,76 @@ public class IpResourceServiceImpl implements IpResourceService {
if (!ipResourceRequestDto.getVendor().equals("local")) {
CompletableFuture.runAsync(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
RestTemplate restTemplate = new RestTemplate();
HttpHeaders header = buildPostHeader();
HashMap<String, Object> map = new HashMap<>();
map.put("name", ipResourceRequestDto.getName());
map.put("region", ipResourceRequestDto.getRegion());
if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 6)
ipResourceRequestDto.setPeriod(7);
else if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 12)
ipResourceRequestDto.setPeriod(14);
map.put("period", String.valueOf(ipResourceRequestDto.getPeriod()));
map.put("provider", ipResourceRequestDto.getVendor());
map.put("unit", ipResourceRequestDto.getUnit());
map.put("amount", String.valueOf(ipResourceRequestDto.getAmount()));
map.put("loginPassword", password);
map.put("startscript", startscript);
map.put("ipkeptperiod", ipResourceRequestDto.getIpkeptperiod());
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, header);
IpBuyResultDto ipBuyResultDto = null;
try {
ipBuyResultDto = restTemplate.postForObject(URL + "/intelligroup/ipresources?accountId=browser", httpEntity, IpBuyResultDto.class);
if (StringUtils.isNotBlank(ipBuyResultDto.getErrorCode())) {
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 3, 0);
accountService.chargeByMoney(username, -newprice*ipChargeRequestDto.getAmount(), ipChargeRequestDto);
for (IpResourceDto ipResourceDto:ipResourceDtos) {
ipResourceRepository.deleteById(ipResourceDto.getId());
}
logger.error("fail to buy ip");
logger.error(ipBuyResultDto.getErrorCode());
PollerUtils.poll(300, 15, () -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (ipBuyResultDto != null && ipBuyResultDto.getIplist() != null && ipBuyResultDto.getIplist().size() >= 1) {
AtomicInteger index = new AtomicInteger();
ipBuyResultDto.getIplist().forEach(x -> {
IpResource ipResource = ipResourceRepository.findById(ipResourceDtos.get(index.get()).getId()).orElse(null);
if (ipResource != null) {
ipResource.setAddr(x.getIp());
ipResource.setStatus(0);
ipResource.setPurchasedTime(Instant.now().toEpochMilli());
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli());
ipResourceRepository.save(ipResource);
} else {
logger.error("no ipResource");
}
index.getAndIncrement();
});
if (ipBuyResultDto.getIplist().size() < ipResourceDtos.size()) {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders header = buildPostHeader();
HashMap<String, Object> map = new HashMap<>();
map.put("name", ipResourceRequestDto.getName());
map.put("region", ipResourceRequestDto.getRegion());
if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 6)
ipResourceRequestDto.setPeriod(7);
else if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 12)
ipResourceRequestDto.setPeriod(14);
map.put("period", String.valueOf(ipResourceRequestDto.getPeriod()));
map.put("provider", ipResourceRequestDto.getVendor());
map.put("unit", ipResourceRequestDto.getUnit());
map.put("amount", String.valueOf(ipResourceRequestDto.getAmount()));
map.put("loginPassword", password);
map.put("startscript", startscript);
map.put("ipkeptperiod", ipResourceRequestDto.getIpkeptperiod());
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, header);
IpBuyResultDto ipBuyResultDto = null;
try {
ipBuyResultDto = restTemplate.postForObject(URL + "/intelligroup/ipresources?accountId=browser", httpEntity, IpBuyResultDto.class);
if (StringUtils.isNotBlank(ipBuyResultDto.getErrorCode())) {
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 3, 0);
accountService.chargeByMoney(username, -newprice*(ipResourceDtos.size() - ipBuyResultDto.getIplist().size()), ipChargeRequestDto);
accountService.chargeByMoney(username, -newprice * ipChargeRequestDto.getAmount(), ipChargeRequestDto);
for (IpResourceDto ipResourceDto : ipResourceDtos) {
IpResource ipResource = ipResourceRepository.findById(ipResourceDto.getId()).orElse(null);
if (ipResource != null && StringUtils.isBlank(ipResource.getAddr())) {
ipResourceRepository.deleteById(ipResource.getId());
ipResourceRepository.deleteById(ipResourceDto.getId());
}
logger.error("fail to buy ip");
logger.error(ipBuyResultDto.getErrorCode());
return false;
}
if (ipBuyResultDto != null && ipBuyResultDto.getIplist() != null && ipBuyResultDto.getIplist().size() >= 1) {
AtomicInteger index = new AtomicInteger();
ipBuyResultDto.getIplist().forEach(x -> {
IpResource ipResource = ipResourceRepository.findById(ipResourceDtos.get(index.get()).getId()).orElse(null);
if (ipResource != null) {
ipResource.setAddr(x.getIp());
ipResource.setStatus(0);
ipResource.setPurchasedTime(Instant.now().toEpochMilli());
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli());
ipResourceRepository.save(ipResource);
} else {
logger.error("no ipResource");
}
index.getAndIncrement();
});
if (ipBuyResultDto.getIplist().size() < ipResourceDtos.size()) {
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 3, 0);
accountService.chargeByMoney(username, -newprice * (ipResourceDtos.size() - ipBuyResultDto.getIplist().size()), ipChargeRequestDto);
for (IpResourceDto ipResourceDto : ipResourceDtos) {
IpResource ipResource = ipResourceRepository.findById(ipResourceDto.getId()).orElse(null);
if (ipResource != null && StringUtils.isBlank(ipResource.getAddr())) {
ipResourceRepository.deleteById(ipResource.getId());
}
}
}
}
ipTransaction.setStatus(1);
ipTransactionRepository.save(ipTransaction);
return true;
} catch (Exception e) {
logger.error(e.getMessage());
return false;
}
ipTransaction.setStatus(1);
ipTransactionRepository.save(ipTransaction);
} catch (Exception e) {
logger.error(e.getMessage());
}
});
}, ThreadPoolUtils.taskExecutorPool);
} else {
ipTransaction.setStatus(1);
......@@ -706,4 +712,56 @@ public class IpResourceServiceImpl implements IpResourceService {
}
return false;
}
@Override
public IpResourceDto queryIp(String username, IpResourceRequestDto ipResourceRequestDto) {
Account account = accountRepository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
IpResource ipResource = null;
if (ipResourceRequestDto.getAddr() != null && ipResourceRequestDto.getAddr().size() > 0)
ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipResourceRequestDto.getAddr().get(0), false);
else if (ipResourceRequestDto.getIpId() != null && ipResourceRequestDto.getIpId().size() > 0)
ipResource = ipResourceRepository.findByIdAndIsDeleted(ipResourceRequestDto.getIpId().get(0), false);
else {
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
}
if (ipResource == null)
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
ShopDto shopDto;
if (ipResource.getShopId() == null) {
shopDto = new ShopDto();
} else {
Shop shop = shopRepository.findById(ipResource.getShopId()).orElse(null);
if (shop != null)
shopDto = new ShopDto(shop);
else
shopDto = new ShopDto();
}
if (StringUtils.isNotBlank(ipResource.getAddr())) {
if (ipResource.getValidTime() <= Instant.now().plusSeconds(60 * 60 * 24 * 7).toEpochMilli() && ipResource.getValidTime() > Instant.now().toEpochMilli()) {
ipResource.setStatus(2);
ipResourceRepository.save(ipResource);
} else if (ipResource.getValidTime() <= Instant.now().minusSeconds(60 * 60 * 24 * 7).toEpochMilli()) {
if (ipResource.getIpType() == IpType.VENDOR) {
deleteIp(username, ipResourceRequestDto);
} else {
deleteIp(username, ipResourceRequestDto);
}
} else if (ipResource.getValidTime() <= Instant.now().toEpochMilli()) {
ipResource.setStatus(1);
ipResourceRepository.save(ipResource);
} else {
if (ipResource.getStatus() != 4 && ipResource.getStatus() != 5) {
ipResource.setStatus(0);
ipResourceRepository.save(ipResource);
}
}
}
IpResourceDto ipResourceDto = new IpResourceDto(ipResource, shopDto, true);
return ipResourceDto;
}
}
......@@ -28,4 +28,6 @@ public interface IpResourceService {
void updateIp(String username, IpResourceUpdateDto ipResourceUpdateDto);
boolean queryIpExist(String username, IpResourceUpdateDto ipResourceUpdateDto);
IpResourceDto queryIp(String username, IpResourceRequestDto ipResourceRequestDto);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment