Commit 0840cd65 authored by renjie's avatar renjie

本地ip

parent f542b14e
...@@ -71,7 +71,7 @@ public class IpControlloer { ...@@ -71,7 +71,7 @@ public class IpControlloer {
public ResultDto deleteIp(Principal principal, @RequestBody IpResourceRequestDto ipResourceRequestDto) { public ResultDto deleteIp(Principal principal, @RequestBody IpResourceRequestDto ipResourceRequestDto) {
ResultDto resultDto = new ResultDto(); ResultDto resultDto = new ResultDto();
try { try {
resultDto.setData(ipResourceService.deleteIp(principal.getName(), ipResourceRequestDto.getAddr())); resultDto.setData(ipResourceService.deleteIp(principal.getName(), ipResourceRequestDto));
resultDto.setStatus(0); resultDto.setStatus(0);
} catch (Exception e) { } catch (Exception e) {
resultDto.setStatus(-1); resultDto.setStatus(-1);
...@@ -118,4 +118,38 @@ public class IpControlloer { ...@@ -118,4 +118,38 @@ public class IpControlloer {
} }
return resultDto; return resultDto;
} }
@RequestMapping(value = "/update", method = RequestMethod.POST)
public ResultDto updateIp(Principal principal, @RequestBody IpResourceUpdateDto ipResourceUpdateDto) {
ResultDto resultDto = new ResultDto();
try {
ipResourceService.updateIp(principal.getName(), ipResourceUpdateDto);
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;
}
@RequestMapping(value = "/query", method = RequestMethod.POST)
public ResultDto queryIp(Principal principal, @RequestBody IpResourceUpdateDto ipResourceUpdateDto) {
ResultDto resultDto = new ResultDto();
try {
HashMap<String, Boolean> map = new HashMap<>();
map.put("found", ipResourceService.queryIpExist(principal.getName(), ipResourceUpdateDto));
resultDto.setData(map);
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;
}
} }
...@@ -115,7 +115,7 @@ public class ShopController { ...@@ -115,7 +115,7 @@ public class ShopController {
public ResultDto bindShop(Principal principal, @RequestBody ShopRequestDto shopRequestDto) { public ResultDto bindShop(Principal principal, @RequestBody ShopRequestDto shopRequestDto) {
ResultDto resultDto = new ResultDto(); ResultDto resultDto = new ResultDto();
try { try {
shopService.bindShop(principal.getName(), shopRequestDto.getShopId(), shopRequestDto.getIpAddr()); shopService.bindShop(principal.getName(), shopRequestDto);
resultDto.setStatus(0); resultDto.setStatus(0);
}catch (ClientRequestException e) { }catch (ClientRequestException e) {
resultDto.setStatus(-1); resultDto.setStatus(-1);
...@@ -131,7 +131,7 @@ public class ShopController { ...@@ -131,7 +131,7 @@ public class ShopController {
public ResultDto unBindShop(Principal principal, @RequestBody ShopRequestDto shopRequestDto) { public ResultDto unBindShop(Principal principal, @RequestBody ShopRequestDto shopRequestDto) {
ResultDto resultDto = new ResultDto(); ResultDto resultDto = new ResultDto();
try { try {
shopService.unBindShop(principal.getName(), shopRequestDto.getShopId(), shopRequestDto.getIpAddr()); shopService.unBindShop(principal.getName(), shopRequestDto);
resultDto.setStatus(0); resultDto.setStatus(0);
}catch (ClientRequestException e) { }catch (ClientRequestException e) {
resultDto.setStatus(-1); resultDto.setStatus(-1);
......
...@@ -19,7 +19,7 @@ public class IpResource { ...@@ -19,7 +19,7 @@ public class IpResource {
private Vendor vendor; private Vendor vendor;
private String region; private String region;
private String regionCn; private String regionCn;
//0:正常, 1:已过期, 2:即将过期, 3:正在分配 //0:正常, 1:已过期, 2:即将过期, 3:正在分配, 4:未使用, 5:已失效;
private int status; private int status;
private List<String> port; private List<String> port;
private long purchasedTime; private long purchasedTime;
......
...@@ -6,7 +6,7 @@ package com.edgec.browserbackend.browser.domain; ...@@ -6,7 +6,7 @@ package com.edgec.browserbackend.browser.domain;
* @CreateTime 2020/3/12 4:01 下午 * @CreateTime 2020/3/12 4:01 下午
**/ **/
public enum Vendor { public enum Vendor {
aliyun("阿里云"), JDCLOUD("京东云"), aws("亚马逊云"), awscn("亚马逊中国"), tencent("腾讯云"); aliyun("阿里云"), JDCLOUD("京东云"), aws("亚马逊云"), awscn("亚马逊中国"), tencent("腾讯云"), local("本地");
private String value; private String value;
......
...@@ -11,6 +11,7 @@ public class IpResourceDto { ...@@ -11,6 +11,7 @@ public class IpResourceDto {
private String addr; private String addr;
private Vendor vendor; private Vendor vendor;
private String region; private String region;
//0:正常, 1:已过期, 2:即将过期, 3:正在分配, 4:未使用
private int status; private int status;
private List<String> port; private List<String> port;
private long purchasedTIme; private long purchasedTIme;
......
...@@ -34,6 +34,8 @@ public class IpResourceRequestDto { ...@@ -34,6 +34,8 @@ public class IpResourceRequestDto {
private List<String> addr = new ArrayList<>(); private List<String> addr = new ArrayList<>();
private List<String> ipId = new ArrayList<>();
public String getName() { public String getName() {
return name; return name;
} }
...@@ -165,4 +167,12 @@ public class IpResourceRequestDto { ...@@ -165,4 +167,12 @@ public class IpResourceRequestDto {
public void setRegionCn(String regionCn) { public void setRegionCn(String regionCn) {
this.regionCn = regionCn; this.regionCn = regionCn;
} }
public List<String> getIpId() {
return ipId;
}
public void setIpId(List<String> ipId) {
this.ipId = ipId;
}
} }
package com.edgec.browserbackend.browser.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class IpResourceUpdateDto {
private String ipId;
private String addr;
private int status;
public String getAddr() {
return addr;
}
public void setIpId(String ipId) {
this.ipId = ipId;
}
public String getIpId() {
return ipId;
}
public void setAddr(String addr) {
this.addr = addr;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
...@@ -15,6 +15,8 @@ public class ShopRequestDto { ...@@ -15,6 +15,8 @@ public class ShopRequestDto {
private String ipAddr; private String ipAddr;
private String ipId;
private String group; private String group;
private String toGroup; private String toGroup;
...@@ -116,4 +118,12 @@ public class ShopRequestDto { ...@@ -116,4 +118,12 @@ public class ShopRequestDto {
public void setShopId(String shopId) { public void setShopId(String shopId) {
this.shopId = shopId; this.shopId = shopId;
} }
public String getIpId() {
return ipId;
}
public void setIpId(String ipId) {
this.ipId = ipId;
}
} }
...@@ -9,8 +9,11 @@ import org.springframework.data.mongodb.repository.MongoRepository; ...@@ -9,8 +9,11 @@ import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List; import java.util.List;
public interface IpResourceRepository extends MongoRepository<IpResource, String> { public interface IpResourceRepository extends MongoRepository<IpResource, String> {
IpResource findByAddr(String addr);
IpResource findByAddrAndIsDeleted(String addr, boolean isDeleted); IpResource findByAddrAndIsDeleted(String addr, boolean isDeleted);
IpResource findByIdAndIsDeleted(String id, boolean isDeleted);
List<IpResource> findByIdInAndIsDeleted(List<String> ipIds, boolean isDeleted); List<IpResource> findByIdInAndIsDeleted(List<String> ipIds, boolean isDeleted);
Page<IpResource> findByIdInAndIsDeleted(List<String> ipIds, boolean isDeleted, Pageable pageable);
List<IpResource> findByOwnerAndIsDeletedAndShopIdIsNull(String owner, boolean isDeleted); List<IpResource> findByOwnerAndIsDeletedAndShopIdIsNull(String owner, boolean isDeleted);
List<IpResource> findByOwnerAndStatusAndIsDeletedAndShopIdIsNull(String owner, int status, boolean isDeleted); List<IpResource> findByOwnerAndStatusAndIsDeletedAndShopIdIsNull(String owner, int status, boolean isDeleted);
List<IpResource> findByStatusAndIdInAndIsDeleted(int status, List<String> ipIds, boolean isDeleted); List<IpResource> findByStatusAndIdInAndIsDeleted(int status, List<String> ipIds, boolean isDeleted);
......
...@@ -31,6 +31,7 @@ import org.springframework.web.client.RestTemplate; ...@@ -31,6 +31,7 @@ import org.springframework.web.client.RestTemplate;
import java.io.File; import java.io.File;
import java.time.Instant; import java.time.Instant;
import java.time.ZoneOffset;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
...@@ -192,13 +193,20 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -192,13 +193,20 @@ public class IpResourceServiceImpl implements IpResourceService {
for (int i = 0; i < ipResourceRequestDto.getAmount(); i++) { for (int i = 0; i < ipResourceRequestDto.getAmount(); i++) {
IpResource ipResource = new IpResource(); IpResource ipResource = new IpResource();
ipResource.setAddr(""); if (!ipResourceRequestDto.getVendor().equals("local")) {
ipResource.setIpType(IpType.VENDOR); ipResource.setAddr("");
ipResource.setIpType(IpType.VENDOR);
ipResource.setVendor(Vendor.valueOf(ipResourceRequestDto.getVendor()));
ipResource.setStatus(3);
} else {
ipResource.setAddr("本地Ip未使用");
ipResource.setIpType(IpType.LOCAL);
ipResource.setVendor(Vendor.valueOf(ipResourceRequestDto.getVendor()));
ipResource.setStatus(4);
}
ipResource.setPurchasedTime(Instant.now().toEpochMilli()); ipResource.setPurchasedTime(Instant.now().toEpochMilli());
ipResource.setValidTime(Instant.now().plusSeconds(3600*24*30).toEpochMilli()); ipResource.setValidTime(Instant.now().plusSeconds(3600*24*30).toEpochMilli());
ipResource.setPort(port); ipResource.setPort(port);
ipResource.setVendor(Vendor.valueOf(ipResourceRequestDto.getVendor()));
ipResource.setStatus(3);
ipResource.setUsername(USERNAME); ipResource.setUsername(USERNAME);
if (account.getParent() != null) if (account.getParent() != null)
ipResource.setUserParent(account.getParent()); ipResource.setUserParent(account.getParent());
...@@ -218,73 +226,78 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -218,73 +226,78 @@ public class IpResourceServiceImpl implements IpResourceService {
IpTransactionDto ipTransactionDto = new IpTransactionDto(ipTransaction); IpTransactionDto ipTransactionDto = new IpTransactionDto(ipTransaction);
ipTransactionDto.setIpResourceDtos(ipResourceDtos); ipTransactionDto.setIpResourceDtos(ipResourceDtos);
CompletableFuture.runAsync(() -> { if (!ipResourceRequestDto.getVendor().equals("local")) {
try { CompletableFuture.runAsync(() -> {
Thread.sleep(2000); try {
} catch (InterruptedException e) { Thread.sleep(2000);
e.printStackTrace(); } 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, 1);
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());
} }
if (ipBuyResultDto != null && ipBuyResultDto.getIplist() != null && ipBuyResultDto.getIplist().size() >= 1) { RestTemplate restTemplate = new RestTemplate();
AtomicInteger index = new AtomicInteger(); HttpHeaders header = buildPostHeader();
ipBuyResultDto.getIplist().forEach(x -> { HashMap<String, Object> map = new HashMap<>();
IpResource ipResource = ipResourceRepository.findById(ipResourceDtos.get(index.get()).getId()).orElse(null); map.put("name", ipResourceRequestDto.getName());
if (ipResource != null) { map.put("region", ipResourceRequestDto.getRegion());
ipResource.setAddr(x.getIp()); if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 6)
ipResource.setStatus(0); ipResourceRequestDto.setPeriod(7);
ipResource.setPurchasedTime(Instant.now().toEpochMilli()); else if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 12)
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli()); ipResourceRequestDto.setPeriod(14);
ipResourceRepository.save(ipResource); map.put("period", String.valueOf(ipResourceRequestDto.getPeriod()));
} else { map.put("provider", ipResourceRequestDto.getVendor());
logger.error("no ipResource"); map.put("unit", ipResourceRequestDto.getUnit());
} map.put("amount", String.valueOf(ipResourceRequestDto.getAmount()));
index.getAndIncrement(); map.put("loginPassword", password);
}); map.put("startscript", startscript);
if (ipBuyResultDto.getIplist().size() < ipResourceDtos.size()) { 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, 1); IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 1);
accountService.chargeByMoney(username, -newprice*(ipResourceDtos.size() - ipBuyResultDto.getIplist().size()), ipChargeRequestDto); accountService.chargeByMoney(username, -newprice*ipChargeRequestDto.getAmount(), ipChargeRequestDto);
for (IpResourceDto ipResourceDto : ipResourceDtos) { for (IpResourceDto ipResourceDto:ipResourceDtos) {
IpResource ipResource = ipResourceRepository.findById(ipResourceDto.getId()).orElse(null); ipResourceRepository.deleteById(ipResourceDto.getId());
if (ipResource != null && StringUtils.isBlank(ipResource.getAddr())) { }
ipResourceRepository.deleteById(ipResource.getId()); logger.error("fail to buy ip");
logger.error(ipBuyResultDto.getErrorCode());
}
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, 1);
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);
} catch (Exception e) {
logger.error(e.getMessage());
} }
ipTransaction.setStatus(1); }, ThreadPoolUtils.taskExecutorPool);
ipTransactionRepository.save(ipTransaction); } else {
} catch (Exception e) { ipTransaction.setStatus(1);
logger.error(e.getMessage()); ipTransactionRepository.save(ipTransaction);
} }
}, ThreadPoolUtils.taskExecutorPool);
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 1); IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 1);
accountService.chargeByMoney(username, newprice * ipChargeRequestDto.getAmount(), ipChargeRequestDto); accountService.chargeByMoney(username, newprice * ipChargeRequestDto.getAmount(), ipChargeRequestDto);
...@@ -318,79 +331,144 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -318,79 +331,144 @@ public class IpResourceServiceImpl implements IpResourceService {
throw new ClientRequestException(AccountErrorCode.NOTENOUGHBALANCE); throw new ClientRequestException(AccountErrorCode.NOTENOUGHBALANCE);
} }
RestTemplate restTemplate = new RestTemplate();
HashMap<String, Object> map = new HashMap<>();
map.put("iplist", ipResourceRequestDto.getAddr());
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", ipResourceRequestDto.getPeriod());
map.put("unit", ipResourceRequestDto.getUnit());
HttpHeaders headers = buildPostHeader();
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map, headers);
ResponseEntity<String> result = restTemplate.exchange(URL + "/intelligroup/renewip?accountId=browser", HttpMethod.PUT, entity, String.class);
RenewIpResultDto renewIpResultDto = JSON.parseObject(result.getBody(), RenewIpResultDto.class);
if (StringUtils.isNotBlank(renewIpResultDto.getErrorCode())) {
logger.error(renewIpResultDto.getErrorCode());
throw new ClientRequestException(BrowserErrorCode.UNKNOWN);
}
IpOperationResultDto ipOperationResultDto = new IpOperationResultDto(); IpOperationResultDto ipOperationResultDto = new IpOperationResultDto();
renewIpResultDto.getIplist().forEach(x -> { if (ipResourceRequestDto.getAddr() != null && ipResourceRequestDto.getAddr().size() > 0) {
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(x.getIp(), false); RestTemplate restTemplate = new RestTemplate();
List<String> vendorPrices = priceList.get(ipResource.getRegionCn()); HashMap<String, Object> map = new HashMap<>();
String price = vendorPrices.stream() map.put("iplist", ipResourceRequestDto.getAddr());
.filter(vendorprice -> ipResource.getVendor().getValue().equals(vendorprice.substring(0, vendorprice.indexOf("-")))) if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 6)
.map(vendorprice -> vendorprice.substring(vendorprice.lastIndexOf("-") + 1)).collect(Collectors.joining()); ipResourceRequestDto.setPeriod(7);
else if (ipResourceRequestDto.getUnit().equals("month") && ipResourceRequestDto.getPeriod() == 12)
ipResourceRequestDto.setPeriod(14);
map.put("period", ipResourceRequestDto.getPeriod());
map.put("unit", ipResourceRequestDto.getUnit());
HttpHeaders headers = buildPostHeader();
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map, headers);
ResponseEntity<String> result = restTemplate.exchange(URL + "/intelligroup/renewip?accountId=browser", HttpMethod.PUT, entity, String.class);
RenewIpResultDto renewIpResultDto = JSON.parseObject(result.getBody(), RenewIpResultDto.class);
if (StringUtils.isNotBlank(renewIpResultDto.getErrorCode())) {
logger.error(renewIpResultDto.getErrorCode());
throw new ClientRequestException(BrowserErrorCode.UNKNOWN);
}
renewIpResultDto.getIplist().forEach(x -> {
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(x.getIp(), false);
List<String> vendorPrices = priceList.get(ipResource.getRegionCn());
String price = vendorPrices.stream()
.filter(vendorprice -> ipResource.getVendor().getValue().equals(vendorprice.substring(0, vendorprice.indexOf("-"))))
.map(vendorprice -> vendorprice.substring(vendorprice.lastIndexOf("-") + 1)).collect(Collectors.joining());
double newprice1 = ipResourceRequestDto.getUnit().equals("week") ? (Integer.valueOf(price)/3) : Integer.valueOf(price); double newprice1 = ipResourceRequestDto.getUnit().equals("week") ? (Integer.valueOf(price)/3) : Integer.valueOf(price);
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 2); IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 2);
accountService.chargeByMoney(username, newprice1, ipChargeRequestDto); accountService.chargeByMoney(username, newprice1, ipChargeRequestDto);
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli()); ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli());
ipResourceRepository.save(ipResource); ipResourceRepository.save(ipResource);
ipOperationResultDto.getSuccessList().add(x.getIp()); ipOperationResultDto.getSuccessList().add(x.getIp());
failedList.remove(x.getIp()); failedList.remove(x.getIp());
}); });
ipOperationResultDto.setFailList(failedList); ipOperationResultDto.setFailList(failedList);
}
if (ipResourceRequestDto.getIpId() != null && ipResourceRequestDto.getIpId().size() > 0) {
ipResourceRequestDto.getIpId().forEach(x -> {
IpResource ipResource = ipResourceRepository.findByIdAndIsDeleted(x, false);
List<String> vendorPrices = priceList.get(ipResource.getRegionCn());
String price = vendorPrices.stream()
.filter(vendorprice -> ipResource.getVendor().getValue().equals(vendorprice.substring(0, vendorprice.indexOf("-"))))
.map(vendorprice -> vendorprice.substring(vendorprice.lastIndexOf("-") + 1)).collect(Collectors.joining());
double newprice1 = ipResourceRequestDto.getUnit().equals("week") ? (Integer.valueOf(price) / 3) : Integer.valueOf(price);
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 2);
accountService.chargeByMoney(username, newprice1, ipChargeRequestDto);
ipResource.setValidTime(Instant.ofEpochMilli(ipResource.getValidTime()).atZone(ZoneOffset.UTC)
.plusMonths(ipResourceRequestDto.getPeriod()).toInstant().toEpochMilli());
ipResourceRepository.save(ipResource);
ipOperationResultDto.getSuccessList().add(x);
failedList.remove(x);
});
} else {
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
}
return ipOperationResultDto; return ipOperationResultDto;
} }
@Override @Override
public IpOperationResultDto deleteIp(String username, List<String> ipAddrs) { public IpOperationResultDto deleteIp(String username, IpResourceRequestDto ipResourceRequestDto) {
String URL = (profiles.equals("dev") || profiles.equals("staging"))? TESTURL : CLOUDAMURL; String URL = (profiles.equals("dev") || profiles.equals("staging"))? TESTURL : CLOUDAMURL;
Account account = accountRepository.findByName(username); Account account = accountRepository.findByName(username);
if (account == null) if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST); throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
IpOperationResultDto ipOperationResultDto = new IpOperationResultDto(); IpOperationResultDto ipOperationResultDto = new IpOperationResultDto();
ipAddrs.forEach(ipAddr -> { if (ipResourceRequestDto.getAddr() != null && ipResourceRequestDto.getAddr().size() > 0) {
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipAddr, false); ipResourceRequestDto.getAddr().forEach(ipAddr -> {
if (ipResource == null) { IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipAddr, false);
ipOperationResultDto.getFailList().add(ipAddr); if (ipResource == null) {
return;
}
UserShop userShop = null;
if (ipResource.getShopId() != null) {
userShop = userShopRepository.findByUsernameAndShopId(username, ipResource.getShopId());
if (userShop == null) {
ipOperationResultDto.getFailList().add(ipAddr); ipOperationResultDto.getFailList().add(ipAddr);
return; return;
} }
} else if (!ipResource.getOwner().equals(username)) { UserShop userShop = null;
ipOperationResultDto.getFailList().add(ipAddr); if (ipResource.getShopId() != null) {
return; userShop = userShopRepository.findByUsernameAndShopId(username, ipResource.getShopId());
} if (userShop == null) {
RestTemplate restTemplate = new RestTemplate(); ipOperationResultDto.getFailList().add(ipAddr);
HttpHeaders headers = buildGetHeader(); return;
Map<String, String> params = new HashMap<String, String>(); }
HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(params, headers); } else if (!ipResource.getOwner().equals(username)) {
try { ipOperationResultDto.getFailList().add(ipAddr);
ResponseEntity<String> result = restTemplate.exchange(URL + "/intelligroup/ipresources?accountId=browser&ip={ip}", HttpMethod.DELETE, httpEntity, String.class, ipAddr); return;
DeleteIpResultDto deleteIpResultDto = JSON.parseObject(result.getBody(), DeleteIpResultDto.class); }
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = buildGetHeader();
Map<String, String> params = new HashMap<String, String>();
HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(params, headers);
try {
ResponseEntity<String> result = restTemplate.exchange(URL + "/intelligroup/ipresources?accountId=browser&ip={ip}", HttpMethod.DELETE, httpEntity, String.class, ipAddr);
DeleteIpResultDto deleteIpResultDto = JSON.parseObject(result.getBody(), DeleteIpResultDto.class);
ipResource.setDeleted(true);
ipResourceRepository.save(ipResource);
if (userShop != null){
Shop shop = shopRepository.findById(ipResource.getShopId()).orElse(null);
if (shop != null) {
shop.setIp(null);
shop.setIpId(null);
shop.setIpRegion(null);
shopRepository.save(shop);
}
userShop.setIpId(null);
userShopRepository.save(userShop);
}
ipOperationResultDto.getSuccessList().add(ipAddr);
} catch (Exception e) {
logger.error("fail to renew ip", e.getMessage());
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
});
}
if (ipResourceRequestDto.getIpId() != null && ipResourceRequestDto.getIpId().size() > 0) {
ipResourceRequestDto.getIpId().forEach(ipId -> {
IpResource ipResource = ipResourceRepository.findByIdAndIsDeleted(ipId, false);
if (ipResource == null) {
ipOperationResultDto.getFailList().add(ipId);
return;
}
UserShop userShop = null;
if (ipResource.getShopId() != null) {
userShop = userShopRepository.findByUsernameAndShopId(username, ipResource.getShopId());
if (userShop == null) {
ipOperationResultDto.getFailList().add(ipId);
return;
}
} else if (!ipResource.getOwner().equals(username)) {
ipOperationResultDto.getFailList().add(ipId);
return;
}
ipResource.setDeleted(true); ipResource.setDeleted(true);
ipResourceRepository.save(ipResource); ipResourceRepository.save(ipResource);
if (userShop != null){ if (userShop != null){
...@@ -404,13 +482,10 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -404,13 +482,10 @@ public class IpResourceServiceImpl implements IpResourceService {
userShop.setIpId(null); userShop.setIpId(null);
userShopRepository.save(userShop); userShopRepository.save(userShop);
} }
ipOperationResultDto.getSuccessList().add(ipAddr); ipOperationResultDto.getSuccessList().add(ipId);
} catch (Exception e) { });
logger.error("fail to renew ip", e.getMessage()); }
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
});
return ipOperationResultDto; return ipOperationResultDto;
} }
...@@ -459,37 +534,7 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -459,37 +534,7 @@ public class IpResourceServiceImpl implements IpResourceService {
else if (ipFilterDto != null && StringUtils.isNotBlank(ipFilterDto.getVendor())) { else if (ipFilterDto != null && StringUtils.isNotBlank(ipFilterDto.getVendor())) {
ipResources1 = ipResourceRepository.findByVendorLikeAndIdInAndIsDeletedOrderByPurchasedTimeDesc(ipFilterDto.getVendor(), allIpIds, false, pageable); ipResources1 = ipResourceRepository.findByVendorLikeAndIdInAndIsDeletedOrderByPurchasedTimeDesc(ipFilterDto.getVendor(), allIpIds, false, pageable);
} else { } else {
ipResources.forEach(x -> { ipResources1 = ipResourceRepository.findByIdInAndIsDeleted(allIpIds, false, pageable);
ShopDto shopDto;
if (x.getShopId() == null) {
shopDto = new ShopDto();
} else {
Shop shop = shopRepository.findById(x.getShopId()).orElse(null);
if (shop != null)
shopDto = new ShopDto(shop);
else
shopDto = new ShopDto();
}
if (StringUtils.isNotBlank(x.getAddr())) {
if (x.getValidTime() <= Instant.now().plusSeconds(60*60*24*7).toEpochMilli() && x.getValidTime() >Instant.now().toEpochMilli()) {
x.setStatus(2);
ipResourceRepository.save(x);
}
else if (x.getValidTime() <= Instant.now().minusSeconds(60*60*24*7).toEpochMilli()) {
deleteIp(username, Arrays.asList(x.getAddr()));
return;
}
else if (x.getValidTime() <= Instant.now().toEpochMilli()) {
x.setStatus(1);
ipResourceRepository.save(x);
}
else {
x.setStatus(0);
ipResourceRepository.save(x);
}
}
ipResourceDtos.add(new IpResourceDto(x, shopDto));
});
} }
if (ipResources1 != null) { if (ipResources1 != null) {
ipResources1.getContent().forEach(x -> { ipResources1.getContent().forEach(x -> {
...@@ -509,7 +554,15 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -509,7 +554,15 @@ public class IpResourceServiceImpl implements IpResourceService {
ipResourceRepository.save(x); ipResourceRepository.save(x);
} }
else if (x.getValidTime() <= Instant.now().minusSeconds(60*60*24*7).toEpochMilli()) { else if (x.getValidTime() <= Instant.now().minusSeconds(60*60*24*7).toEpochMilli()) {
deleteIp(username, Arrays.asList(x.getAddr())); if (x.getIpType() == IpType.VENDOR) {
IpResourceRequestDto ipResourceRequestDto = new IpResourceRequestDto();
ipResourceRequestDto.setAddr(Arrays.asList(x.getAddr()));
deleteIp(username, ipResourceRequestDto);
} else {
IpResourceRequestDto ipResourceRequestDto = new IpResourceRequestDto();
ipResourceRequestDto.setIpId(Arrays.asList(x.getId()));
deleteIp(username, ipResourceRequestDto);
}
return; return;
} }
else if (x.getValidTime() <= Instant.now().toEpochMilli()) { else if (x.getValidTime() <= Instant.now().toEpochMilli()) {
...@@ -615,4 +668,33 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -615,4 +668,33 @@ public class IpResourceServiceImpl implements IpResourceService {
ipSummary.setTotal(unbind.size()); ipSummary.setTotal(unbind.size());
return ipSummary; return ipSummary;
} }
@Override
public void updateIp(String username, IpResourceUpdateDto ipResourceUpdateDto) {
Account account = accountRepository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
if (account.getPermission() < 8)
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
IpResource ipResource = ipResourceRepository.findByIdAndIsDeleted(ipResourceUpdateDto.getIpId(), false);
if (ipResource == null)
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
if (StringUtils.isNotBlank(ipResourceUpdateDto.getAddr())) {
ipResource.setAddr(ipResourceUpdateDto.getAddr());
}
ipResource.setStatus(ipResourceUpdateDto.getStatus());
ipResourceRepository.save(ipResource);
}
@Override
public boolean queryIpExist(String username, IpResourceUpdateDto ipResourceUpdateDto) {
Account account = accountRepository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
IpResource ipResource = ipResourceRepository.findByAddr(ipResourceUpdateDto.getAddr());
if (ipResource != null) {
return true;
}
return false;
}
} }
...@@ -201,7 +201,10 @@ public class ShopServiceImpl implements ShopService { ...@@ -201,7 +201,10 @@ public class ShopServiceImpl implements ShopService {
if (shop == null) if (shop == null)
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST); throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
if (shop.getIpId() != null && shop.getIp() != null) { if (shop.getIpId() != null && shop.getIp() != null) {
unBindShop(username, shopId, shop.getIp()); ShopRequestDto shopRequestDto = new ShopRequestDto();
shopRequestDto.setShopId(shopId);
shopRequestDto.setIpId(shop.getIpId());
unBindShop(username, shopRequestDto);
} }
boolean result = userShopRepository.deleteByUsernameAndShopId(username, shopId); boolean result = userShopRepository.deleteByUsernameAndShopId(username, shopId);
if (result) { if (result) {
...@@ -212,7 +215,8 @@ public class ShopServiceImpl implements ShopService { ...@@ -212,7 +215,8 @@ public class ShopServiceImpl implements ShopService {
} }
@Override @Override
public void bindShop(String username, String shopId, String ipAddr) { public void bindShop(String username, ShopRequestDto shopRequestDto) {
String shopId = shopRequestDto.getShopId();
Account account = accountRepository.findByName(username); Account account = accountRepository.findByName(username);
if (account == null) { if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST); throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
...@@ -224,14 +228,21 @@ public class ShopServiceImpl implements ShopService { ...@@ -224,14 +228,21 @@ public class ShopServiceImpl implements ShopService {
Shop shop = shopRepository.findById(shopId).orElse(null); Shop shop = shopRepository.findById(shopId).orElse(null);
if (shop == null) if (shop == null)
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST); throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
IpResource ipResource = null;
if (StringUtils.isNotBlank(shopRequestDto.getIpAddr())) {
ipResource = ipResourceRepository.findByAddrAndIsDeleted(shopRequestDto.getIpAddr(), false);
} else if (StringUtils.isNotBlank(shopRequestDto.getIpId())) {
ipResource = ipResourceRepository.findByIdAndIsDeleted(shopRequestDto.getIpId(), false);
}
if (shop.getIpId() != null && shop.getIp() != null) { if (shop.getIpId() != null && shop.getIp() != null) {
unBindShop(username, shopId, shop.getIp()); unBindShop(username, shopRequestDto);
} }
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipAddr, false);
if (ipResource == null) if (ipResource == null)
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST); throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
try { try {
shop.setIp(ipAddr); shop.setIp(ipResource.getAddr());
shop.setIpId(ipResource.getId()); shop.setIpId(ipResource.getId());
shop.setIpRegion(ipResource.getRegion()); shop.setIpRegion(ipResource.getRegion());
shopRepository.save(shop); shopRepository.save(shop);
...@@ -250,7 +261,10 @@ public class ShopServiceImpl implements ShopService { ...@@ -250,7 +261,10 @@ public class ShopServiceImpl implements ShopService {
} }
@Override @Override
public void unBindShop(String username, String shopId, String ipAddr) { public void unBindShop(String username, ShopRequestDto shopRequestDto) {
String shopId = null;
if (StringUtils.isNotBlank(shopRequestDto.getShopId()))
shopId = shopRequestDto.getShopId();
Account account = accountRepository.findByName(username); Account account = accountRepository.findByName(username);
if (account == null) { if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST); throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
...@@ -262,10 +276,15 @@ public class ShopServiceImpl implements ShopService { ...@@ -262,10 +276,15 @@ public class ShopServiceImpl implements ShopService {
Shop shop = shopRepository.findById(shopId).orElse(null); Shop shop = shopRepository.findById(shopId).orElse(null);
if (shop == null) if (shop == null)
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST); throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipAddr, false); IpResource ipResource = null;
if (StringUtils.isNotBlank(shopRequestDto.getIpAddr())) {
ipResource = ipResourceRepository.findByAddrAndIsDeleted(shopRequestDto.getIpAddr(), false);
} else if (StringUtils.isNotBlank(shopRequestDto.getIpId())) {
ipResource = ipResourceRepository.findByIdAndIsDeleted(shopRequestDto.getIpId(), false);
}
if (ipResource == null) if (ipResource == null)
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST); throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
if (!ipAddr.equals(shop.getIp())) if (!ipResource.getId().equals(shop.getIpId()))
throw new ClientRequestException(BrowserErrorCode.IPNOTBINDTOSHOP); throw new ClientRequestException(BrowserErrorCode.IPNOTBINDTOSHOP);
try { try {
shop.setIp(null); shop.setIp(null);
......
...@@ -11,7 +11,7 @@ public interface IpResourceService { ...@@ -11,7 +11,7 @@ public interface IpResourceService {
IpOperationResultDto renewIp(String username, IpResourceRequestDto ipResourceRequestDto) throws Exception; IpOperationResultDto renewIp(String username, IpResourceRequestDto ipResourceRequestDto) throws Exception;
IpOperationResultDto deleteIp(String username, List<String> ipAddrs) throws Exception; IpOperationResultDto deleteIp(String username, IpResourceRequestDto ipResourceRequestDto) throws Exception;
IpPageResultDto getIpList(String username, int groupType, int page, int amount, IpFilterDto ipFilterDto); IpPageResultDto getIpList(String username, int groupType, int page, int amount, IpFilterDto ipFilterDto);
...@@ -24,4 +24,8 @@ public interface IpResourceService { ...@@ -24,4 +24,8 @@ public interface IpResourceService {
IpTransactionDto queryTransaction(String username, String transactionId); IpTransactionDto queryTransaction(String username, String transactionId);
IpSummary getIpSummary(String username); IpSummary getIpSummary(String username);
void updateIp(String username, IpResourceUpdateDto ipResourceUpdateDto);
boolean queryIpExist(String username, IpResourceUpdateDto ipResourceUpdateDto);
} }
...@@ -4,6 +4,7 @@ import com.edgec.browserbackend.browser.domain.Shop; ...@@ -4,6 +4,7 @@ import com.edgec.browserbackend.browser.domain.Shop;
import com.edgec.browserbackend.browser.domain.ShopSummary; import com.edgec.browserbackend.browser.domain.ShopSummary;
import com.edgec.browserbackend.browser.dto.ShopFilterDto; import com.edgec.browserbackend.browser.dto.ShopFilterDto;
import com.edgec.browserbackend.browser.dto.ShopPageResultDto; import com.edgec.browserbackend.browser.dto.ShopPageResultDto;
import com.edgec.browserbackend.browser.dto.ShopRequestDto;
import com.edgec.browserbackend.browser.dto.ShopResultDto; import com.edgec.browserbackend.browser.dto.ShopResultDto;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
...@@ -20,9 +21,9 @@ public interface ShopService { ...@@ -20,9 +21,9 @@ public interface ShopService {
void deleteShop(String username, String shopId); void deleteShop(String username, String shopId);
void bindShop(String username, String shopId, String ipAddr); void bindShop(String username, ShopRequestDto shopRequestDto);
void unBindShop(String username, String shopId, String ipAddr); void unBindShop(String username, ShopRequestDto shopRequestDto);
void transferShop(String username, String shopId, String groupId); void transferShop(String username, String shopId, String groupId);
......
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