Commit 0840cd65 authored by renjie's avatar renjie

本地ip

parent f542b14e
......@@ -71,7 +71,7 @@ public class IpControlloer {
public ResultDto deleteIp(Principal principal, @RequestBody IpResourceRequestDto ipResourceRequestDto) {
ResultDto resultDto = new ResultDto();
try {
resultDto.setData(ipResourceService.deleteIp(principal.getName(), ipResourceRequestDto.getAddr()));
resultDto.setData(ipResourceService.deleteIp(principal.getName(), ipResourceRequestDto));
resultDto.setStatus(0);
} catch (Exception e) {
resultDto.setStatus(-1);
......@@ -118,4 +118,38 @@ public class IpControlloer {
}
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 {
public ResultDto bindShop(Principal principal, @RequestBody ShopRequestDto shopRequestDto) {
ResultDto resultDto = new ResultDto();
try {
shopService.bindShop(principal.getName(), shopRequestDto.getShopId(), shopRequestDto.getIpAddr());
shopService.bindShop(principal.getName(), shopRequestDto);
resultDto.setStatus(0);
}catch (ClientRequestException e) {
resultDto.setStatus(-1);
......@@ -131,7 +131,7 @@ public class ShopController {
public ResultDto unBindShop(Principal principal, @RequestBody ShopRequestDto shopRequestDto) {
ResultDto resultDto = new ResultDto();
try {
shopService.unBindShop(principal.getName(), shopRequestDto.getShopId(), shopRequestDto.getIpAddr());
shopService.unBindShop(principal.getName(), shopRequestDto);
resultDto.setStatus(0);
}catch (ClientRequestException e) {
resultDto.setStatus(-1);
......
......@@ -19,7 +19,7 @@ public class IpResource {
private Vendor vendor;
private String region;
private String regionCn;
//0:正常, 1:已过期, 2:即将过期, 3:正在分配
//0:正常, 1:已过期, 2:即将过期, 3:正在分配, 4:未使用, 5:已失效;
private int status;
private List<String> port;
private long purchasedTime;
......
......@@ -6,7 +6,7 @@ package com.edgec.browserbackend.browser.domain;
* @CreateTime 2020/3/12 4:01 下午
**/
public enum Vendor {
aliyun("阿里云"), JDCLOUD("京东云"), aws("亚马逊云"), awscn("亚马逊中国"), tencent("腾讯云");
aliyun("阿里云"), JDCLOUD("京东云"), aws("亚马逊云"), awscn("亚马逊中国"), tencent("腾讯云"), local("本地");
private String value;
......
......@@ -11,6 +11,7 @@ public class IpResourceDto {
private String addr;
private Vendor vendor;
private String region;
//0:正常, 1:已过期, 2:即将过期, 3:正在分配, 4:未使用
private int status;
private List<String> port;
private long purchasedTIme;
......
......@@ -34,6 +34,8 @@ public class IpResourceRequestDto {
private List<String> addr = new ArrayList<>();
private List<String> ipId = new ArrayList<>();
public String getName() {
return name;
}
......@@ -165,4 +167,12 @@ public class IpResourceRequestDto {
public void setRegionCn(String 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 {
private String ipAddr;
private String ipId;
private String group;
private String toGroup;
......@@ -116,4 +118,12 @@ public class ShopRequestDto {
public void setShopId(String 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;
import java.util.List;
public interface IpResourceRepository extends MongoRepository<IpResource, String> {
IpResource findByAddr(String addr);
IpResource findByAddrAndIsDeleted(String addr, boolean isDeleted);
IpResource findByIdAndIsDeleted(String id, 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> findByOwnerAndStatusAndIsDeletedAndShopIdIsNull(String owner, int status, boolean isDeleted);
List<IpResource> findByStatusAndIdInAndIsDeleted(int status, List<String> ipIds, boolean isDeleted);
......
......@@ -31,6 +31,7 @@ import org.springframework.web.client.RestTemplate;
import java.io.File;
import java.time.Instant;
import java.time.ZoneOffset;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
......@@ -192,13 +193,20 @@ public class IpResourceServiceImpl implements IpResourceService {
for (int i = 0; i < ipResourceRequestDto.getAmount(); i++) {
IpResource ipResource = new IpResource();
ipResource.setAddr("");
ipResource.setIpType(IpType.VENDOR);
if (!ipResourceRequestDto.getVendor().equals("local")) {
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.setValidTime(Instant.now().plusSeconds(3600*24*30).toEpochMilli());
ipResource.setPort(port);
ipResource.setVendor(Vendor.valueOf(ipResourceRequestDto.getVendor()));
ipResource.setStatus(3);
ipResource.setUsername(USERNAME);
if (account.getParent() != null)
ipResource.setUserParent(account.getParent());
......@@ -218,73 +226,78 @@ public class IpResourceServiceImpl implements IpResourceService {
IpTransactionDto ipTransactionDto = new IpTransactionDto(ipTransaction);
ipTransactionDto.setIpResourceDtos(ipResourceDtos);
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, 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 (!ipResourceRequestDto.getVendor().equals("local")) {
CompletableFuture.runAsync(() -> {
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, 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());
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) {
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);
ipTransactionRepository.save(ipTransaction);
} catch (Exception e) {
logger.error(e.getMessage());
}
}, ThreadPoolUtils.taskExecutorPool);
}, ThreadPoolUtils.taskExecutorPool);
} else {
ipTransaction.setStatus(1);
ipTransactionRepository.save(ipTransaction);
}
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 1);
accountService.chargeByMoney(username, newprice * ipChargeRequestDto.getAmount(), ipChargeRequestDto);
......@@ -318,79 +331,144 @@ public class IpResourceServiceImpl implements IpResourceService {
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();
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());
if (ipResourceRequestDto.getAddr() != null && ipResourceRequestDto.getAddr().size() > 0) {
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);
}
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);
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResourceRequestDto, 2);
accountService.chargeByMoney(username, newprice1, ipChargeRequestDto);
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.parse(x.getValidTill()).toEpochMilli());
ipResourceRepository.save(ipResource);
ipOperationResultDto.getSuccessList().add(x.getIp());
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli());
ipResourceRepository.save(ipResource);
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;
}
@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;
Account account = accountRepository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
IpOperationResultDto ipOperationResultDto = new IpOperationResultDto();
ipAddrs.forEach(ipAddr -> {
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipAddr, false);
if (ipResource == null) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
UserShop userShop = null;
if (ipResource.getShopId() != null) {
userShop = userShopRepository.findByUsernameAndShopId(username, ipResource.getShopId());
if (userShop == null) {
if (ipResourceRequestDto.getAddr() != null && ipResourceRequestDto.getAddr().size() > 0) {
ipResourceRequestDto.getAddr().forEach(ipAddr -> {
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipAddr, false);
if (ipResource == null) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
} else if (!ipResource.getOwner().equals(username)) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
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);
UserShop userShop = null;
if (ipResource.getShopId() != null) {
userShop = userShopRepository.findByUsernameAndShopId(username, ipResource.getShopId());
if (userShop == null) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
} else if (!ipResource.getOwner().equals(username)) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
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);
ipResourceRepository.save(ipResource);
if (userShop != null){
......@@ -404,13 +482,10 @@ public class IpResourceServiceImpl implements IpResourceService {
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;
}
});
ipOperationResultDto.getSuccessList().add(ipId);
});
}
return ipOperationResultDto;
}
......@@ -459,37 +534,7 @@ public class IpResourceServiceImpl implements IpResourceService {
else if (ipFilterDto != null && StringUtils.isNotBlank(ipFilterDto.getVendor())) {
ipResources1 = ipResourceRepository.findByVendorLikeAndIdInAndIsDeletedOrderByPurchasedTimeDesc(ipFilterDto.getVendor(), allIpIds, false, pageable);
} else {
ipResources.forEach(x -> {
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));
});
ipResources1 = ipResourceRepository.findByIdInAndIsDeleted(allIpIds, false, pageable);
}
if (ipResources1 != null) {
ipResources1.getContent().forEach(x -> {
......@@ -509,7 +554,15 @@ public class IpResourceServiceImpl implements IpResourceService {
ipResourceRepository.save(x);
}
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;
}
else if (x.getValidTime() <= Instant.now().toEpochMilli()) {
......@@ -615,4 +668,33 @@ public class IpResourceServiceImpl implements IpResourceService {
ipSummary.setTotal(unbind.size());
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 {
if (shop == null)
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
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);
if (result) {
......@@ -212,7 +215,8 @@ public class ShopServiceImpl implements ShopService {
}
@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);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
......@@ -224,14 +228,21 @@ public class ShopServiceImpl implements ShopService {
Shop shop = shopRepository.findById(shopId).orElse(null);
if (shop == null)
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) {
unBindShop(username, shopId, shop.getIp());
unBindShop(username, shopRequestDto);
}
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipAddr, false);
if (ipResource == null)
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
try {
shop.setIp(ipAddr);
shop.setIp(ipResource.getAddr());
shop.setIpId(ipResource.getId());
shop.setIpRegion(ipResource.getRegion());
shopRepository.save(shop);
......@@ -250,7 +261,10 @@ public class ShopServiceImpl implements ShopService {
}
@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);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
......@@ -262,10 +276,15 @@ public class ShopServiceImpl implements ShopService {
Shop shop = shopRepository.findById(shopId).orElse(null);
if (shop == null)
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)
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
if (!ipAddr.equals(shop.getIp()))
if (!ipResource.getId().equals(shop.getIpId()))
throw new ClientRequestException(BrowserErrorCode.IPNOTBINDTOSHOP);
try {
shop.setIp(null);
......
......@@ -11,7 +11,7 @@ public interface IpResourceService {
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);
......@@ -24,4 +24,8 @@ public interface IpResourceService {
IpTransactionDto queryTransaction(String username, String transactionId);
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;
import com.edgec.browserbackend.browser.domain.ShopSummary;
import com.edgec.browserbackend.browser.dto.ShopFilterDto;
import com.edgec.browserbackend.browser.dto.ShopPageResultDto;
import com.edgec.browserbackend.browser.dto.ShopRequestDto;
import com.edgec.browserbackend.browser.dto.ShopResultDto;
import org.springframework.web.multipart.MultipartFile;
......@@ -20,9 +21,9 @@ public interface ShopService {
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);
......
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