Commit 2a7e3083 authored by Administrator's avatar Administrator

Merge branch 'staging' into 'master'

Staging

See merge request !147
parents 3b419262 3d9a0c0f
package com.edgec.browserbackend.account.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@NoArgsConstructor
@Getter
@Setter
@Document(collection = "accounts")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Account {
/**
* 账户id
*/
@Id
private String name;
/**
* 父账户
*/
private String parent;
//子用户使用
/**
* 子用户使用的密码
*/
private String password;
private Date lastSeen;
......@@ -44,6 +58,13 @@ public class Account {
private boolean allowedToCreateSubUser = false;
/**
* 操作与权重
* <p>
* 下载 cookie:1
* 上传 cookie:2
* 店铺管理(增删改店铺、绑定与解绑ip):4
*/
private int permission = -1;
private Promotion promotion;
......@@ -64,24 +85,8 @@ public class Account {
private List<String> queryIpUrlList = new ArrayList<>();
public Date getSignupDate() {
return signupDate;
}
public void setSignupDate(Date signupDate) {
this.signupDate = signupDate;
}
public boolean isPrePaid() {
return isPrePaid;
}
public void setPrePaid(boolean prePaid) {
isPrePaid = prePaid;
}
public Account() {
}
@Length(min = 0, max = 20000)
private String note;
public Account(AccountDto account) {
this.setName(account.getName());
......@@ -94,191 +99,5 @@ public class Account {
this.setWhiteList(account.getWhiteList());
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Length(min = 0, max = 20000)
private String note;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getLastSeen() {
return lastSeen;
}
public void setLastSeen(Date lastSeen) {
this.lastSeen = lastSeen;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
public boolean isAllowedToCreateSubUser() {
return allowedToCreateSubUser;
}
public void setAllowedToCreateSubUser(boolean allowedToCreateSubUser) {
this.allowedToCreateSubUser = allowedToCreateSubUser;
}
public String getLockReason() {
return lockReason;
}
public void setLockReason(String lockReason) {
this.lockReason = lockReason;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public int getPermission() {
return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
public List<String> getWhiteList() {
return whiteList;
}
public void setWhiteList(List<String> whiteList) {
this.whiteList = whiteList;
}
public int getChildCount() {
return childCount;
}
public void setChildCount(int childCount) {
this.childCount = childCount;
}
public int getGroupCount() {
return groupCount;
}
public void setGroupCount(int groupCount) {
this.groupCount = groupCount;
}
public int getShopCount() {
return shopCount;
}
public void setShopCount(int shopCount) {
this.shopCount = shopCount;
}
public Promotion getPromotion() {
return promotion;
}
public void setPromotion(Promotion promotion) {
this.promotion = promotion;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public List<String> getQueryIpUrlList() {
return queryIpUrlList;
}
public void setQueryIpUrlList(List<String> queryIpUrlList) {
this.queryIpUrlList = queryIpUrlList;
}
public int getAuthorized() {
return authorized;
}
public void setAuthorized(int authorized) {
this.authorized = authorized;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPromotionCode() {
return promotionCode;
}
public void setPromotionCode(String promotionCode) {
this.promotionCode = promotionCode;
}
}
package com.edgec.browserbackend.account.repository;
import com.edgec.browserbackend.account.domain.Account;
import com.edgec.browserbackend.browser.dto.PageInfo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
......@@ -9,11 +8,12 @@ import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@Repository
public interface AccountRepository extends MongoRepository<Account, String>, AccountRepositoryCustom {
Account findByName(String name);
Optional<Account> findByName(String name);
Account findByEmail(String email);
......@@ -37,6 +37,7 @@ public interface AccountRepository extends MongoRepository<Account, String>, Acc
Page<Account> findAllBySignupDateBetweenAndParentIsNullAndAuthorized(Pageable pageable, Date startDate, Date endDate, int authorized);
@Override
Page<Account> findAll(Pageable pageable);
List<Account> findByNameIn(List<String> names);
......
......@@ -62,7 +62,7 @@ public class AccountServiceImpl implements AccountService {
private PreOrderRepository preOrderRepository;
@Autowired
private AccountRepository repository;
private AccountRepository accountRepository;
@Autowired
private EmailService emailService;
......@@ -116,7 +116,7 @@ public class AccountServiceImpl implements AccountService {
list.addUserBill(userBilling);
result.add(list);
List<Account> children = repository.findByParent(name);
List<Account> children = accountRepository.findByParent(name);
if (children != null && children.size() > 0) {
List<String> collect = children.stream().map(x -> x.getName()).collect(Collectors.toList());
List<UserBilling> childrenBills = billingRepository.findByUsernameInAndYearAndMonthOrderByYearDescMonthDesc(collect, userBilling.getYear(), userBilling.getMonth());
......@@ -147,9 +147,8 @@ public class AccountServiceImpl implements AccountService {
@Override
public PrePaidBillingPageResultDto getUserPrePaidBills(String name, UserPrePaidBillingRequestDto userPrePaidBillingRequestDto) {
Account account = repository.findByName(name);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
Account account = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (userPrePaidBillingRequestDto.getAmount() > 100)
userPrePaidBillingRequestDto.setAmount(100);
......@@ -191,7 +190,7 @@ public class AccountServiceImpl implements AccountService {
charge.setApprovedAmount(0);
charge.setSuccess(true);
Account account = repository.findByName(name);
Account account = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account != null) {
UserBalance userBalance = userBalanceRepository.findById(name).orElse(null);
if (userBalance == null) {
......@@ -260,7 +259,7 @@ public class AccountServiceImpl implements AccountService {
CompletableFuture.runAsync(() -> {
precharge.setApprovedAmount(0);
precharge.setSuccess(false);
Account account = repository.findByName(name);
Account account = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account != null) {
UserBalance userBalance = userBalanceRepository.findById(name).orElse(null);
float balance = 0;
......@@ -285,7 +284,7 @@ public class AccountServiceImpl implements AccountService {
CompletableFuture.runAsync(() -> {
precharge.setApprovedAmount(0);
precharge.setSuccess(false);
Account account = repository.findByName(name);
Account account = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account != null) {
UserBalance userBalance = userBalanceRepository.findById(name).orElse(null);
float balance = 0;
......@@ -309,10 +308,7 @@ public class AccountServiceImpl implements AccountService {
@Override
public Account findByName(String accountName) {
Assert.hasLength(accountName);
Account account = repository.findByName(accountName);
if (account == null) {
return null;
}
Account account = accountRepository.findByName(accountName).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (StringUtils.isEmpty(account.getParent())) {
account.setPermission(15);
account.setAllowedToCreateSubUser(true);
......@@ -341,7 +337,7 @@ public class AccountServiceImpl implements AccountService {
current.setAllowedToCreateSubUser(true);
}
List<Account> child = repository.findByParent(name);
List<Account> child = accountRepository.findByParent(name);
if (child != null && child.size() > 0) {
List<AccountDto> childDto = child.stream().map(item -> new AccountDto(item)).collect(Collectors.toList());
current.setChild(childDto);
......@@ -367,9 +363,9 @@ public class AccountServiceImpl implements AccountService {
current.setWhiteList(whiteList);
if (account.getPromotion() != null) {
int invitedUsers = repository.countByPromotionCodeAndParentIsNull(account.getPromotion().getCode());
int invitedUsers = accountRepository.countByPromotionCodeAndParentIsNull(account.getPromotion().getCode());
String code = account.getPromotion().getCode();
List<Account> promotes = repository.findByPromotionCodeAndParentIsNull(code);
List<Account> promotes = accountRepository.findByPromotionCodeAndParentIsNull(code);
double totalCommission = 0;
totalCommission = 0;
for (Account promote : promotes) {
......@@ -381,7 +377,7 @@ public class AccountServiceImpl implements AccountService {
account.getPromotion().setCommission((int) totalCommission);
account.getPromotion().setInvitedUsers(invitedUsers);
repository.save(account);
accountRepository.save(account);
}
resultDto.setStatus(0);
......@@ -402,7 +398,7 @@ public class AccountServiceImpl implements AccountService {
@Override
public void deleteByName(String name) {
userService.deleteUser(name);
repository.deleteById(name);
accountRepository.deleteById(name);
}
/**
......@@ -416,34 +412,34 @@ public class AccountServiceImpl implements AccountService {
@Override
public void deleteSub(String parent, String child) {
Assert.hasText(parent);
Account childAccount = repository.findByName(child);
if (childAccount == null || !parent.equals(childAccount.getParent())) {
Account childAccount = accountRepository.findByName(child).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (!parent.equals(childAccount.getParent())) {
throw new ClientRequestException(AccountErrorCode.UNKNOWN, "Invalid Request");
}
userService.deleteUser(child);
repository.delete(childAccount);
Account parentAccount = repository.findByName(parent);
accountRepository.delete(childAccount);
Account parentAccount = accountRepository.findByName(parent).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
parentAccount.setChildCount(parentAccount.getChildCount() - 1);
repository.save(parentAccount);
accountRepository.save(parentAccount);
}
@Override
public Account createWithSms(User user) {
Account existing = repository.findByName(user.getUsername());
Account existing = accountRepository.findByName(user.getUsername()).orElse(null);
if (existing != null)
throw new ClientRequestException(AccountErrorCode.NAMEEXIST, "account already exists: " + user.getUsername());
existing = repository.findByPhoneNumber(user.getUsername());
existing = accountRepository.findByPhoneNumber(user.getUsername());
if (existing != null)
throw new ClientRequestException(AccountErrorCode.NAMEEXIST, "account already exists: " + user.getUsername());
existing = repository.findByPhoneNumber(user.getPhone());
existing = accountRepository.findByPhoneNumber(user.getPhone());
if (existing != null)
throw new ClientRequestException(AccountErrorCode.PHONEEXIST, "phone number already exists: " + user.getPhone());
existing = repository.findByName(user.getPhone());
existing = accountRepository.findByName(user.getPhone()).orElse(null);
if (existing != null)
throw new ClientRequestException(AccountErrorCode.PHONEEXIST, "phone number already exists: " + user.getPhone());
......@@ -469,17 +465,17 @@ public class AccountServiceImpl implements AccountService {
account.setPromotionCode(user.getPromotionCode());
}
Account inviter = repository.findByPromotion(user.getPromotionCode());
Account inviter = accountRepository.findByPromotion(user.getPromotionCode());
if (inviter != null) {
inviter.getPromotion().setInvitedUsers(inviter.getPromotion().getInvitedUsers() + 1);
repository.save(inviter);
accountRepository.save(inviter);
}
Account pExisting = null;
String random = null;
do {
random = String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
pExisting = repository.findByPromotion(random);
pExisting = accountRepository.findByPromotion(random);
} while (pExisting != null);
Promotion promotion = new Promotion();
......@@ -497,7 +493,7 @@ public class AccountServiceImpl implements AccountService {
user.setEnabled(true);
userService.create(new com.edgec.browserbackend.auth.domain.User(user));
repository.save(account);
accountRepository.save(account);
JSONObject param = new JSONObject();
param.put("newuser", account.getName());
......@@ -520,15 +516,15 @@ public class AccountServiceImpl implements AccountService {
public Account create(User user, String parentName) {
Account existing = repository.findByName(user.getUsername());
Account existing = accountRepository.findByName(user.getUsername()).orElse(null);
if (existing != null)
throw new ClientRequestException(AccountErrorCode.NAMEEXIST, "account already exists: " + user.getUsername());
existing = repository.findByPhoneNumber(user.getUsername());
existing = accountRepository.findByPhoneNumber(user.getUsername());
if (existing != null)
throw new ClientRequestException(AccountErrorCode.NAMEEXIST, "account already exists: " + user.getUsername());
existing = repository.findByEmail(user.getEmail());
existing = accountRepository.findByEmail(user.getEmail());
if (existing != null)
throw new ClientRequestException(AccountErrorCode.EMAILEXIST, "email already exists: " + user.getEmail());
user.setEnabled(false);
......@@ -550,7 +546,7 @@ public class AccountServiceImpl implements AccountService {
emailService.sendEmailVerification(user.getUsername(), user.getEmail(), user.getVerificationCode());
userService.create(new com.edgec.browserbackend.auth.domain.User(user));
repository.save(account);
accountRepository.save(account);
log.info("new account has been created: " + account.getName());
......@@ -579,7 +575,7 @@ public class AccountServiceImpl implements AccountService {
if (level == -1) {
//find its parent.
String parent = repository.findByName(name).getParent();
String parent = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST)).getParent();
if (StringUtils.isEmpty(parent))
return Arrays.asList();
......@@ -588,7 +584,7 @@ public class AccountServiceImpl implements AccountService {
return Arrays.asList(dto);
}
List<Account> accounts = repository.findByParent(name);
List<Account> accounts = accountRepository.findByParent(name);
if (accounts == null || accounts.size() <= 0)
return new ArrayList<>();
......@@ -617,7 +613,7 @@ public class AccountServiceImpl implements AccountService {
if (amount > 100)
amount = 100;
Pageable pageable = PageRequest.of(page, amount);
Page<Account> accounts = repository.findByParent(name, pageable);
Page<Account> accounts = accountRepository.findByParent(name, pageable);
SubUserPageResultDto subUserPageResultDto = new SubUserPageResultDto();
if (accounts == null || accounts.getNumberOfElements() <= 0)
......@@ -639,7 +635,7 @@ public class AccountServiceImpl implements AccountService {
}
public Account createSub(String name, AccountDto user) {
Account existing = repository.findByName(name);
Account existing = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (existing == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "account does not exist: " + name);
if (!existing.isAllowedToCreateSubUser() && !StringUtils.isEmpty(existing.getParent()))
......@@ -649,23 +645,23 @@ public class AccountServiceImpl implements AccountService {
throw new ClientRequestException(AccountErrorCode.CHILDMAX, "account cannot have more children");
}
existing = repository.findByName(user.getName());
existing = accountRepository.findByName(user.getName()).orElse(null);
if (existing != null)
throw new ClientRequestException(AccountErrorCode.NAMEEXIST, "account already exists: " + user.getName());
if (!StringUtils.isEmpty(user.getEmail())) {
existing = repository.findByEmail(user.getEmail());
existing = accountRepository.findByEmail(user.getEmail());
if (existing != null)
throw new ClientRequestException(AccountErrorCode.EMAILEXIST, "email already exists: " + user.getEmail());
}
if (!StringUtils.isEmpty(user.getPhoneNumber())) {
existing = repository.findByPhoneNumber(user.getPhoneNumber());
existing = accountRepository.findByPhoneNumber(user.getPhoneNumber());
if (existing != null)
throw new ClientRequestException(AccountErrorCode.PHONEEXIST, "phone number already exists: " + user.getEmail());
}
existing = repository.findByPhoneNumber(user.getName());
existing = accountRepository.findByPhoneNumber(user.getName());
if (existing != null) {
throw new ClientRequestException(AccountErrorCode.PHONEEXIST, "phone number already exists: " + user.getEmail());
}
......@@ -687,7 +683,7 @@ public class AccountServiceImpl implements AccountService {
account.setPhoneNumber(user.getPhoneNumber());
account.setEmail(user.getEmail());
account.setParent(name);
repository.save(account);
accountRepository.save(account);
// emailService.sendEmailVerification(user.getUsername(), user.getEmail(), user.getVerificationCode());
......@@ -707,7 +703,7 @@ public class AccountServiceImpl implements AccountService {
@Override
public void createSubUsers(String name, SubUsersRequestDto subUsersRequestDto) {
Account existing = repository.findByName(name);
Account existing = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (existing == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "account does not exist: " + name);
if (!existing.isAllowedToCreateSubUser() && !StringUtils.isEmpty(existing.getParent()))
......@@ -730,7 +726,7 @@ public class AccountServiceImpl implements AccountService {
else
user.setName(existing.getName() + i);
Account child = repository.findByName(user.getName());
Account child = accountRepository.findByName(user.getName()).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (child != null) {
time++;
continue;
......@@ -769,7 +765,7 @@ public class AccountServiceImpl implements AccountService {
account.setWhiteList(whiteList);
String newpassword = Aes.aesEncrypt(password);
account.setPassword(newpassword);
repository.save(account);
accountRepository.save(account);
// emailService.sendEmailVerification(user.getUsername(), user.getEmail(), user.getVerificationCode());
log.info("new account has been created: " + account.getName());
......@@ -777,13 +773,13 @@ public class AccountServiceImpl implements AccountService {
}
existing.setChildCount(count);
repository.save(existing);
accountRepository.save(existing);
}
public Account saveSub(String name, AccountDto user) {
Account childAccount = repository.findByName(user.getName());
if (childAccount == null || !name.equals(childAccount.getParent())) {
Account childAccount = accountRepository.findByName(user.getName()).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (!name.equals(childAccount.getParent())) {
throw new ClientRequestException(AccountErrorCode.UNKNOWN, "Invalid Request");
}
childAccount.setAllowedToCreateSubUser(user.isAllowedToCreateSubUser());
......@@ -795,15 +791,15 @@ public class AccountServiceImpl implements AccountService {
if (user.getWhiteList() != null && user.getWhiteList().size() > 0)
whiteList.addAll(user.getWhiteList());
childAccount.setWhiteList(whiteList);
repository.save(childAccount);
accountRepository.save(childAccount);
return childAccount;
}
@Override
public void saveSubUsers(String name, SubUsersRequestDto subUsersRequestDto) {
for (String username : subUsersRequestDto.getUsernames()) {
Account childAccount = repository.findByName(username);
if (childAccount == null || !name.equals(childAccount.getParent())) {
Account childAccount = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (!name.equals(childAccount.getParent())) {
throw new ClientRequestException(AccountErrorCode.UNKNOWN, "Invalid Request");
}
......@@ -828,7 +824,7 @@ public class AccountServiceImpl implements AccountService {
childAccount.setWhiteList(whiteList);
if (org.apache.commons.lang3.StringUtils.isNotBlank(subUsersRequestDto.getPassword()))
childAccount.setPassword(subUsersRequestDto.getPassword());
repository.save(childAccount);
accountRepository.save(childAccount);
}
}
......@@ -839,9 +835,8 @@ public class AccountServiceImpl implements AccountService {
@Override
public Account saveChanges(String name, Account update) {
Account account = repository.findByName(name);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "can't find account with name " + name);
Account account = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "can't find account with name " + name));
String preEmail = account.getEmail();
if (update.getNote() != null)
account.setNote(update.getNote());
......@@ -871,7 +866,7 @@ public class AccountServiceImpl implements AccountService {
log.debug("account {} changes has been saved", name);
if (!org.apache.commons.lang3.StringUtils.equalsIgnoreCase(preEmail, update.getEmail())) {
Account account1 = repository.findByEmail(update.getEmail());
Account account1 = accountRepository.findByEmail(update.getEmail());
if (account1 != null) {
throw new ClientRequestException(AccountErrorCode.EMAILEXIST);
}
......@@ -880,20 +875,19 @@ public class AccountServiceImpl implements AccountService {
newuser.setEmail(update.getEmail());
userService.updateUser(name, new com.edgec.browserbackend.auth.domain.User(newuser));
}
repository.save(account);
accountRepository.save(account);
return account;
}
@Override
public void resetPassword(String username, UserDto user) {
if (user == null)
if (user == null) {
throw new ClientRequestException(AccountErrorCode.NAMEOREMAILNOTEXIST, "Can't find user with name or mail: " + user);
Account account = repository.findByName(user.getUsername());
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMEOREMAILNOTEXIST, "Can't find user with name: " + user);
}
Account account = accountRepository.findByName(user.getUsername()).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMEOREMAILNOTEXIST, "Can't find user with name: " + user));
User newuser = new User();
newuser.setUsername(account.getName());
String code = UUID.randomUUID().toString() + System.currentTimeMillis();
......@@ -906,13 +900,15 @@ public class AccountServiceImpl implements AccountService {
@Override
public UserDto determUsernameOrEmail(String text) {
if (StringUtils.isEmpty(text))
throw new ClientRequestException(AccountErrorCode.NAMEOREMAILNOTEXIST, "Can't find user with name or mail: " + text);
Account account = repository.findByEmail(text);
if (account == null)
account = repository.findByName(text);
if (account == null)
if (StringUtils.isEmpty(text)) {
throw new ClientRequestException(AccountErrorCode.NAMEOREMAILNOTEXIST, "Can't find user with name or mail: " + text);
}
Account account = accountRepository.findByEmail(text);
if (account == null) {
account = accountRepository.findByName(text).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMEOREMAILNOTEXIST, "Can't find user with name or mail: " + text));
}
UserDto user = new UserDto();
user.setEmail(account.getEmail());
user.setUsername(account.getName());
......@@ -931,7 +927,7 @@ public class AccountServiceImpl implements AccountService {
throw new ClientRequestException(AccountErrorCode.OTPWRONG, AccountErrorCode.OTPWRONG.getReason());
}
Account account = repository.findById(user.getUsername()).orElse(null);
Account account = accountRepository.findById(user.getUsername()).orElse(null);
if (account == null)
throw new ClientRequestException(AccountErrorCode.PHONENOTEXIST, "Can't find account with phone " + user.getPhone());
......@@ -963,7 +959,7 @@ public class AccountServiceImpl implements AccountService {
@Override
public AccountDto getAccountByCellphone(String cellphone) {
Account account = repository.findByPhoneNumber(cellphone);
Account account = accountRepository.findByPhoneNumber(cellphone);
if (account == null) {
return null;
}
......@@ -1022,7 +1018,7 @@ public class AccountServiceImpl implements AccountService {
@Override
public Page<Account> listAccountBySingupDate(Pageable pageable, Date beginDate, Date endDate) {
return repository.findAllBySignupDateBetween(pageable, beginDate, endDate);
return accountRepository.findAllBySignupDateBetween(pageable, beginDate, endDate);
}
@Override
......@@ -1070,9 +1066,9 @@ public class AccountServiceImpl implements AccountService {
@Override
public void updateUserToken(String username, String token) {
Account byName = repository.findByName(username);
Account byName = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
byName.setToken(token);
repository.save(byName);
accountRepository.save(byName);
}
@Override
......@@ -1087,9 +1083,8 @@ public class AccountServiceImpl implements AccountService {
throw new ClientRequestException(BrowserErrorCode.COMPANYAUTHORIZEEXIST);
}
try {
Account account = repository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
companyLicenseId = companyAuthorizeRepository.saveFile(companyAuthorizeDto.getCompanyLicense(), "companyLicense-" + username);
coporationLicenseFront = companyAuthorizeRepository.saveFile(companyAuthorizeDto.getCoporationLicense_front(), "coporationLicense-front-" + username);
......@@ -1111,7 +1106,7 @@ public class AccountServiceImpl implements AccountService {
}
companyAuthorizeRepository.save(companyAuthorize);
account.setAuthorized(1);
repository.save(account);
accountRepository.save(account);
} catch (Exception e) {
if (agencyBack != null)
companyAuthorizeRepository.deleteFile(agencyBack);
......@@ -1172,18 +1167,17 @@ public class AccountServiceImpl implements AccountService {
@Override
public boolean setAuthorize(String username, boolean isAgree) {
try {
Account account = repository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (isAgree) {
account.setAuthorized(2);
CompanyAuthorize companyAuthorize = companyAuthorizeRepository.findByUsername(username);
account.setCompanyName(companyAuthorize.getCompanyName());
repository.save(account);
accountRepository.save(account);
} else {
account.setAuthorized(3);
account.setCompanyName(null);
repository.save(account);
accountRepository.save(account);
CompanyAuthorize companyAuthorize = companyAuthorizeRepository.findByUsername(username);
if (companyAuthorize != null) {
......
......@@ -75,8 +75,8 @@ public class AdministratorServiceImpl implements AdministratorService {
@Override
public Administrator createAdministrator(Administrator administrator) {
Administrator administrator1 = new Administrator();
if(StringUtils.isEmpty(administrator.getName())){
throw new ClientRequestException(AccountErrorCode.NAMEEMPTY, "userName connot be empty " );
if (StringUtils.isEmpty(administrator.getName())) {
throw new ClientRequestException(AccountErrorCode.NAMEEMPTY, "userName connot be empty ");
}
administrator1.setName(administrator.getName());
......@@ -100,9 +100,7 @@ public class AdministratorServiceImpl implements AdministratorService {
@Override
public Account getAccountByName(String name) {
Account account = accountRepository.findByName(name);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "Username does not exist: " + name);
Account account = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "Username does not exist: " + name));
return account;
}
......@@ -125,10 +123,8 @@ public class AdministratorServiceImpl implements AdministratorService {
@Override
public BillQueryResultDto getUserBillingByName(String name) {
Account account = accountRepository.findByName(name);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByUsernameAndPayMethodIn(name, Arrays.asList(1,2));
Account account = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByUsernameAndPayMethodIn(name, Arrays.asList(1, 2));
double parentexpense = 0;
if (userPrePaidBillings != null)
parentexpense = userPrePaidBillings.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
......@@ -154,7 +150,7 @@ public class AdministratorServiceImpl implements AdministratorService {
List<Account> children = accountRepository.findByParent(account.getName());
if (children != null && children.size() > 0) {
for (Account child : children) {
List<UserPrePaidBilling> userPrePaidBillings_child = userPrePaidBillingRepository.findByUsernameAndPayMethodIn(child.getName(), Arrays.asList(1,2));
List<UserPrePaidBilling> userPrePaidBillings_child = userPrePaidBillingRepository.findByUsernameAndPayMethodIn(child.getName(), Arrays.asList(1, 2));
if (userPrePaidBillings_child != null)
childexpense += userPrePaidBillings_child.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
UserBalance userBalance_child = userBalanceRepository.findById(child.getName()).orElse(null);
......@@ -194,29 +190,27 @@ public class AdministratorServiceImpl implements AdministratorService {
}
@Override
public Account unLockLockedAccount(String name,Account account) {
Account newAccount = accountRepository.findByName(name);
if (newAccount == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "Username does not exist: " + name);
public Account unLockLockedAccount(String name, Account account) {
Account newAccount = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
User newUser = new User();
newUser.setUsername(name);
userService.unlock(new com.edgec.browserbackend.auth.domain.User(newUser),"unlock");
userService.unlock(new com.edgec.browserbackend.auth.domain.User(newUser), "unlock");
return newAccount;
}
@Override
public Account lockAbnormalAccount(String name, Account account) {
Account abnormalAccount = accountRepository.findByName(name);
if (abnormalAccount == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "Username does not exist: " + name);
Account abnormalAccount = accountRepository.findByName(name).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
abnormalAccount.setLockReason(account.getLockReason());
User abnormalUser = new User();
abnormalUser.setUsername(name);
userService.lock(new com.edgec.browserbackend.auth.domain.User(abnormalUser),"lock");
userService.lock(new com.edgec.browserbackend.auth.domain.User(abnormalUser), "lock");
accountRepository.save(abnormalAccount);
......@@ -237,7 +231,7 @@ public class AdministratorServiceImpl implements AdministratorService {
}
@Override
public Page<Account> searchCreateAccountBetween(Pageable pageable, String strDate1, String strDate2, int isAuthorized ) {
public Page<Account> searchCreateAccountBetween(Pageable pageable, String strDate1, String strDate2, int isAuthorized) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Page<Account> accounts = null;
try {
......@@ -247,14 +241,15 @@ public class AdministratorServiceImpl implements AdministratorService {
accounts = accountRepository.findAllBySignupDateBetweenAndParentIsNull(pageable, dateTime1, dateTime2);
else
accounts = accountRepository.findAllBySignupDateBetweenAndParentIsNullAndAuthorized(pageable, dateTime1, dateTime2, isAuthorized);
}catch (ParseException e){
} catch (ParseException e) {
e.printStackTrace();
}
return accounts;
}
@Override
public void deleteAdministrator( String name) {
public void deleteAdministrator(String name) {
Administrator administrator = administratorRepository.findByName(name);
if (administrator == null) {
throw new ClientRequestException(AccountErrorCode.UNKNOWN, "Invalid Request");
......@@ -294,7 +289,8 @@ public class AdministratorServiceImpl implements AdministratorService {
companyEarningsDto.setTotalBillingCost(userPrePaidBilling.getTotal());
companyEarningsDto.setPayStatus(userPrePaidBilling.getStatus());
Account account = accountRepository.findByName(userPrePaidBilling.getUsername());
Account account = accountRepository.findByName(userPrePaidBilling.getUsername())
.orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
companyEarningsDto.setCompanyShouldEarning(userPrePaidBilling.getTotal());
......@@ -340,8 +336,8 @@ public class AdministratorServiceImpl implements AdministratorService {
@Override
public boolean userbillingTransfer() {
List<UserBilling> userBillings = userBillingRepository.findByUsername("51tou");
userBillings.forEach(x ->{
generateUserPrePaidBillingByUserBilling(x);
userBillings.forEach(x -> {
generateUserPrePaidBillingByUserBilling(x);
});
return true;
}
......@@ -369,7 +365,7 @@ public class AdministratorServiceImpl implements AdministratorService {
@Override
public void addPromotionCode(String username, String promotionCode) {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
account.setPromotionCode(promotionCode);
......@@ -414,7 +410,7 @@ public class AdministratorServiceImpl implements AdministratorService {
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
Account account = null;
if (!StringUtils.isBlank(username))
account = accountRepository.findByName(username);
account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
else account = accountRepository.findByPromotion(promotionCode);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
......@@ -444,11 +440,11 @@ public class AdministratorServiceImpl implements AdministratorService {
if (accounts != null && accounts.size() > 0) {
accounts.forEach(x -> {
promotion.setInvitedUsers(promotion.getInvitedUsers() + 1);
List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByAdministratorAndPayMethodInAndTimestampBetween(x.getName(), Arrays.asList(1,2,3), dateTime1.getTime(), dateTime2.getTime());
List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByAdministratorAndPayMethodInAndTimestampBetween(x.getName(), Arrays.asList(1, 2, 3), dateTime1.getTime(), dateTime2.getTime());
double totalCommission = 0;
if (userPrePaidBillings != null && userPrePaidBillings.size() > 0)
totalCommission = userPrePaidBillings.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
promotion.setTotalCommission(promotion.getTotalCommission() + (int)totalCommission);
promotion.setTotalCommission(promotion.getTotalCommission() + (int) totalCommission);
promotion.setCommission(promotion.getCommission() + x.getPromotion().getCommission());
double secondCommission = 0;
ipCount.addAndGet(ipResourceRepository.countAllByOwnerAndIsDeletedAndValidTimeGreaterThan(x.getName(), false, Instant.now().toEpochMilli()));
......@@ -467,7 +463,7 @@ public class AdministratorServiceImpl implements AdministratorService {
ipCount.addAndGet(ipResourceRepository.countAllByOwnerInAndIsDeletedAndValidTimeGreaterThan(secondChildren.stream().map(Account::getName).collect(Collectors.toList()), false, Instant.now().toEpochMilli()));
}
}
List<UserPrePaidBilling> userPrePaidBillings1 = userPrePaidBillingRepository.findByAdministratorAndPayMethodInAndTimestampBetween(secondPromote.getName(), Arrays.asList(1,2,3), dateTime1.getTime(), dateTime2.getTime());
List<UserPrePaidBilling> userPrePaidBillings1 = userPrePaidBillingRepository.findByAdministratorAndPayMethodInAndTimestampBetween(secondPromote.getName(), Arrays.asList(1, 2, 3), dateTime1.getTime(), dateTime2.getTime());
if (userPrePaidBillings1 != null && userPrePaidBillings1.size() > 0)
secondCommission += userPrePaidBillings1.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
}
......@@ -500,7 +496,7 @@ public class AdministratorServiceImpl implements AdministratorService {
@Override
public void addUserWhiteList(String username, String website) {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
account.getWhiteList().add(website);
......@@ -529,7 +525,9 @@ public class AdministratorServiceImpl implements AdministratorService {
if (userBalanceList != null && userBalanceList.size() > 0) {
userBalanceList.forEach(x -> {
UserUsedDto userUsedDto = new UserUsedDto();
Account account = accountRepository.findByName(x.getUsername());
Account account = accountRepository.findByName(x.getUsername())
.orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
userUsedDto.setPromotionCode(account.getPromotionCode());
userUsedDto.setUserBalance(x);
userUsedDtos.add(userUsedDto);
......
......@@ -4,21 +4,18 @@ import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.edgec.browserbackend.account.controller.AccountController;
import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.exception.AccountErrorCode;
import com.edgec.browserbackend.account.repository.*;
import com.edgec.browserbackend.account.service.AccountService;
import com.edgec.browserbackend.account.service.PaymentService;
import com.edgec.browserbackend.account.controller.AccountController;
import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.service.SmsUtils;
import com.edgec.browserbackend.account.service.UserPrePaidBillingService;
import com.edgec.browserbackend.alipay.AlipayConfig;
import com.edgec.browserbackend.alipay.CloudamAlipayConfig;
import com.edgec.browserbackend.alipay.VpsAlipayConfig;
......@@ -32,10 +29,8 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Service;
import javax.swing.text.Document;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.YearMonth;
......@@ -176,12 +171,12 @@ public class PaymentServiceImpl implements PaymentService {
if (chargeType == 0) {
UserPrePaidBilling bill = new UserPrePaidBilling();
Account account = accountRepository.findByName(byTradeNo.getUsername());
Account account = accountRepository.findByName(byTradeNo.getUsername()).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account != null && account.getParent() != null)
bill.setAdministrator(account.getParent());
else
bill.setAdministrator(account.getName());
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ SmsUtils.createRandom(true, 4));
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + SmsUtils.createRandom(true, 4));
bill.setChargeType(0);
bill.setAmount(0);
bill.setUnit(null);
......@@ -308,12 +303,12 @@ public class PaymentServiceImpl implements PaymentService {
if (chargeType == 0) {
UserPrePaidBilling bill = new UserPrePaidBilling();
Account account = accountRepository.findByName(byTradeNo.getUsername());
Account account = accountRepository.findByName(byTradeNo.getUsername()).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account != null && account.getParent() != null)
bill.setAdministrator(account.getParent());
else
bill.setAdministrator(account.getName());
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ SmsUtils.createRandom(true, 4));
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + SmsUtils.createRandom(true, 4));
bill.setChargeType(0);
bill.setAmount(0);
bill.setUnit(null);
......@@ -365,7 +360,7 @@ public class PaymentServiceImpl implements PaymentService {
public String alipayPutPayOrder(String username, int amount, String by) {
Account byName = accountService.findByName(username);
if (byName == null )
if (byName == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "account does not exist: " + username);
if (byName.getPermission() < 4)
throw new ClientRequestException(AccountErrorCode.NOPERMISSION, "account does not have permission: " + username);
......@@ -483,12 +478,12 @@ public class PaymentServiceImpl implements PaymentService {
UserBalance userBalance = userBalanceRepository.findById(username).orElse(null);
UserPrePaidBilling bill = new UserPrePaidBilling();
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account != null && account.getParent() != null)
bill.setAdministrator(account.getParent());
else
bill.setAdministrator(account.getName());
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ SmsUtils.createRandom(true, 4));
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + SmsUtils.createRandom(true, 4));
bill.setChargeType(0);
bill.setAmount(0);
bill.setUnit(null);
......@@ -645,7 +640,7 @@ public class PaymentServiceImpl implements PaymentService {
if (response == null)
throw new ClientRequestException(BrowserErrorCode.UNKNOWN);
if(response.isSuccess()){
if (response.isSuccess()) {
internalOrder.setSucceed(true);
userWithdrawRepository.save(internalOrder);
......@@ -654,7 +649,7 @@ public class PaymentServiceImpl implements PaymentService {
bill.setAdministrator(byName.getParent());
else
bill.setAdministrator(byName.getName());
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+ SmsUtils.createRandom(true, 4));
bill.setTradeNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + SmsUtils.createRandom(true, 4));
bill.setChargeType(4);
bill.setAmount(0);
bill.setUnit(null);
......@@ -675,7 +670,7 @@ public class PaymentServiceImpl implements PaymentService {
userPrePaidBillingRepository.save(bill);
return true;
}else{
} else {
byName.getPromotion().setAllGift(byName.getPromotion().getAllGift() + amount);
byName.getPromotion().setWithdrawn(byName.getPromotion().getWithdrawn() - amount);
accountRepository.save(byName);
......
......@@ -2,9 +2,11 @@ package com.edgec.browserbackend.account.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.exception.AccountErrorCode;
import com.edgec.browserbackend.account.repository.AccountRepository;
import com.edgec.browserbackend.account.repository.UserLackMoneyRepository;
import com.edgec.browserbackend.account.service.UserLackMoneyService;
import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.commons.utils.SmsUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -28,9 +30,9 @@ public class UserLackMoneyServiceImpl implements UserLackMoneyService {
//用户名,欠费金额,账单Id,账单总数
String username = billings.get(0).getUsername();
float totalUnpaid = billings.stream().filter(x -> x.getStatus() == BillStatus.UNPAID)
.map(x -> x.getTotal() - (x.getDeductionRecords() != null ? (x.getDeductionRecords().stream().collect(Collectors.summingDouble(
DeductionRecord::getDeductionAmount
)).longValue()) : (0))).collect(Collectors.summingDouble(Float::floatValue)).floatValue();
.map(x -> x.getTotal() - (x.getDeductionRecords() != null ? (x.getDeductionRecords().stream().collect(Collectors.summingDouble(
DeductionRecord::getDeductionAmount
)).longValue()) : (0))).collect(Collectors.summingDouble(Float::floatValue)).floatValue();
List<String> ids = billings.stream().filter(x -> x.getStatus() == BillStatus.UNPAID).map(UserPrePaidBilling::getId).collect(Collectors.toList());
int billsAmount = (int) billings.stream().filter(x -> x.getStatus() == BillStatus.UNPAID).count();
......@@ -45,7 +47,7 @@ public class UserLackMoneyServiceImpl implements UserLackMoneyService {
//发送短信提醒
if (totalUnpaid > 0 && ifMessageRemind) {
Account account = repository.findByName(username);
Account account = repository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
String telephone = account.getPhoneNumber();
JSONObject param = new JSONObject();
param.put("billsamount", billsAmount);
......
......@@ -8,13 +8,16 @@ public class AccountServicePool {
private static final int POOL_COUNT = 10;
public static final ExecutorService taskPool = Executors.newFixedThreadPool(POOL_COUNT, new ThreadFactory() {
int count = 1;
public static final ExecutorService taskPool = Executors.newFixedThreadPool(
POOL_COUNT,
new ThreadFactory() {
int count = 1;
@Override
public Thread newThread(Runnable runnable) {
return new Thread(runnable, "account-service-pool" + count++);
}
});
@Override
public Thread newThread(Runnable runnable) {
return new Thread(runnable, "account-service-pool" + count++);
}
}
);
}
......@@ -27,7 +27,7 @@ public class OAuthResponseExceptionTranslator extends DefaultWebResponseExceptio
private ResponseEntity<OAuth2Exception> handleOAuth2Exception(OAuth2Exception e, AuthErrorCode error) throws IOException {
IntelligroupOauthException ex = new IntelligroupOauthException(error.getReason(), error.getReason(), error.getCode());
IntelligroupOauthException ex = new IntelligroupOauthException(error.getReason(), error.getReason(), error.getCode());
int status = e.getHttpErrorCode();
HttpHeaders headers = new HttpHeaders();
headers.set("Cache-Control", "no-store");
......@@ -36,8 +36,7 @@ public class OAuthResponseExceptionTranslator extends DefaultWebResponseExceptio
headers.set("WWW-Authenticate", String.format("%s %s", OAuth2AccessToken.BEARER_TYPE, e.getSummary()));
}
ResponseEntity<OAuth2Exception> response = new ResponseEntity<OAuth2Exception>(ex, headers,
HttpStatus.valueOf(status));
ResponseEntity<OAuth2Exception> response = new ResponseEntity<OAuth2Exception>(ex, headers, HttpStatus.valueOf(status));
return response;
}
......@@ -47,7 +46,7 @@ public class OAuthResponseExceptionTranslator extends DefaultWebResponseExceptio
// Try to extract a SpringSecurityException from the stacktrace
Throwable[] causeChain = throwableAnalyzer.determineCauseChain(e);
Exception ase = (AuthenticationException) throwableAnalyzer.getFirstThrowableOfType(AuthenticationException.class,
Exception ase = (AuthenticationException) throwableAnalyzer.getFirstThrowableOfType(AuthenticationException.class,
causeChain);
if (ase != null) {
AuthErrorCode code = AuthErrorCode.AUTHENTICATION_ERROR;
......
package com.edgec.browserbackend.auth.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
......@@ -13,14 +9,12 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.R
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
private Logger logger = LoggerFactory.getLogger(ResourceServerConfiguration.class);
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/oauth/**").permitAll()
.antMatchers("/shop/**","/ip/**","/group/**","/0xadministrator/**","/user/**","/history/**").authenticated()
.antMatchers("/shop/**", "/ip/**", "/group/**", "/0xadministrator/**", "/user/**", "/history/**").authenticated()
.and()
//关闭跨站请求防护
.csrf().disable();
......
......@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@Deprecated
@ControllerAdvice
public class AuthErrorHandler extends ResponseEntityExceptionHandler {
......
package com.edgec.browserbackend.auth.domain.mongo;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.mongodb.core.mapping.Document;
......@@ -8,6 +11,9 @@ import java.time.Instant;
import java.util.Arrays;
import java.util.Objects;
@NoArgsConstructor
@Getter
@Setter
@Document
public class MongoOAuth2AccessToken {
......@@ -21,8 +27,6 @@ public class MongoOAuth2AccessToken {
private String refreshToken;
private long createdAt;
public MongoOAuth2AccessToken() {
}
@PersistenceConstructor
public MongoOAuth2AccessToken(final String tokenId,
......@@ -42,33 +46,6 @@ public class MongoOAuth2AccessToken {
this.createdAt = Instant.now().toEpochMilli();
}
public String getTokenId() {
return tokenId;
}
public byte[] getToken() {
return token;
}
public String getAuthenticationId() {
return authenticationId;
}
public String getUsername() {
return username;
}
public String getClientId() {
return clientId;
}
public byte[] getAuthentication() {
return authentication;
}
public String getRefreshToken() {
return refreshToken;
}
@Override
public int hashCode() {
......@@ -100,11 +77,4 @@ public class MongoOAuth2AccessToken {
'}';
}
public long getCreatedAt() {
return createdAt;
}
public void setCreatedAt(long createdAt) {
this.createdAt = createdAt;
}
}
package com.edgec.browserbackend.auth.domain.mongo;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
......@@ -9,6 +12,9 @@ import org.springframework.data.mongodb.core.mapping.Document;
import java.time.Instant;
@Getter
@Setter
@NoArgsConstructor
@Document
public class MongoOAuth2RefreshToken {
......@@ -18,8 +24,6 @@ public class MongoOAuth2RefreshToken {
private byte[] authentication;
private long createdAt;
public MongoOAuth2RefreshToken() {
}
@PersistenceConstructor
public MongoOAuth2RefreshToken(final String tokenId,
......@@ -31,18 +35,6 @@ public class MongoOAuth2RefreshToken {
this.createdAt = Instant.now().toEpochMilli();
}
public String getTokenId() {
return tokenId;
}
public byte[] getToken() {
return token;
}
public byte[] getAuthentication() {
return authentication;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
......@@ -75,12 +67,4 @@ public class MongoOAuth2RefreshToken {
.append("authentication", authentication)
.toString();
}
public long getCreatedAt() {
return createdAt;
}
public void setCreatedAt(long createdAt) {
this.createdAt = createdAt;
}
}
......@@ -27,6 +27,9 @@ public class IpControlloer {
@Autowired
private IpResourceService ipResourceService;
/**
* 购买IP资源
*/
@RequestMapping(value = "/buy", method = RequestMethod.POST)
public ResultDto buyIp(Principal principal, @RequestBody IpResourceRequestDto ipResourceRequestDto) {
ResultDto resultDto = new ResultDto();
......@@ -72,6 +75,9 @@ public class IpControlloer {
return resultDto;
}
/**
* 删除指定IP资源
*/
@RequestMapping(value = "/del", method = RequestMethod.POST)
public ResultDto deleteIp(Principal principal, @RequestBody IpResourceRequestDto ipResourceRequestDto) {
ResultDto resultDto = new ResultDto();
......
......@@ -34,7 +34,7 @@ public class ShopController {
@Autowired
private IpAndShopService ipAndShopService;
@RequestMapping(value = "/add", method = RequestMethod.POST)
@PostMapping("/add")
public ResultDto addShop(Principal principal, @RequestBody ShopResultDto shopResultDto) {
ResultDto resultDto = new ResultDto();
try {
......@@ -48,7 +48,7 @@ public class ShopController {
return resultDto;
}
@RequestMapping(value = "/multiadd", method = RequestMethod.POST)
@PostMapping("/multiadd")
public ResultDto addShops(Principal principal, @RequestParam("file") MultipartFile file) {
ResultDto resultDto = new ResultDto();
String name = file.getOriginalFilename();
......@@ -123,6 +123,9 @@ public class ShopController {
return resultDto;
}
/**
* 移动店铺 到 分组
*/
@RequestMapping(value = "/transfer", method = RequestMethod.POST)
public ResultDto transferShop(Principal principal, @RequestBody ShopRequestDto shopRequestDto) {
ResultDto resultDto = new ResultDto();
......
package com.edgec.browserbackend.browser.domain;
import java.io.Serializable;
import java.util.StringTokenizer;
import lombok.Data;
public class BindHistory {
@Data
public class BindHistory {
private String shopName;
private String ip;
private String platform;
private String unbindTime;
public BindHistory(){
}
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public String getIp() {
return ip;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public String getPlatform() {
return platform;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getUnbindTime() {
return unbindTime;
}
public void setUnbindTime(String unbindTime) {
this.unbindTime = unbindTime;
}
}
package com.edgec.browserbackend.browser.domain;
import org.apache.commons.lang3.StringUtils;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.util.StringUtils;
import java.util.List;
@Getter
@Setter
@Document(collection = "groups")
public class Group {
/**
* 组 id
*/
@Id
private String id;
/**
* 组名
*/
private String name;
/**
* 组创建者
*/
private String owner;
/**
* 组详情
*/
private String details;
public void of(Group group){
if (StringUtils.isNotBlank(group.getId()))
public void of(Group group) {
if (!StringUtils.isEmpty(group.getId())) {
this.setId(group.getId());
if (StringUtils.isNotBlank(group.getOwner()))
this.setOwner(group.getOwner());
if (StringUtils.isNotBlank(group.getDetails()))
this.setDetails(group.getDetails());
if (StringUtils.isNotBlank(group.getName()))
this.setName(group.getName());
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
if (!StringUtils.isEmpty(group.getOwner())) {
this.setOwner(group.getOwner());
}
public String getDetails() {
return details;
}
if (!StringUtils.isEmpty(group.getDetails())) {
this.setDetails(group.getDetails());
}
public void setDetails(String details) {
this.details = details;
if (!StringUtils.isEmpty(group.getName())) {
this.setName(group.getName());
}
}
}
package com.edgec.browserbackend.browser.domain;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
@Data
@Document(collection = "ipcountrecord")
public class IpCountRecord {
private String username;
private long timestamp;
private long ip_using;
private long ip_all;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public long getIp_all() {
return ip_all;
}
public void setIp_all(long ip_all) {
this.ip_all = ip_all;
}
public long getIp_using() {
return ip_using;
}
private String username;
public void setIp_using(long ip_using) {
this.ip_using = ip_using;
}
private long timestamp;
public long getTimestamp() {
return timestamp;
}
private long ip_using;
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
private long ip_all;
}
package com.edgec.browserbackend.browser.domain;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
......@@ -11,6 +13,9 @@ import java.util.Map;
* @Author jason
* @CreateTime 2020/3/12 10:30 上午
**/
@Getter
@Setter
@Document("ipOptions")
public class IpOptions {
......@@ -21,39 +26,9 @@ public class IpOptions {
private Map<String, List<String>> ipPlatForm;
private Map<String, Map<String, List<String>>> supportedPlatForm;
private Map<String, Map<String, List<String>>> supportedPlatForm;
private List<String> ipDurations;
public List<String> getIpDurations() {
return ipDurations;
}
public void setIpDurations(List<String> ipDurations) {
this.ipDurations = ipDurations;
}
public Map<String, List<String>> getIpPlatForm() {
return ipPlatForm;
}
public void setIpPlatForm(Map<String, List<String>> ipPlatForm) {
this.ipPlatForm = ipPlatForm;
}
public Map<String, List<String>> getIpRegion() {
return ipRegion;
}
public void setIpRegion(Map<String, List<String>> ipRegion) {
this.ipRegion = ipRegion;
}
public Map<String, Map<String, List<String>>> getSupportedPlatForm() {
return supportedPlatForm;
}
public void setSupportedPlatForm(Map<String, Map<String, List<String>>> supportedPlatForm) {
this.supportedPlatForm = supportedPlatForm;
}
}
package com.edgec.browserbackend.browser.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
......@@ -9,6 +12,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Getter
@Setter
@NoArgsConstructor
@Document(collection = "ipresource")
@JsonIgnoreProperties(ignoreUnknown = true)
public class IpResource implements Serializable {
......@@ -53,270 +59,14 @@ public class IpResource implements Serializable {
private String unit;
private int period;
public IpResource() {
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public String getRegionCn() {
return regionCn;
}
public void setRegionCn(String regionCn) {
this.regionCn = regionCn;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public IpType getIpType() {
return ipType;
}
public void setIpType(IpType ipType) {
this.ipType = ipType;
}
public List<BindHistory> getBindHistory() {
return bindHistory;
}
public void setBindHistory(List<BindHistory> bindHistory) {
this.bindHistory = bindHistory;
}
public long getPurchasedTime() {
return purchasedTime;
}
public void setPurchasedTime(long purchasedTime) {
this.purchasedTime = purchasedTime;
}
public long getValidTime() {
return validTime;
}
public void setValidTime(long validTime) {
this.validTime = validTime;
}
public Vendor getVendor() {
return vendor;
}
public void setVendor(Vendor vendor) {
this.vendor = vendor;
}
public boolean isDeleted() {
return isDeleted;
}
public void setDeleted(boolean deleted) {
isDeleted = deleted;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<String> getPort() {
return port;
}
public void setPort(List<String> port) {
this.port = port;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getUserParent() {
return userParent;
}
public void setUserParent(String userParent) {
this.userParent = userParent;
}
public List<String> getProtocol() {
return protocol;
}
public void setProtocol(List<String> protocol) {
this.protocol = protocol;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public boolean isLocked() {
return isLocked;
}
public void setLocked(boolean locked) {
isLocked = locked;
}
public long getLockTimestamp() {
return lockTimestamp;
}
public void setLockTimestamp(long lockTimestamp) {
this.lockTimestamp = lockTimestamp;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public int getPeriod() {
return period;
}
public void setPeriod(int period) {
this.period = period;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public List<String> getShopIds() {
return shopIds;
}
public void setShopIds(List<String> shopIds) {
this.shopIds = shopIds;
}
public String getVendorCn() {
return vendorCn;
}
public void setVendorCn(String vendorCn) {
this.vendorCn = vendorCn;
}
public String getProxyPassword() {
return proxyPassword;
}
public void setProxyPassword(String proxyPassword) {
this.proxyPassword = proxyPassword;
}
public String getProxyUsername() {
return proxyUsername;
}
public void setProxyUsername(String proxyUsername) {
this.proxyUsername = proxyUsername;
}
public boolean isSpecialLine() {
return specialLine;
}
public void setSpecialLine(boolean specialLine) {
this.specialLine = specialLine;
}
public long getHealthLockTimestamp() {
return healthLockTimestamp;
}
public void setHealthLockTimestamp(long healthLockTimestamp) {
this.healthLockTimestamp = healthLockTimestamp;
}
public boolean isUsingSpecialLine() {
return usingSpecialLine;
}
public void setUsingSpecialLine(boolean usingSpecialLine) {
this.usingSpecialLine = usingSpecialLine;
}
public boolean isBind() {
return bind;
}
public void setBind(boolean bind) {
this.bind = bind;
}
public String getShopId() {
return shopId;
}
public void setShopId(String shopId) {
this.shopId = shopId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof IpResource)) return false;
if (this == o) {
return true;
}
if (!(o instanceof IpResource)) {
return false;
}
IpResource that = (IpResource) o;
return Objects.equals(getId(), that.getId());
}
......
package com.edgec.browserbackend.browser.domain;
public class IpSummary {
private int total;
private int unbind;
private int willExpire;
private int expired;
public int getExpired() {
return expired;
}
import lombok.Data;
public void setExpired(int expired) {
this.expired = expired;
}
public int getTotal() {
return total;
}
@Data
public class IpSummary {
public void setTotal(int total) {
this.total = total;
}
/**
* ip 总数
*/
private int total;
public int getUnbind() {
return unbind;
}
/**
* 未绑定 ip 数
*/
private int unbind;
public void setUnbind(int unbind) {
this.unbind = unbind;
}
/**
* 将要过期的 ip 数
*/
private int willExpire;
public int getWillExpire() {
return willExpire;
}
/**
* 已过期的 ip 数
*/
private int expired;
public void setWillExpire(int willExpire) {
this.willExpire = willExpire;
}
}
package com.edgec.browserbackend.browser.domain;
public enum IpType {
/**
* 本地ip,即 ip 地址没有设置任何代理
*/
LOCAL,
/**
* ip代理
*/
VENDOR,
/**
* 自有ip,即该ip不是从我们系统购买的
*/
OWN;
}
package com.edgec.browserbackend.browser.domain;
import com.edgec.browserbackend.browser.dto.OperationHistoryDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
......@@ -8,6 +11,9 @@ import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
@Getter
@Setter
@NoArgsConstructor
@Document(collection = "operationhistory")
public class OperationHistory {
@Id
......@@ -20,89 +26,31 @@ public class OperationHistory {
private long operationTime;
private String administrator;
public OperationHistory() {
}
public OperationHistory(OperationHistoryDto operationHistoryDto) {
if (operationHistoryDto.getAccount() != null)
if (operationHistoryDto.getAccount() != null) {
this.username = operationHistoryDto.getAccount();
if (operationHistoryDto.getNickname() != null)
}
if (operationHistoryDto.getNickname() != null) {
this.nickname = operationHistoryDto.getNickname();
if (operationHistoryDto.getLoginIp() != null)
}
if (operationHistoryDto.getLoginIp() != null) {
this.loginIp = operationHistoryDto.getLoginIp();
if (operationHistoryDto.getLoginPlace() != null)
}
if (operationHistoryDto.getLoginPlace() != null) {
this.loginPlace = operationHistoryDto.getLoginPlace();
if (operationHistoryDto.getOperation() != null)
}
if (operationHistoryDto.getOperation() != null) {
this.operation = operationHistoryDto.getOperation();
}
if (operationHistoryDto.getOperationTime() != null) {
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(operationHistoryDto.getOperationTime(), format);
this.operationTime = localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();
}
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public long getOperationTime() {
return operationTime;
}
public void setOperationTime(long operationTime) {
this.operationTime = operationTime;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public String getLoginPlace() {
return loginPlace;
}
public void setLoginPlace(String loginPlace) {
this.loginPlace = loginPlace;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public String getAdministrator() {
return administrator;
}
public void setAdministrator(String administrator) {
this.administrator = administrator;
}
}
package com.edgec.browserbackend.browser.domain;
import org.springframework.data.annotation.Id;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
import java.util.Map;
/**
......@@ -11,26 +11,13 @@ import java.util.Map;
* @Author jason
* @CreateTime 2020/3/12 11:44 上午
**/
@Getter
@Setter
@Document("platformoptions")
public class PlatformOptions {
private String platform;
private Map<String, String> subPlatform;
public Map<String, String> getSubPlatform() {
return subPlatform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public String getPlatform() {
return platform;
}
public void setSubPlatform(Map<String, String> subPlatform) {
this.subPlatform = subPlatform;
}
}
package com.edgec.browserbackend.browser.domain;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.mongodb.core.mapping.Document;
@Getter
@Setter
@Document(collection = "proxyconfig")
public class ProxyConfig {
private long timestamp;
private String configFileId;
public long getTimestamp() {
return timestamp;
}
public void setConfigFileId(String configFileId) {
this.configFileId = configFileId;
}
public String getConfigFileId() {
return configFileId;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
}
package com.edgec.browserbackend.browser.domain;
import com.alibaba.fastjson.JSONObject;
import com.edgec.browserbackend.browser.dto.ShopResultDto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Getter
@Setter
@NoArgsConstructor
@Document(collection = "shop")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Shop {
/**
* 商铺 id
*/
@Id
private String shopId;
/**
* 商铺名称
*/
private String shopName;
/**
* 商铺拥有者,谁创建谁拥有
*/
private String owner;
/**
* 商铺 id
*/
private TransferStatus transferStatus;
/**
* 商铺url
*/
private String shopUrl;
/**
* 商铺所在的平台
*/
private String shopPlatform;
/**
* 商铺账号
*/
private String shopAccount;
/**
* 商铺密码
*/
private String shopPassword;
/**
* 商铺平台(操作系统 + 浏览器版本)
*/
private String shopUA;
/**
* 商铺的 cookie 信息
*/
private String shopCookie;
/**
* 商铺创建时间
*/
private long createTime;
public Shop(){
/**
* 创建店铺使用
*/
public Shop of(ShopResultDto shopResultDto) {
if (shopResultDto.getShopUrl() != null) {
this.setShopUrl(shopResultDto.getShopUrl());
}
}
if (shopResultDto.getOwner() != null) {
this.setOwner(shopResultDto.getOwner());
}
if (shopResultDto.getShopPlatform() != null) {
this.setShopPlatform(shopResultDto.getShopPlatform());
}
if (shopResultDto.getShopName() != null) {
this.setShopName(shopResultDto.getShopName());
}
if (shopResultDto.getTransferStatus() != null) {
this.setTransferStatus(shopResultDto.getTransferStatus());
}
if (shopResultDto.getShopAccount() != null) {
this.setShopAccount(shopResultDto.getShopAccount());
}
if (shopResultDto.getShopPassword() != null) {
this.setShopPassword(shopResultDto.getShopPassword());
}
if (shopResultDto.getShopUA() != null) {
this.setShopUA(shopResultDto.getShopUA());
}
if (shopResultDto.getShopCookie() != null) {
this.setShopCookie(shopResultDto.getShopCookie());
}
if (shopResultDto.getCreateTime() != 0) {
this.setCreateTime(shopResultDto.getCreateTime());
}
//创建店铺使用
public Shop of(ShopResultDto shop) {
if (shop.getShopUrl() != null)
this.setShopUrl(shop.getShopUrl());
if (shop.getOwner() != null)
this.setOwner(shop.getOwner());
if (shop.getShopPlatform() != null)
this.setShopPlatform(shop.getShopPlatform());
if (shop.getShopName() != null)
this.setShopName(shop.getShopName());
if (shop.getTransferStatus() != null)
this.setTransferStatus(shop.getTransferStatus());
if (shop.getShopAccount() != null)
this.setShopAccount(shop.getShopAccount());
if (shop.getShopPassword() != null)
this.setShopPassword(shop.getShopPassword());
if (shop.getShopUA() != null)
this.setShopUA(shop.getShopUA());
if (shop.getShopCookie() != null)
this.setShopCookie(shop.getShopCookie());
if (shop.getCreateTime() != 0)
this.setCreateTime(shop.getCreateTime());
return this;
}
......@@ -83,95 +139,7 @@ public class Shop {
this.setShopCookie(shop.getShopCookie());
if (shop.getCreateTime() != 0)
this.setCreateTime(shop.getCreateTime());
return this;
}
public String getShopId() {
return shopId;
}
public String getShopUrl() {
return shopUrl;
}
public String getOwner() {
return owner;
}
public String getShopPlatform() {
return shopPlatform;
}
public String getShopName() {
return shopName;
}
public TransferStatus getTransferStatus() {
return transferStatus;
}
public void setShopId(String shopId) {
this.shopId = shopId;
}
public void setShopUrl(String shopUrl) {
this.shopUrl = shopUrl;
}
public void setOwner(String owner) {
this.owner = owner;
}
public void setShopPlatform(String shopPlatform) {
this.shopPlatform = shopPlatform;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public void setTransferStatus(TransferStatus transferStatus) {
this.transferStatus = transferStatus;
}
public String getShopAccount() {
return shopAccount;
}
public void setShopAccount(String shopAccount) {
this.shopAccount = shopAccount;
}
public String getShopPassword() {
return shopPassword;
}
public void setShopPassword(String shopPassword) {
this.shopPassword = shopPassword;
}
public String getShopCookie() {
return shopCookie;
}
public void setShopCookie(String shopCookie) {
this.shopCookie = shopCookie;
}
public String getShopUA() {
return shopUA;
}
public void setShopUA(String shopUA) {
this.shopUA = shopUA;
}
public long getCreateTime() {
return createTime;
}
public void setCreateTime(long createTime) {
this.createTime = createTime;
return this;
}
}
package com.edgec.browserbackend.browser.domain;
public class ShopSummary {
private int total;
private int unbind;
private int willExpire;
private int expired;
public int getExpired() {
return expired;
}
public void setExpired(int expired) {
this.expired = expired;
}
import lombok.Getter;
import lombok.Setter;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
@Getter
@Setter
public class ShopSummary {
public int getUnbind() {
return unbind;
}
/**
* 商铺 总数
*/
private int total;
public void setUnbind(int unbind) {
this.unbind = unbind;
}
/**
* 未绑定商铺数
*/
private int unbind;
public int getWillExpire() {
return willExpire;
}
/**
* 即将过期商铺数
*/
private int willExpire;
public void setWillExpire(int willExpire) {
this.willExpire = willExpire;
}
/**
* 已过期商铺数
*/
private int expired;
}
package com.edgec.browserbackend.browser.domain;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
@Getter
@Setter
@Document("specialline")
public class SpecialLine {
/**
* 专线 id
*/
@Id
private String Id;
/**
* 专线 ip
*/
private String ip;
private List<String> proxyProtocol; //专线使用的协议
private List<String> proxyPort; //专线使用的端口
private String username; //专线代理服务器用户名
private String password; //专线代理服务器密码
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public List<String> getProxyProtocol() {
return proxyProtocol;
}
public void setProxyProtocol(List<String> proxyProtocol) {
this.proxyProtocol = proxyProtocol;
}
public List<String> getProxyPort() {
return proxyPort;
}
public void setProxyPort(List<String> proxyPort) {
this.proxyPort = proxyPort;
}
/**
* 专线使用的协议
*/
private List<String> proxyProtocol;
public String getPassword() {
return password;
}
/**
* 专线使用的端口
*/
private List<String> proxyPort;
public void setPassword(String password) {
this.password = password;
}
/**
* 专线代理服务器用户名
*/
private String username;
public String getUsername() {
return username;
}
/**
* 专线代理服务器密码
*/
private String password;
public void setUsername(String username) {
this.username = username;
}
}
package com.edgec.browserbackend.browser.domain;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
/**
* @author cloudam
* 这是一个中间表,关联 user 、shop、 group 表
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "usershop")
public class UserShop {
......@@ -17,56 +27,13 @@ public class UserShop {
private String groupId;
public UserShop(){
}
public UserShop(String username, String shopId) {
this.username = username;
this.shopId = shopId;
}
public UserShop(String username, String shopId, String groupId) {
this.username = username;
this.shopId = shopId;
this.groupId = groupId;
}
public UserShop(String username, String shopId, String groupId, String ipId) {
this.username = username;
this.shopId = shopId;
this.groupId = groupId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getShopId() {
return shopId;
}
public void setShopId(String shopId) {
this.shopId = shopId;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this(username, shopId);
this.groupId = groupId;
}
}
......@@ -4,13 +4,31 @@ package com.edgec.browserbackend.browser.domain;
* @Desc
* @Author jason
* @CreateTime 2020/3/12 4:01 下午
**/
*/
public enum Vendor {
aliyun("阿里云"), JDCLOUD("京东云"), aws("亚马逊云"), awscn("亚马逊中国"), tencent("腾讯云"), local("本地"), own("自有");
/**
* 本平台提供的代理ip
*/
aliyun("阿里云"),
JDCLOUD("京东云"),
aws("亚马逊云"),
awscn("亚马逊中国"),
tencent("腾讯云"),
/**
* 本地ip,即 ip 地址没有设置任何代理
*/
local("本地"),
/**
* 用户自己已经拥有的代理ip
*/
own("自有");
private String value;
private Vendor(String value) {
Vendor(String value) {
this.value = value;
}
......
package com.edgec.browserbackend.browser.dto;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
@Getter
@Setter
public class IpFilterDto {
String region;
String addr;
String vendor;
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public String getVendor() {
return vendor;
}
public void setVendor(String vendor) {
this.vendor = vendor;
public boolean isEmpty() {
boolean flag = false;
if (StringUtils.isEmpty(region) && StringUtils.isEmpty(addr) && StringUtils.isEmpty(vendor)) {
flag = true;
}
return flag;
}
}
......@@ -2,12 +2,14 @@ package com.edgec.browserbackend.browser.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.ArrayList;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public class IpListRequestDto {
/**
* 1: 全部;  2: 即将过期 ; 3: 已过期; 4: 未绑定; 5: 已分配
*/
private int groupType;
private int page;
private int amount;
private IpFilterDto filter;
......
package com.edgec.browserbackend.browser.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageInfo {
int currentPage;
int totalPages;
int totalItems;
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int totalPage) {
this.totalPages = totalPage;
}
public int getTotalItems() {
return totalItems;
}
public void setTotalItems(int totalItems) {
this.totalItems = totalItems;
}
}
package com.edgec.browserbackend.browser.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class ShopFilterDto {
private String shopName;
......@@ -9,35 +14,11 @@ public class ShopFilterDto {
private String shopAccount;
private int bindIp;
public String getShopAccount() {
return shopAccount;
}
public void setShopAccount(String shopAccount) {
this.shopAccount = shopAccount;
}
public String getIpRegion() {
return IpRegion;
}
public void setIpRegion(String ipRegion) {
IpRegion = ipRegion;
}
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public int getBindIp() {
return bindIp;
}
public void setBindIp(int bindIp) {
this.bindIp = bindIp;
public boolean isEmpty() {
boolean flag = false;
if (StringUtils.isEmpty(shopName) && StringUtils.isEmpty(IpRegion) && StringUtils.isEmpty(shopAccount)) {
flag = true;
}
return flag;
}
}
package com.edgec.browserbackend.browser.dto;
import lombok.Data;
@Data
public class ShopStringResultDto {
String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
......@@ -89,7 +89,7 @@ public class IpResourceRepositoryCustomImpl implements IpResourceRepositoryCusto
MatchOperation match = Aggregation.match(matchCriteria);
SampleOperation sample = Aggregation.sample(100);
SampleOperation sample = Aggregation.sample(20);
AggregationResults<IpResource> results = mongoTemplate.aggregate(Aggregation.newAggregation(match, sample), IpResource.class, IpResource.class);
List<IpResource> mappedResults = results.getMappedResults();
......@@ -113,10 +113,10 @@ public class IpResourceRepositoryCustomImpl implements IpResourceRepositoryCusto
}
@Override
public boolean deleteShopId(String ipId, String shopId, BindHistory bindHistory) {
public boolean deleteShopId(String id, String shopId, BindHistory bindHistory) {
Document doc = new Document();
BasicQuery basicQuery = new BasicQuery(doc);
basicQuery.addCriteria(where("id").is(ipId).and("isDeleted").is(false));
basicQuery.addCriteria(where("id").is(id).and("isDeleted").is(false));
Update update = new Update();
update.pull("shopIds", shopId).push("bindhistory", bindHistory);
UpdateResult result = mongoTemplate.updateFirst(basicQuery, update, IpResource.class);
......@@ -163,18 +163,23 @@ public class IpResourceRepositoryCustomImpl implements IpResourceRepositoryCusto
UnwindOperation unwind = Aggregation.unwind("shopIds");
MatchOperation matchshopId = Aggregation.match(where("shopIds").in(shopIds));
List<IpResourceUnwindResultDto> ipResourceUnwindResultDtos = mongoTemplate.aggregate(
Aggregation.newAggregation(matchOperation, unwind, matchshopId), IpResource.class, IpResourceUnwindResultDto.class).getMappedResults();
Aggregation.newAggregation(matchOperation, unwind, matchshopId), IpResource.class, IpResourceUnwindResultDto.class
).getMappedResults();
if (ipResourceUnwindResultDtos.isEmpty()) {
return new ArrayList<>();
}
HashMap<String, IpResource> ipResourceHashMap = new HashMap<>();
ipResourceUnwindResultDtos.forEach(x -> {
if (ipResourceHashMap.containsKey(x.getId())) {
ipResourceHashMap.get(x.getId()).getShopIds().add(x.getShopId());
} else {
ipResourceHashMap.put(x.getId(), x.toResource());
}
});
ipResourceUnwindResultDtos.forEach(
x -> {
if (ipResourceHashMap.containsKey(x.getId())) {
ipResourceHashMap.get(x.getId()).getShopIds().add(x.getShopId());
} else {
ipResourceHashMap.put(x.getId(), x.toResource());
}
}
);
List<IpResource> result = new ArrayList<>();
Set<Map.Entry<String, IpResource>> entry = ipResourceHashMap.entrySet();
for (Map.Entry<String, IpResource> e : entry) {
......
......@@ -37,7 +37,7 @@ public class GroupServiceImpl implements GroupService {
public String addGroup(String username, String groupName) {
if (StringUtils.isBlank(username) || StringUtils.isBlank(groupName))
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
if (account.getGroupCount() >= 100)
......@@ -79,14 +79,14 @@ public class GroupServiceImpl implements GroupService {
public void deleteGroup(String username, String groupId) {
if (StringUtils.isBlank(username) || StringUtils.isBlank(groupId))
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
try {
userShopRepository.updateGroupId(groupId, null);
groupRepository.deleteById(groupId);
//可以优化
account.setGroupCount(account.getGroupCount()-1);
account.setGroupCount(account.getGroupCount() - 1);
accountRepository.save(account);
} catch (Exception e) {
logger.error("fail to delete group", e.getMessage());
......@@ -106,7 +106,7 @@ public class GroupServiceImpl implements GroupService {
groups.stream().forEach(x -> {
groupDtos.add(new GroupDto(x.getId(), x.getName(), x.getDetails()));
});
} catch (Exception e){
} catch (Exception e) {
logger.error("fail to delete group", e.getMessage());
throw new ClientRequestException(BrowserErrorCode.UNKNOWN);
}
......
......@@ -44,10 +44,7 @@ public class IpAndShopServiceImpl implements IpAndShopService {
@Override
public void bindShop(String username, ShopRequestDto shopRequestDto) {
// 1. 根据id 来获取账户
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
String shopId = shopRequestDto.getShopId();
// 2.获取当前账户下指定的商铺
......@@ -62,10 +59,10 @@ public class IpAndShopServiceImpl implements IpAndShopService {
IpResource ipResource = null;
if (StringUtils.isNotBlank(shopRequestDto.getIpAddr())) {
ipResource = ipResourceRepository.findByAddrAndIsDeleted(shopRequestDto.getIpAddr(), false);
} else if (StringUtils.isNotBlank(shopRequestDto.getIpId())) {
}
if (StringUtils.isNotBlank(shopRequestDto.getIpId())) {
ipResource = ipResourceRepository.findByIdAndIsDeleted(shopRequestDto.getIpId(), false);
}
if (ipResource == null) {
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
}
......@@ -87,40 +84,56 @@ public class IpAndShopServiceImpl implements IpAndShopService {
@Override
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);
}
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopId);
if (account.getPermission() < 4 || userShop == null) {
// 1. 检查当前账户是否存在,是否具备操作权限
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account.getPermission() < 4) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
Shop shop = shopRepository.findById(shopId).orElse(null);
if (shop == null)
String shopId = shopRequestDto.getShopId();
// 2. 查找当前用户是否已经绑定商铺 以及 关联商铺的绑定 (一个商铺可以被多个用户持有)
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopId);
if (userShop == null) {
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
}
// 3. 查找商铺信息
Shop shop = shopRepository.findById(shopId).orElseThrow(() -> new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST));
// 4. 查找当前商铺绑定的 ip 资源是否存在
IpResource ipResource = null;
if (StringUtils.isNotBlank(shopRequestDto.getIpAddr())) {
ipResource = ipResourceRepository.findByAddrAndIsDeleted(shopRequestDto.getIpAddr(), false);
} else if (StringUtils.isNotBlank(shopRequestDto.getIpId())) {
}
if (StringUtils.isNotBlank(shopRequestDto.getIpId())) {
ipResource = ipResourceRepository.findByIdAndIsDeleted(shopRequestDto.getIpId(), false);
}
if (ipResource == null)
if (ipResource == null) {
throw new ClientRequestException(BrowserErrorCode.IPNOTEXIST);
if (ipResource.getShopIds() == null && !ipResource.getShopIds().contains(shop.getShopId()))
}
// 5. 若存在,ip资源是否绑定了该店铺(一个ip资源可以被多个店铺绑定)
if (ipResource.getShopIds() == null && !ipResource.getShopIds().contains(shop.getShopId())) {
throw new ClientRequestException(BrowserErrorCode.IPNOTBINDTOSHOP);
}
// 封装 ip 资源绑定的历史信息
BindHistory bindHistory = new BindHistory();
bindHistory.setIp(ipResource.getAddr());
bindHistory.setPlatform(shop.getShopPlatform());
bindHistory.setShopName(shop.getShopName());
bindHistory.setUnbindTime(ZonedDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
try {
BindHistory bindHistory = new BindHistory();
bindHistory.setIp(ipResource.getAddr());
bindHistory.setPlatform(shop.getShopPlatform());
bindHistory.setShopName(shop.getShopName());
bindHistory.setUnbindTime(ZonedDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
// 6. IP资源解除绑定的店铺并更新ip资源的绑定历史
ipResourceRepository.deleteShopId(ipResource.getId(), shopId, bindHistory);
// 7. 更新 ip 资源的绑定状态为 未绑定
IpResource newIp = ipResourceRepository.findById(ipResource.getId()).orElse(null);
if (newIp.getShopIds() == null || newIp.getShopIds().size() == 0)
if (newIp.getShopIds() == null || !newIp.getShopIds().contains(shopId)) {
ipResourceRepository.updateBind(ipResource.getId(), false);
}
} catch (Exception e) {
logger.error("fail to unbind", e.getMessage());
throw new ClientRequestException(BrowserErrorCode.UNKNOWN);
......@@ -132,10 +145,8 @@ public class IpAndShopServiceImpl implements IpAndShopService {
List<String> shopIds = null;
if (shopRequestDto.getShopIds() != null && shopRequestDto.getShopIds().size() > 0)
shopIds = shopRequestDto.getShopIds();
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
IpResource ipResource = null;
if (StringUtils.isNotBlank(shopRequestDto.getIpAddr())) {
ipResource = ipResourceRepository.findByAddrAndIsDeleted(shopRequestDto.getIpAddr(), false);
......
......@@ -18,6 +18,7 @@ import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.commons.utils.NotifyUtils;
import com.edgec.browserbackend.common.utils.FileUtil;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -53,6 +54,54 @@ public class IpResourceServiceImpl implements IpResourceService {
"brazil", "virginia", "ohio", "california", "oregon", "ireland", "london", "ireland"
);
public static String genRandom(int srcFlag, int length) {
String retStr = "";
String strTable = "";
switch (srcFlag) {
case 1:
strTable = "1234567890";
break;
case 2:
strTable = "1234567890abcdefghijklmnopqrstuvwxyz";
break;
case 3:
strTable = "12345678901234567890abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;
case 4:
strTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;
case 5:
strTable = "abcdefghijklmnopqrstuvwxyz";
break;
default:
strTable = "1234567890abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;
}
int len = strTable.length() - 3;
boolean bDone = true;
do {
retStr = "";
int count = 0;
for (int i = 0; i < length; i++) {
double dblR = Math.random() * len;
int intR = (int) Math.floor(dblR);
char c = strTable.charAt(intR);
if (('0' <= c) && (c <= '9')) {
count++;
}
retStr += strTable.charAt(intR);
}
if (count >= 2) {
bDone = false;
}
} while (bDone);
retStr += "a";
retStr += "A";
retStr += "1";
return retStr;
}
private static List<String> port = Arrays.asList("20000", "20001");
private static List<String> protocol = Arrays.asList("socks5", "proxy");
......@@ -106,68 +155,9 @@ public class IpResourceServiceImpl implements IpResourceService {
return headers;
}
public static String genRandom(int srcFlag, int length) {
String retStr = "";
String strTable = "";
switch (srcFlag) {
case 1:
strTable = "1234567890";
break;
case 2:
strTable = "1234567890abcdefghijklmnopqrstuvwxyz";
break;
case 3:
strTable = "12345678901234567890abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;
case 4:
strTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;
case 5:
strTable = "abcdefghijklmnopqrstuvwxyz";
break;
default:
strTable = "1234567890abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
break;
}
int len = strTable.length() - 3;
boolean bDone = true;
do {
retStr = "";
int count = 0;
for (int i = 0; i < length; i++) {
double dblR = Math.random() * len;
int intR = (int) Math.floor(dblR);
char c = strTable.charAt(intR);
if (('0' <= c) && (c <= '9')) {
count++;
}
retStr += strTable.charAt(intR);
}
if (count >= 2) {
bDone = false;
}
} while (bDone);
retStr += "a";
retStr += "A";
retStr += "1";
return retStr;
}
private IpChargeRequestDto buildIpChargeRequestDto(IpResourceRequestDto request, int chargeType, int payMethod) {
IpChargeRequestDto ipChargeRequestDto = new IpChargeRequestDto();
ipChargeRequestDto.setAmount(request.getAmount());
ipChargeRequestDto.setChargeType(chargeType);
ipChargeRequestDto.setRegion(request.getRegion());
ipChargeRequestDto.setPeriod(request.getPeriod());
ipChargeRequestDto.setUnit(request.getUnit());
ipChargeRequestDto.setPayMethod(payMethod);
return ipChargeRequestDto;
}
@Override
public List<String> buyIp(String username, IpResourceRequestDto ipResourceRequestDto) throws Exception {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
if (account.getPermission() < 4)
......@@ -301,7 +291,7 @@ public class IpResourceServiceImpl implements IpResourceService {
@Override
public IpOperationResultDto renewIp(String username, IpResourceRequestDto ipResourceRequestDto) {
String URL = (profiles.equals("dev") || profiles.equals("staging")) ? TESTURL : CLOUDAMURL;
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
......@@ -419,106 +409,107 @@ public class IpResourceServiceImpl implements IpResourceService {
@Override
public IpOperationResultDto deleteIp(String username, IpResourceRequestDto ipResourceRequestDto) {
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
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();
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = buildGetHeader();
Map<String, String> params = new HashMap<String, String>();
HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(params, headers);
IpOperationResultDto ipOperationResultDto = new IpOperationResultDto();
if (ipResourceRequestDto.getAddr() != null && ipResourceRequestDto.getAddr().size() > 0) {
ipResourceRequestDto.getAddr().forEach(ipAddr -> {
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeletedAndIsLocked(ipAddr, false, false);
if (ipResource == null) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
UserShop userShop = null;
if (ipResource.getShopIds() != null) {
List<Shop> shops = shopRepository.findByShopIdIn(ipResource.getShopIds());
if (shops != null && shops.size() > 0) {
for (Shop shop : shops) {
if (shop != null) {
userShop = userShopRepository.findByUsernameAndShopId(username, shop.getShopId());
ipResourceRequestDto.getAddr().forEach(
ipAddr -> {
// 1. 查找需要删除的 ip 资源 是否被占用、 是否是当前用户的,若占用或不是当前用户的,则删除失败
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeletedAndIsLocked(ipAddr, false, false);
if (ipResource == null) {
ipOperationResultDto.getFailList().add(ipAddr);
// 在 foreach 中 return 的作用 相当于 普通 for循环中 continue 的作用
return;
}
// 2. 如果根据 shopId 与 用户名 查不到 用户的商铺,则删除失败
if (ipResource.getShopIds() != null) {
List<Shop> shops = shopRepository.findByShopIdIn(ipResource.getShopIds());
for (Shop shop : shops) {
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shop.getShopId());
if (userShop == null) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
} else if (!ipResource.getOwner().equals(username)) {
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
}
try {
// 调用 uri删除远程的 IP资源
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);
if (deleteIpResultDto.getResult().equals("failed") || StringUtils.isNotBlank(deleteIpResultDto.getErrorCode())) {
NotifyUtils.sendMessage("防关联浏览器 ip " + ipResource.getAddr() + " 删除失败", NotifyUtils.MsgType.WEBHOOK);
logger.error("ip " + ipResource.getAddr() + " 删除失败");
logger.error("ErrorCode: " + deleteIpResultDto.getErrorCode() + " " + deleteIpResultDto.getResult());
}
// ip资源为未绑定,则直接删除
if (ipResource.getStatus() == 6) {
ipResourceRepository.delete(ipResource);
// 其他情况(主要是 ip资源还未创建成功的状态),则将 ip资源的状态改为删除
} else {
ipResource.setShopIds(null);
ipResource.setDeleted(true);
ipResourceRepository.save(ipResource);
}
ipOperationResultDto.getSuccessList().add(ipAddr);
} catch (Exception e) {
logger.error("fail to delete ip", e.getMessage());
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
}
}
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);
if (deleteIpResultDto.getResult().equals("failed") || StringUtils.isNotBlank(deleteIpResultDto.getErrorCode())) {
NotifyUtils.sendMessage("防关联浏览器 ip " + ipResource.getAddr() + " 删除失败", NotifyUtils.MsgType.WEBHOOK);
logger.error("ip " + ipResource.getAddr() + " 删除失败");
logger.error("ErrorCode: " + deleteIpResultDto.getErrorCode() + " " + deleteIpResultDto.getResult());
}
if (ipResource.getStatus() == 6)
ipResourceRepository.delete(ipResource);
else {
ipResource.setShopIds(null);
ipResource.setDeleted(true);
ipResourceRepository.save(ipResource);
}
ipOperationResultDto.getSuccessList().add(ipAddr);
} catch (Exception e) {
logger.error("fail to delete ip", e.getMessage());
ipOperationResultDto.getFailList().add(ipAddr);
return;
}
});
);
}
if (ipResourceRequestDto.getIpId() != null && ipResourceRequestDto.getIpId().size() > 0) {
ipResourceRequestDto.getIpId().forEach(ipId -> {
IpResource ipResource = ipResourceRepository.findByIdAndIsDeletedAndIsLocked(ipId, false, false);
if (ipResource == null) {
ipOperationResultDto.getFailList().add(ipId);
return;
}
if (ipResource.getStatus() == 6)
ipResourceRepository.delete(ipResource);
else if (StringUtils.isNotBlank(ipResource.getAddr()) && ipResource.getIpType() == IpType.VENDOR) {
ResponseEntity<String> result = restTemplate.exchange(URL + "/intelligroup/ipresources?accountId=browser&ip={ip}",
HttpMethod.DELETE, httpEntity, String.class, ipResource.getAddr());
DeleteIpResultDto deleteIpResultDto = JSON.parseObject(result.getBody(), DeleteIpResultDto.class);
if (deleteIpResultDto.getResult().equals("failed") || StringUtils.isNotBlank(deleteIpResultDto.getErrorCode())) {
NotifyUtils.sendMessage("防关联浏览器 ip " + ipResource.getAddr() + " 删除失败", NotifyUtils.MsgType.WEBHOOK);
logger.error("ip " + ipResource.getAddr() + " 删除失败");
}
}
UserShop userShop = null;
if (ipResource.getShopIds() != null) {
List<Shop> shops = shopRepository.findByShopIdIn(ipResource.getShopIds());
if (shops != null && shops.size() > 0) {
for (Shop shop : shops) {
if (shop != null) {
userShop = userShopRepository.findByUsernameAndShopId(username, shop.getShopId());
if (userShop == null) {
ipOperationResultDto.getFailList().add(ipId);
return;
ipResourceRequestDto.getIpId().forEach(
ipId -> {
IpResource ipResource = ipResourceRepository.findByIdAndIsDeletedAndIsLocked(ipId, false, false);
if (ipResource == null) {
ipOperationResultDto.getFailList().add(ipId);
return;
}
if (ipResource.getStatus() == 6) {
ipResourceRepository.delete(ipResource);
} else if (StringUtils.isNotBlank(ipResource.getAddr()) && ipResource.getIpType() == IpType.VENDOR) {
ResponseEntity<String> result = restTemplate.exchange(URL + "/intelligroup/ipresources?accountId=browser&ip={ip}",
HttpMethod.DELETE, httpEntity, String.class, ipResource.getAddr());
DeleteIpResultDto deleteIpResultDto = JSON.parseObject(result.getBody(), DeleteIpResultDto.class);
if (deleteIpResultDto.getResult().equals("failed") || StringUtils.isNotBlank(deleteIpResultDto.getErrorCode())) {
NotifyUtils.sendMessage("防关联浏览器 ip " + ipResource.getAddr() + " 删除失败", NotifyUtils.MsgType.WEBHOOK);
logger.error("ip " + ipResource.getAddr() + " 删除失败");
}
}
if (ipResource.getShopIds() != null) {
List<Shop> shops = shopRepository.findByShopIdIn(ipResource.getShopIds());
if (shops != null && shops.size() > 0) {
for (Shop shop : shops) {
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shop.getShopId());
if (userShop == null) {
ipOperationResultDto.getFailList().add(ipId);
return;
}
}
} else if (!ipResource.getOwner().equals(username)) {
ipOperationResultDto.getFailList().add(ipId);
return;
}
}
ipResource.setDeleted(true);
ipResource.setShopIds(null);
ipResourceRepository.save(ipResource);
ipOperationResultDto.getSuccessList().add(ipId);
}
}
ipResource.setDeleted(true);
ipResource.setShopIds(null);
ipResourceRepository.save(ipResource);
ipOperationResultDto.getSuccessList().add(ipId);
});
);
}
return ipOperationResultDto;
......@@ -526,139 +517,97 @@ public class IpResourceServiceImpl implements IpResourceService {
@Override
public IpPageResultDto getIpList(String username, int groupType, int page, int amount, IpFilterDto ipFilterDto) {
if (amount > 100)
amount = 100;
Pageable pageable = PageRequest.of(page, amount);
Account account = accountRepository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
// 获取当前用户的账户
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
List<String> shopIds = userShopRepository.findByUsername(username).stream().map(x -> x.getShopId()).collect(Collectors.toList());
List<IpResource> ipResources = new ArrayList<>();
List<IpResource> notUsed = null;
List<String> children = new ArrayList<>();
boolean isParent = false;
if (account.getParent() == null) {
isParent = true;
children = accountRepository.findByParent(account.getName()).stream().map(Account::getName).collect(Collectors.toList());
List<IpResource> notUsed = new ArrayList<>();
// 获取当前用户的 ip 资及未使用的 ip资源
dealIpResourceByGroup(ipResources, notUsed, account, username, groupType);
if (notUsed != null) {
ipResources.addAll(notUsed);
}
children.add(account.getName());
// 去掉重复 ip
List<String> allIpIds = ipResources.stream().distinct().map(IpResource::getId).collect(Collectors.toList());
// 根据过滤条件来分页获取 ip 资源
amount = amount > 100 ? 100 : amount;
Pageable pageable = PageRequest.of(page, amount);
Page<IpResource> ipResources1 = getIpResourcesByFilter(ipFilterDto, allIpIds, pageable);
switch (groupType) {
case 1:
ipResources = ipResourceRepository.findShopIdInList(shopIds, false);
if (!isParent)
notUsed = ipResourceRepository.findByOwnerAndIsDeletedAndBind(username, false, false);
else
notUsed = ipResourceRepository.findByOwnerInAndIsDeletedAndBind(children, false, false);
break;
case 2:
ipResources = ipResourceRepository.findShopIdInListAndStatus(shopIds, false, 2);
if (!isParent)
notUsed = ipResourceRepository.findByOwnerAndStatusAndIsDeletedAndBind(username, 2, false, false);
else
notUsed = ipResourceRepository.findByOwnerInAndStatusAndIsDeletedAndBind(children, 2, false, false);
break;
case 3:
ipResources = ipResourceRepository.findShopIdInListAndStatus(shopIds, false, 1);
if (!isParent)
notUsed = ipResourceRepository.findByOwnerAndStatusAndIsDeletedAndBind(username, 1, false, false);
else
notUsed = ipResourceRepository.findByOwnerInAndStatusAndIsDeletedAndBind(children, 1, false, false);
break;
case 4:
if (!isParent)
notUsed = ipResourceRepository.findByOwnerAndStatusIsNotInAndIsDeletedAndBind(username, Arrays.asList(3, 5, 6), false, false);
else
notUsed = ipResourceRepository.findByOwnerInAndStatusIsNotInAndIsDeletedAndBind(children, Arrays.asList(3, 5, 6), false, false);
break;
case 5:
// 已分配
ipResources = ipResourceRepository.findShopIdInList(shopIds, false);
if (!isParent)
notUsed = ipResourceRepository.findByOwnerAndStatusInAndIsDeletedAndBind(username, Arrays.asList(0, 2, 4, 8), false, false);
else
notUsed = ipResourceRepository.findByOwnerInAndStatusInAndIsDeletedAndBind(children, Arrays.asList(0, 2, 4, 8), false, false);
break;
}
if (notUsed != null)
ipResources.addAll(notUsed);
List<IpResourceDto> ipResourceDtos = new ArrayList<>();
List<String> allIpIds = ipResources.stream().distinct().map(x -> x.getId()).collect(Collectors.toList());
Page<IpResource> ipResources1 = null;
if (ipFilterDto != null && StringUtils.isNotBlank(ipFilterDto.getRegion())) {
ipResources1 = ipResourceRepository.findByIsDeletedAndIdInAndRegionCnLikeOrderByPurchasedTimeDesc(false, allIpIds, ipFilterDto.getRegion(), pageable);
} else if (ipFilterDto != null && StringUtils.isNotBlank(ipFilterDto.getAddr())) {
ipResources1 = ipResourceRepository.findByIsDeletedAndIdInAndAddrLikeOrderByPurchasedTimeDesc(false, allIpIds, ipFilterDto.getAddr(), pageable);
} else if (ipFilterDto != null && StringUtils.isNotBlank(ipFilterDto.getVendor())) {
ipResources1 = ipResourceRepository.findByIsDeletedAndIdInAndVendorCnLikeOrderByPurchasedTimeDesc(false, allIpIds, ipFilterDto.getVendor(), pageable);
} else {
ipResources1 = ipResourceRepository.findByIdInAndIsDeletedOrderByPurchasedTimeDesc(allIpIds, false, pageable);
}
if (ipResources1 != null) {
ipResources1.getContent().forEach(x -> {
List<ShopDto> shopDtos = new ArrayList<>();
List<Shop> shops = null;
if (x.getShopIds() != null)
shops = shopRepository.findByShopIdIn(x.getShopIds());
if (shops == null || shops.size() == 0) {
shopDtos.add(new ShopDto());
} else {
for (Shop shop : shops) {
shopDtos.add(new ShopDto(shop));
}
}
if (StringUtils.isNotBlank(x.getAddr())) {
if (x.getLockTimestamp() >= Instant.now().minusSeconds(120).toEpochMilli() && x.getIpType() == IpType.VENDOR && (x.getStatus() == 0 || x.getStatus() == 2)) {
x.setStatus(3);
} else if (x.getValidTime() <= Instant.now().plusSeconds(60 * 60 * 24 * 7).toEpochMilli() && x.getValidTime() > Instant.now().toEpochMilli()) {
if (x.getStatus() != 5 && x.getStatus() != 3 && x.getStatus() != 6) {
ipResourceRepository.updateStatus(x.getId(), 2);
ipResources1.getContent().forEach(
x -> {
// 1. 如果 ip 资源的 addr 非空
if (StringUtils.isNotBlank(x.getAddr())) {
// 1.1 锁定时间在 2分钟内 且 IpType 为 VENDOR 且 (IP资源状态 为 0:正常 或 2:即将过期)
if (x.getLockTimestamp() >= Instant.now().minusSeconds(2 * 60).toEpochMilli() && x.getIpType() == IpType.VENDOR && (x.getStatus() == 0 || x.getStatus() == 2)) {
x.setStatus(3);
// 1.2 ip资源在未来七天内到期,且 ip 资源的状态不是 3(正在分配)、5(已失效)、6(未分配),则将 ip 资源设置为 2(即将过期)
} else if (x.getValidTime() <= Instant.now().plusSeconds(60 * 60 * 24 * 7).toEpochMilli() && x.getValidTime() > Instant.now().toEpochMilli()) {
if (x.getStatus() != 5 && x.getStatus() != 3 && x.getStatus() != 6) {
ipResourceRepository.updateStatus(x.getId(), 2);
}
// 1.3 ip资源在七天前到期,且 ip 资源的状态不是 3(正在分配)、6(未分配),则删除 ip 资源
} else if (x.getValidTime() <= Instant.now().minusSeconds(60 * 60 * 24 * 7).toEpochMilli() && x.getStatus() != 3 && x.getStatus() != 6) {
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;
// 1.4 ip资源到期,且 ip 资源的状态不是 3(正在分配)、6(未分配),则设置 ip 资源的状态为 1(已过期)
} else if (x.getValidTime() <= Instant.now().toEpochMilli() && x.getStatus() != 3 && x.getStatus() != 6) {
ipResourceRepository.updateStatus(x.getId(), 1);
// 1.5 其他
} else {
//
if ((x.getStatus() == 0 || x.getStatus() == 1 || x.getStatus() == 2) && !x.getVendor().equals(Vendor.local)) {
ipResourceRepository.updateStatus(x.getId(), 0);
} else if (x.getIpType().equals(IpType.LOCAL) && (x.getStatus() == 1 || x.getStatus() == 2) && x.getAddr().equals("本地Ip未使用")) {
ipResourceRepository.updateStatus(x.getId(), 4);
}
}
}
} else if (x.getValidTime() <= Instant.now().minusSeconds(60 * 60 * 24 * 7).toEpochMilli() && x.getStatus() != 3 && x.getStatus() != 6) {
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);
// 2. 如果 ip 资源的 status 为 6(未分配) 或者 ( ip资源为专线 且 purchasedTime(购买IP的时间) 在 14 分钟内)
if (x.getStatus() == 6 || (x.isSpecialLine() && x.getPurchasedTime() > (Instant.now().minusSeconds(14 * 60).toEpochMilli()))) {
x.setStatus(3);
}
return;
} else if (x.getValidTime() <= Instant.now().toEpochMilli() && x.getStatus() != 3 && x.getStatus() != 6) {
ipResourceRepository.updateStatus(x.getId(), 1);
} else {
if ((x.getStatus() == 0 || x.getStatus() == 1 || x.getStatus() == 2) && !x.getVendor().equals(Vendor.local)) {
ipResourceRepository.updateStatus(x.getId(), 0);
} else if (x.getIpType().equals(IpType.LOCAL) && (x.getStatus() == 1 || x.getStatus() == 2) && x.getAddr().equals("本地Ip未使用")) {
ipResourceRepository.updateStatus(x.getId(), 4);
// 3. 如果 ip 资源的 status 为 3(正在分配)
if (x.getStatus() == 3) {
x.setAddr("");
}
List<ShopDto> shopDtos = getShopDtos(x);
SpecialLine specialLine = specialLineRepository.findAll().get(0);
IpResourceDto ipResourceDto = x.isSpecialLine() ? new IpResourceDto(x, shopDtos, false, specialLine) : new IpResourceDto(x, shopDtos, false);
ipResourceDtos.add(ipResourceDto);
}
}
if (x.getStatus() == 6 || (x.isSpecialLine() && x.getPurchasedTime() > (Instant.now().toEpochMilli() - 12 * 60 * 1000)))
x.setStatus(3);
if (x.getStatus() == 3) {
x.setAddr("");
}
SpecialLine specialLine = specialLineRepository.findAll().get(0);
if (x.isSpecialLine())
ipResourceDtos.add(new IpResourceDto(x, shopDtos, false, specialLine));
else
ipResourceDtos.add(new IpResourceDto(x, shopDtos, false));
});
);
}
Page<IpResourceDto> ipResourceDtoPage = new PageImpl<>(ipResourceDtos, pageable, allIpIds.size());
// 将当前页的数据封装到 ipPageResultDto 中
IpPageResultDto ipPageResultDto = new IpPageResultDto();
Page<IpResourceDto> ipResourceDtoPage = new PageImpl<>(ipResourceDtos, pageable, allIpIds.size());
ipPageResultDto.setIpList(ipResourceDtoPage.getContent());
PageInfo pageInfo = new PageInfo();
pageInfo.setCurrentPage(ipResourceDtoPage.getPageable().getPageNumber());
pageInfo.setTotalPages(ipResourceDtoPage.getTotalPages());
pageInfo.setTotalItems(allIpIds.size());
PageInfo pageInfo = new PageInfo(ipResourceDtoPage.getPageable().getPageNumber(), ipResourceDtoPage.getTotalPages(), allIpIds.size());
ipPageResultDto.setIpPage(pageInfo);
return ipPageResultDto;
}
......@@ -693,9 +642,9 @@ public class IpResourceServiceImpl implements IpResourceService {
@Override
public IpSummary getIpSummary(String username) {
Account account = accountRepository.findByName(username);
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
IpSummary ipSummary = new IpSummary();
List<String> shopIds = userShopRepository.findByUsername(username).stream().map(x -> x.getShopId()).collect(Collectors.toList());
List<String> used = ipResourceRepository.findShopIdInList(shopIds, false).stream().map(x -> x.getId()).collect(Collectors.toList());
......@@ -713,13 +662,10 @@ public class IpResourceServiceImpl implements IpResourceService {
@Override
public void updateIp(String username, IpResourceUpdateDto ipResourceUpdateDto) {
// 1. 根据id 来获取账户
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
/// 这个地方本来是8,现在由于更新ip失败,改为和绑定店铺时一样的 4
if (account.getPermission() < 4) {
// 只有管理员可以 更新 ip,管理员的权限是 8
if (account.getPermission() < 8) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
......@@ -736,22 +682,9 @@ public class IpResourceServiceImpl implements IpResourceService {
ipResourceRepository.save(ipResource);
}
private void dealIpResource(IpResourceUpdateDto ipResourceUpdateDto, IpResource ipResource) {
if (StringUtils.isNotBlank(ipResourceUpdateDto.getAddr())) {
ipResource.setAddr(ipResourceUpdateDto.getAddr());
}
if (StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion())) {
ipResource.setProxyUsername(ipResource.getAddr());
ipResource.setProxyPassword(genRandom(3, 12));
ipResource.setSpecialLine(true);
}
ipResource.setStatus(ipResourceUpdateDto.getStatus());
}
@Override
public boolean queryIpExist(String username, IpResourceUpdateDto ipResourceUpdateDto) {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
IpResource ipResource = ipResourceRepository.findByAddrAndIsDeleted(ipResourceUpdateDto.getAddr(), false);
......@@ -763,7 +696,7 @@ public class IpResourceServiceImpl implements IpResourceService {
@Override
public IpResourceDto queryIp(String username, IpResourceRequestDto ipResourceRequestDto) {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
IpResource ipResource = null;
......@@ -840,4 +773,126 @@ public class IpResourceServiceImpl implements IpResourceService {
ipResourceRepository.updateBind(ipResource.getId(), true);
}
}
private IpChargeRequestDto buildIpChargeRequestDto(IpResourceRequestDto request, int chargeType, int payMethod) {
IpChargeRequestDto ipChargeRequestDto = new IpChargeRequestDto();
ipChargeRequestDto.setAmount(request.getAmount());
ipChargeRequestDto.setChargeType(chargeType);
ipChargeRequestDto.setRegion(request.getRegion());
ipChargeRequestDto.setPeriod(request.getPeriod());
ipChargeRequestDto.setUnit(request.getUnit());
ipChargeRequestDto.setPayMethod(payMethod);
return ipChargeRequestDto;
}
private void dealIpResource(IpResourceUpdateDto ipResourceUpdateDto, IpResource ipResource) {
if (StringUtils.isNotBlank(ipResourceUpdateDto.getAddr())) {
ipResource.setAddr(ipResourceUpdateDto.getAddr());
}
if (StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion())) {
ipResource.setProxyUsername(ipResource.getAddr());
ipResource.setProxyPassword(genRandom(3, 12));
ipResource.setSpecialLine(true);
}
ipResource.setStatus(ipResourceUpdateDto.getStatus());
}
private void dealIpResourceByGroup(List<IpResource> ipResourceList, List<IpResource> notUsedList, Account account, String username, int groupType) {
// 获取当前用户所有的商铺id
List<String> shopIds = userShopRepository.findByUsername(username).stream().map(UserShop::getShopId).collect(Collectors.toList());
List<String> accountNameList = new ArrayList<>();
accountNameList.add(account.getName());
boolean isParent = false;
if (account.getParent() == null) {
isParent = true;
// 获取当前用户的 子账户名
List<String> children = accountRepository.findByParent(account.getName()).stream().map(Account::getName).collect(Collectors.toList());
accountNameList.addAll(children);
}
List<IpResource> ipResources = null;
List<IpResource> notUsed = null;
switch (groupType) {
case 1:
ipResources = ipResourceRepository.findShopIdInList(shopIds, false);
if (!isParent) {
notUsed = ipResourceRepository.findByOwnerAndIsDeletedAndBind(username, false, false);
} else {
notUsed = ipResourceRepository.findByOwnerInAndIsDeletedAndBind(accountNameList, false, false);
}
break;
case 2:
ipResources = ipResourceRepository.findShopIdInListAndStatus(shopIds, false, 2);
if (!isParent) {
notUsed = ipResourceRepository.findByOwnerAndStatusAndIsDeletedAndBind(username, 2, false, false);
} else {
notUsed = ipResourceRepository.findByOwnerInAndStatusAndIsDeletedAndBind(accountNameList, 2, false, false);
}
break;
case 3:
ipResources = ipResourceRepository.findShopIdInListAndStatus(shopIds, false, 1);
if (!isParent) {
notUsed = ipResourceRepository.findByOwnerAndStatusAndIsDeletedAndBind(username, 1, false, false);
} else {
notUsed = ipResourceRepository.findByOwnerInAndStatusAndIsDeletedAndBind(accountNameList, 1, false, false);
}
break;
case 4:
if (!isParent) {
notUsed = ipResourceRepository.findByOwnerAndStatusIsNotInAndIsDeletedAndBind(username, Arrays.asList(3, 5, 6), false, false);
} else {
notUsed = ipResourceRepository.findByOwnerInAndStatusIsNotInAndIsDeletedAndBind(accountNameList, Arrays.asList(3, 5, 6), false, false);
}
break;
case 5:
// 已分配
ipResources = ipResourceRepository.findShopIdInList(shopIds, false);
if (!isParent)
notUsed = ipResourceRepository.findByOwnerAndStatusInAndIsDeletedAndBind(username, Arrays.asList(0, 2, 4, 8), false, false);
else
notUsed = ipResourceRepository.findByOwnerInAndStatusInAndIsDeletedAndBind(accountNameList, Arrays.asList(0, 2, 4, 8), false, false);
break;
}
ipResourceList.addAll(ipResources);
notUsedList.addAll(notUsed);
}
@NotNull
private List<ShopDto> getShopDtos(IpResource x) {
List<ShopDto> shopDtos = new ArrayList<>();
List<Shop> shops = new ArrayList<>();
if (x.getShopIds() != null) {
shops = shopRepository.findByShopIdIn(x.getShopIds());
}
if (shops.isEmpty()) {
shopDtos.add(new ShopDto());
} else {
for (Shop shop : shops) {
shopDtos.add(new ShopDto(shop));
}
}
return shopDtos;
}
private Page<IpResource> getIpResourcesByFilter(IpFilterDto ipFilterDto, List<String> allIpIds, Pageable pageable) {
Page<IpResource> ipResources1 = null;
if (StringUtils.isNotBlank(ipFilterDto.getRegion())) {
ipResources1 = ipResourceRepository.findByIsDeletedAndIdInAndRegionCnLikeOrderByPurchasedTimeDesc(false, allIpIds, ipFilterDto.getRegion(), pageable);
}
if (StringUtils.isNotBlank(ipFilterDto.getAddr())) {
ipResources1 = ipResourceRepository.findByIsDeletedAndIdInAndAddrLikeOrderByPurchasedTimeDesc(false, allIpIds, ipFilterDto.getAddr(), pageable);
}
if (StringUtils.isNotBlank(ipFilterDto.getVendor())) {
ipResources1 = ipResourceRepository.findByIsDeletedAndIdInAndVendorCnLikeOrderByPurchasedTimeDesc(false, allIpIds, ipFilterDto.getVendor(), pageable);
}
if (ipFilterDto.isEmpty()) {
ipResources1 = ipResourceRepository.findByIdInAndIsDeletedOrderByPurchasedTimeDesc(allIpIds, false, pageable);
}
return ipResources1;
}
}
......@@ -12,7 +12,6 @@ import com.edgec.browserbackend.browser.service.IpResourceService;
import com.edgec.browserbackend.browser.service.ShopService;
import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.utils.FileUtil;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -22,6 +21,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
......@@ -63,112 +63,112 @@ public class ShopServiceImpl implements ShopService {
@Override
public String addShop(String username, ShopResultDto shopResultDto) {
Account account = accountRepository.findByName(username);
String id = null;
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
// 1. 对商铺的分组信息校验
if (shopResultDto.getGroup() == null) {
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
}
if (shopResultDto.getGroup() != null) {
Group group = groupRepository.findById(shopResultDto.getGroup())
.orElseThrow(() -> new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST));
}
// 2. 对当前用户的 account 信息进行校验
Account account = accountRepository.findByName(username)
.orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account.getPermission() < 4) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
if (account.getShopCount() >= 10000) {
throw new ClientRequestException(AccountErrorCode.SHOPMAX);
}
UserShop us = null;
if (shopResultDto.getShopId() != null)
us = userShopRepository.findByUsernameAndShopId(username, shopResultDto.getShopId());
if (shopResultDto.getGroup() == null)
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
Group group = groupRepository.findById(shopResultDto.getGroup()).orElse(null);
if (group == null) {
throw new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST);
}
try {
shopResultDto.setOwner(username);
Shop shop = new Shop();
shop.of(shopResultDto);
shop.setCreateTime(Instant.now().toEpochMilli());
id = shopRepository.save(shop).getShopId();
// 3. 将新增的 shop 信息保存并返回 id
String id = getShopId(username, shopResultDto);
// 4. 封装 usershop 并保存到 usershop 表
UserShop userShop = new UserShop();
userShop.setUsername(username);
userShop.setShopId(id);
if (shopResultDto.getGroup() != null && us == null) {
userShop.setGroupId(shopResultDto.getGroup());
}
userShop.setUsername(username);
userShop.setGroupId(shopResultDto.getGroup());
userShopRepository.save(userShop);
if (StringUtils.isNotBlank(account.getParent())) {
// 5. 如果当前用户有父账户,则也封装usershop并保存到 usershop 表,区别是 username 与 groupId,同时更新 父账户的商铺数
if (!StringUtils.isEmpty(account.getParent())) {
UserShop userShop1 = new UserShop();
userShop1.setUsername(account.getParent());
userShop1.setShopId(id);
userShop1.setUsername(account.getParent());
userShop1.setGroupId("-1");
userShopRepository.save(userShop1);
Account parentAccount = accountRepository.findByName(account.getParent())
.orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
account.setShopCount(parentAccount.getShopCount() + 1);
accountRepository.save(parentAccount);
}
//可以优化
// 6. 更新当前 account 的商铺数
account.setShopCount(account.getShopCount() + 1);
accountRepository.save(account);
// 7. 返回新增商铺的 id
return id;
} catch (Exception e) {
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
}
return id;
}
@Override
public List<String> addShops(String username, MultipartFile file) throws IOException {
List<String> ids = new ArrayList<>();
List<List<Object>> list = FileUtil.readExcel(file.getInputStream());
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account.getPermission() < 4) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
if (account.getShopCount() >= 10000) {
throw new ClientRequestException(AccountErrorCode.SHOPMAX);
}
List<String> ids = new ArrayList<>();
List<List<Object>> list = FileUtil.readExcel(file.getInputStream());
for (List<Object> l : list) {
ShopResultDto shopResultDto = new ShopResultDto();
shopResultDto.setOwner(username);
shopResultDto.setShopName(l.get(0).toString());
shopResultDto.setShopPlatform(l.get(1).toString());
shopResultDto.setGroup("-1");
if (StringUtils.isNotBlank(l.get(2).toString()))
if (!StringUtils.isEmpty(l.get(2).toString())) {
shopResultDto.setShopAccount(l.get(2).toString());
if (StringUtils.isNotBlank(l.get(3).toString()))
}
if (!StringUtils.isEmpty(l.get(3).toString())) {
shopResultDto.setShopPassword(l.get(3).toString());
String id = null;
UserShop us = null;
if (shopResultDto.getShopId() != null)
us = userShopRepository.findByUsernameAndShopId(username, shopResultDto.getShopId());
if (shopResultDto.getGroup() == null)
throw new ClientRequestException(BrowserErrorCode.INFORMATIONNOTCOMPELETE);
Group group = groupRepository.findById(shopResultDto.getGroup()).orElse(null);
if (group == null) {
throw new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST);
}
// 批量导入店铺时,默认不分组
shopResultDto.setGroup("-1");
try {
shopResultDto.setOwner(username);
Shop shop = new Shop();
shop.of(shopResultDto);
shop.setCreateTime(Instant.now().toEpochMilli());
id = shopRepository.save(shop).getShopId();
String id = getShopId(username, shopResultDto);
UserShop userShop = new UserShop();
userShop.setUsername(username);
userShop.setShopId(id);
if (shopResultDto.getGroup() != null && us == null) {
userShop.setGroupId(shopResultDto.getGroup());
}
userShop.setGroupId(shopResultDto.getGroup());
userShop.setUsername(username);
userShopRepository.save(userShop);
if (StringUtils.isNotBlank(account.getParent())) {
if (!StringUtils.isEmpty(account.getParent())) {
UserShop userShop1 = new UserShop();
userShop1.setUsername(account.getParent());
userShop1.setShopId(id);
userShop1.setGroupId("-1");
userShop1.setUsername(account.getParent());
userShopRepository.save(userShop1);
Account parentAccount = accountRepository.findByName(account.getParent())
.orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
account.setShopCount(parentAccount.getShopCount() + 1);
accountRepository.save(parentAccount);
}
//可以优化
account.setShopCount(account.getShopCount() + 1);
accountRepository.save(account);
ids.add(id);
} catch (Exception e) {
logger.error("fail to add shops", e.getMessage());
......@@ -180,22 +180,27 @@ public class ShopServiceImpl implements ShopService {
@Override
public String updateShop(String username, ShopResultDto shopResultDto) {
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
if (shopResultDto == null || StringUtils.isBlank(shopResultDto.getShopId())) {
// 1.校验参数、account 、权限
if (StringUtils.isEmpty(shopResultDto.getShopId())) {
throw new ClientRequestException(AccountErrorCode.OTHERS);
}
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopResultDto.getShopId());
if (account.getPermission() < 4 || userShop == null) {
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account.getPermission() < 4) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
Shop shop_old = shopRepository.findById(shopResultDto.getShopId()).orElseGet(null);
if (shop_old == null)
// 2.查询当前店铺是否已经绑定当前用户
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopResultDto.getShopId());
if (userShop == null) {
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
}
// 3. 获取旧的店铺信息,并封装新的数据
Shop shop_old = shopRepository.findById(shopResultDto.getShopId()).orElseThrow(() -> new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST));
shop_old = shop_old.of(shopResultDto);
try {
shop_old = shop_old.of(shopResultDto);
// 4. 更新店铺信息
shopRepository.save(shop_old);
} catch (Exception e) {
logger.error("fail to update", e.getMessage());
......@@ -206,49 +211,60 @@ public class ShopServiceImpl implements ShopService {
@Override
public void deleteShop(String username, String shopId) {
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
// 1. 校验参数、account 、权限、店铺是否已经和用户绑定
if (shopId == null) {
throw new ClientRequestException(AccountErrorCode.OTHERS);
}
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopId);
if (account.getPermission() < 4 || userShop == null) {
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account.getPermission() < 4) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
Shop shop = shopRepository.findById(shopId).orElse(null);
if (shop == null)
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopId);
if (userShop == null) {
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
}
// 2. 获取店铺信息
Shop shop = shopRepository.findById(shopId).orElseThrow(() -> new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST));
// 3. 如果当前店铺已经绑定 未被删除的 ip 资源,则让IP资源先解绑店铺
IpResource ipResource = ipResourceRepository.findFirstByShopIdsIsAndIsDeleted(shop.getShopId(), false);
if (ipResource != null) {
ShopRequestDto shopRequestDto = new ShopRequestDto();
shopRequestDto.setIpId(ipResource.getId());
shopRequestDto.setShopId(shopId);
shopRequestDto.setIpId(ipResource.getId());
ipAndShopService.unBindShop(username, shopRequestDto);
}
// 4. 删除当前店铺关联的所有的 usershop信息
boolean result = userShopRepository.deleteByShopId(shopId);
if (result) {
// 5. 删除当前店铺,并更新 account信息 todo
shopRepository.deleteById(shopId);
account.setShopCount(account.getShopCount() - 1);
accountRepository.save(account);
} else throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
// 6. 更新 和店铺关联的所有的 account 的信息
List<UserShop> userShops = userShopRepository.findByShopId(shopId);
List<Account> accountList = accountRepository.findByNameIn(userShops.stream().map(UserShop::getUsername).collect(Collectors.toList()));
for (Account a : accountList) {
a.setShopCount(account.getShopCount() - 1);
accountRepository.save(a);
}
} else {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
}
@Override
public void transferShop(String username, String shopId, String groupId) {
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopId);
Group group = groupRepository.findById(groupId).orElse(null);
Group group = groupRepository.findById(groupId).orElseThrow(() -> new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST));
if (userShop == null || (!group.getId().equals("-1") && group.getOwner() != null && !group.getOwner().equals(username))) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
Shop shop = shopRepository.findById(shopId).orElse(null);
if (shop == null)
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
Shop shop = shopRepository.findById(shopId).orElseThrow(() -> new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST));
try {
userShop.setGroupId(groupId);
userShopRepository.save(userShop);
......@@ -261,10 +277,8 @@ public class ShopServiceImpl implements ShopService {
@Override
public void assignShops(String username, List<String> shopIds, List<String> users) {
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
List<UserShop> userShops = userShopRepository.findByUsernameAndShopIdIn(username, shopIds);
if (account.getPermission() < 8 || userShops == null || userShops.size() < 1) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
......@@ -315,10 +329,8 @@ public class ShopServiceImpl implements ShopService {
@Override
public ShopResultDto queryShop(String username, String shopId) {
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
UserShop userShop = userShopRepository.findByUsernameAndShopId(username, shopId);
if (userShop == null) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
......@@ -342,159 +354,128 @@ public class ShopServiceImpl implements ShopService {
@Override
public ShopPageResultDto getShopList(String username, String groupId, int pageNum, int amount, ShopFilterDto shopFilterDto) {
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
// 当前登录用户的账户是否存在
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
// 当前查询的分组信息是否正确
Group group = null;
if (groupId != null) {
group = groupRepository.findById(groupId).orElse(null);
}
if (group == null) {
throw new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST);
}
if (group.getOwner() != null && !group.getOwner().equals(username)) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
group = groupRepository.findById(groupId).orElseThrow(() -> new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST));
if (group.getOwner() != null && !group.getOwner().equals(username)) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
}
List<String> shopIds = new ArrayList<>();
// 根据 groupId 与 username 来查询 shopIds (如果当前用户是父账户,则查询结果包含子账户的shopId)
List<String> allIds = null;
if ("-1".equals(groupId)) {
if (shopFilterDto.getBindIp() == 0) {
// 获取当前用户下所有的商铺id
shopIds = userShopRepository.findByUsername(username).stream()
.map(UserShop::getShopId).collect(Collectors.toList());
} else if (shopFilterDto.getBindIp() == 1) {
List<String> allIds = userShopRepository.findByUsername(username).stream()
.map(UserShop::getShopId).collect(Collectors.toList());
shopIds = ipResourceRepository.findShopIdInList(allIds, false).stream()
.flatMap((x -> x.getShopIds().stream())).collect(Collectors.toList());
} else {
List<String> allIds = userShopRepository.findByUsername(username).stream()
.map(UserShop::getShopId).collect(Collectors.toList());
for (String id : allIds) {
IpResource ipResource = ipResourceRepository.findFirstByShopIdsIsAndIsDeleted(id, false);
if (ipResource == null) {
shopIds.add(id);
}
}
}
allIds = userShopRepository.findByUsername(username).stream()
.map(UserShop::getShopId).collect(Collectors.toList());
// 如果分组
} else {
if (shopFilterDto.getBindIp() == 0) {
shopIds = userShopRepository.findByUsernameAndGroupId(username, groupId).stream().
map(UserShop::getShopId).collect(Collectors.toList());
} else if (shopFilterDto.getBindIp() == 1) {
List<String> allIds = userShopRepository.findByUsernameAndGroupId(username, groupId).stream()
.map(UserShop::getShopId).collect(Collectors.toList());
shopIds = ipResourceRepository.findShopIdInList(allIds, false).stream()
.flatMap((x -> x.getShopIds().stream())).collect(Collectors.toList());
} else {
List<String> allIds = userShopRepository.findByUsernameAndGroupId(username, groupId).stream()
.map(UserShop::getShopId).collect(Collectors.toList());
for (String id : allIds) {
IpResource ipResource = ipResourceRepository.findFirstByShopIdsIsAndIsDeleted(id, false);
if (ipResource == null) {
shopIds.add(id);
}
}
}
allIds = userShopRepository.findByUsernameAndGroupId(username, groupId).stream()
.map(UserShop::getShopId).collect(Collectors.toList());
}
if (amount > 100) {
amount = 100;
}
Pageable pageable = PageRequest.of(pageNum, amount);
List<String> shopIds = null;
if (shopFilterDto.getBindIp() == 0) {
shopIds = allIds;
Page<Shop> shops;
if (StringUtils.isNotBlank(shopFilterDto.getIpRegion())) {
List<String> filter = ipResourceRepository.findShopIdInListAndRegionLike(shopIds, false, shopFilterDto.getIpRegion())
.stream().flatMap((x -> x.getShopIds().stream())).collect(Collectors.toList());
shops = shopRepository.findByShopIdInOrderByCreateTimeDesc(filter, pageable);
} else if (StringUtils.isNotBlank(shopFilterDto.getShopAccount())) {
shops = shopRepository.findByShopIdInAndShopAccountLikeOrderByCreateTimeDesc(shopIds, shopFilterDto.getShopAccount(), pageable);
} else if (StringUtils.isNotBlank(shopFilterDto.getShopName())) {
shops = shopRepository.findByShopIdInAndShopNameLikeOrderByCreateTimeDesc(shopIds, shopFilterDto.getShopName(), pageable);
// 这个地方有点奇怪,为啥不去 userShop 中找,而是在 ipresource 中找? 可以查看下删除绑定状态的逻辑
} else if (shopFilterDto.getBindIp() == 1) {
// ip资源已经分配了 的店铺
shopIds = ipResourceRepository.findShopIdInList(allIds, false).stream()
.flatMap((x -> x.getShopIds().stream())).collect(Collectors.toList());
// 这个地方的其他情况是指什么情况
} else {
shops = shopRepository.findByShopIdInOrderByCreateTimeDesc(shopIds, pageable);
// 店铺绑定的 ip 资源被删除的 店铺
for (String id : allIds) {
IpResource ipResource = ipResourceRepository.findFirstByShopIdsIsAndIsDeleted(id, false);
if (ipResource == null) {
shopIds.add(id);
}
}
}
amount = amount > 100 ? 100 : amount;
Pageable pageable = PageRequest.of(pageNum, amount);
// 根据商铺ids 与 过滤条件 得到商铺
Page<Shop> shops = getShopsByFilter(shopFilterDto, shopIds, pageable);
ShopPageResultDto<ShopResultDto> shopPageResultDto = new ShopPageResultDto<>();
if (shops == null || shops.getNumberOfElements() < 1) {
return shopPageResultDto;
} else {
if (shops != null && shops.getNumberOfElements() >= 1) {
List<ShopResultDto> shopResultDtos = new ArrayList<>();
shops.getContent().stream().forEach(x -> {
IpResource ipResource = ipResourceRepository.findFirstByShopIdsIsAndIsDeleted(x.getShopId(), false);
if (ipResource != null && StringUtils.isNotBlank(ipResource.getAddr())) {
if (ipResource.getValidTime() <= Instant.now().plusSeconds(60 * 60 * 24 * 7).toEpochMilli() && ipResource.getValidTime() > Instant.now().toEpochMilli()) {
if (ipResource.getStatus() != 5 && ipResource.getStatus() != 3 && ipResource.getStatus() != 6) {
ipResource.setStatus(2);
ipResourceRepository.save(ipResource);
}
} else if (ipResource.getValidTime() <= Instant.now().minusSeconds(60 * 60 * 24 * 7).toEpochMilli() && ipResource.getStatus() != 3 && ipResource.getStatus() != 6) {
if (ipResource.getIpType() == IpType.VENDOR) {
IpResourceRequestDto ipResourceRequestDto1 = new IpResourceRequestDto();
ipResourceRequestDto1.setAddr(Arrays.asList(ipResource.getAddr()));
try {
ipResourceService.deleteIp(username, ipResourceRequestDto1);
} catch (Exception e) {
logger.error(e.getMessage(), e);
shops.getContent().stream().forEach(
x -> {
IpResource ipResource = ipResourceRepository.findFirstByShopIdsIsAndIsDeleted(x.getShopId(), false);
// 如果 ip资源非空 且 addr 也非空
if (ipResource != null && !StringUtils.isEmpty(ipResource.getAddr())) {
// 1. ip资源在未来七天内到期 且 ip 资源的状态不是 3(正在分配)、5(已失效)、6(未分配),则将 ip 资源设置为 2(即将过期)
if (ipResource.getValidTime() <= Instant.now().plusSeconds(60 * 60 * 24 * 7).toEpochMilli() && ipResource.getValidTime() > Instant.now().toEpochMilli()) {
if (ipResource.getStatus() != 5 && ipResource.getStatus() != 3 && ipResource.getStatus() != 6) {
ipResource.setStatus(2);
ipResourceRepository.save(ipResource);
}
// 2. ip资源在七天前到期,且 ip 资源的状态不是 3(正在分配)、6(未分配),则删除 ip 资源
} else if (ipResource.getValidTime() <= Instant.now().minusSeconds(60 * 60 * 24 * 7).toEpochMilli() && ipResource.getStatus() != 3 && ipResource.getStatus() != 6) {
if (ipResource.getIpType() == IpType.VENDOR) {
IpResourceRequestDto ipResourceRequestDto1 = new IpResourceRequestDto();
ipResourceRequestDto1.setAddr(Arrays.asList(ipResource.getAddr()));
try {
ipResourceService.deleteIp(username, ipResourceRequestDto1);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
} else {
IpResourceRequestDto ipResourceRequestDto1 = new IpResourceRequestDto();
ipResourceRequestDto1.setIpId(Arrays.asList(ipResource.getId()));
try {
ipResourceService.deleteIp(username, ipResourceRequestDto1);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
return;
// 3. ip资源到期,且 ip 资源的状态不是 3(正在分配)、6(未分配),则设置 ip 资源的状态为 1(已过期)
} else if (ipResource.getValidTime() <= Instant.now().toEpochMilli() && ipResource.getStatus() != 3 && ipResource.getStatus() != 6) {
ipResource.setStatus(1);
ipResourceRepository.save(ipResource);
// 4. 其他
} else {
if ((ipResource.getStatus() == 0 || ipResource.getStatus() == 1 || ipResource.getStatus() == 2) && ipResource.getVendor() != Vendor.local) {
ipResource.setStatus(0);
} else if (ipResource.getIpType().equals(IpType.LOCAL) && (ipResource.getStatus() == 1 || ipResource.getStatus() == 2) && ipResource.getAddr().equals("本地Ip未使用")) {
ipResource.setStatus(4);
}
ipResourceRepository.save(ipResource);
}
} else {
IpResourceRequestDto ipResourceRequestDto1 = new IpResourceRequestDto();
ipResourceRequestDto1.setIpId(Arrays.asList(ipResource.getId()));
try {
ipResourceService.deleteIp(username, ipResourceRequestDto1);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
return;
} else if (ipResource.getValidTime() <= Instant.now().toEpochMilli() && ipResource.getStatus() != 3 && ipResource.getStatus() != 6) {
ipResource.setStatus(1);
ipResourceRepository.save(ipResource);
} else {
if ((ipResource.getStatus() == 0 || ipResource.getStatus() == 1 || ipResource.getStatus() == 2) && ipResource.getVendor() != Vendor.local) {
ipResource.setStatus(0);
ipResourceRepository.save(ipResource);
} else if (ipResource.getIpType().equals(IpType.LOCAL) && (ipResource.getStatus() == 1 || ipResource.getStatus() == 2) && ipResource.getAddr().equals("本地Ip未使用")) {
ipResource.setStatus(4);
ipResourceRepository.save(ipResource);
}
}
}
if (ipResource == null) {
ipResource = new IpResource();
}
String group1 = userShopRepository.findByUsernameAndShopId(username, x.getShopId()).getGroupId();
ShopResultDto shopResultDto = null;
if (ipResource.isSpecialLine()) {
SpecialLine specialLine = specialLineRepository.findAll().get(0);
shopResultDto = ShopResultDto.of(x, group1, new IpResourceDto(ipResource, null, false, specialLine));
} else {
shopResultDto = ShopResultDto.of(x, group1, new IpResourceDto(ipResource, null, false));
}
ShopResultDto shopResultDto = getShopResultDto(username, x, ipResource);
shopResultDtos.add(shopResultDto);
});
shopResultDtos.add(shopResultDto);
}
);
Page<ShopResultDto> shopDtoPage = new PageImpl<>(shopResultDtos, pageable, shopIds.size());
shopPageResultDto.setShopList(shopDtoPage.getContent());
PageInfo pageInfo = new PageInfo();
pageInfo.setCurrentPage(shopDtoPage.getPageable().getPageNumber());
pageInfo.setTotalPages(shopDtoPage.getTotalPages());
pageInfo.setTotalItems(shopIds.size());
PageInfo pageInfo = new PageInfo(shopDtoPage.getPageable().getPageNumber(), shopDtoPage.getTotalPages(), shopIds.size());
shopPageResultDto.setShopPage(pageInfo);
return shopPageResultDto;
}
return shopPageResultDto;
}
@Override
public ShopSummary getShopSummary(String username) {
Account account = accountRepository.findByName(username);
if (account == null) {
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
}
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
ShopSummary shopSummary = new ShopSummary();
List<String> allShopIds = userShopRepository.findByUsername(username).stream()
......@@ -524,7 +505,7 @@ public class ShopServiceImpl implements ShopService {
@Override
public List<String> getShopUsers(String username, String shopId) {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
if (account.getParent() != null)
......@@ -535,7 +516,7 @@ public class ShopServiceImpl implements ShopService {
@Override
public List<String> getBatchShopUsers(String username, List<String> shopIds) {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
if (account == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
if (account.getParent() != null)
......@@ -564,4 +545,48 @@ public class ShopServiceImpl implements ShopService {
}
return shopUsers;
}
private String getShopId(String username, ShopResultDto shopResultDto) {
Shop shop = new Shop();
shopResultDto.setOwner(username);
shop.of(shopResultDto);
shop.setCreateTime(Instant.now().toEpochMilli());
String id = shopRepository.save(shop).getShopId();
return id;
}
private Page<Shop> getShopsByFilter(ShopFilterDto shopFilterDto, List<String> shopIds, Pageable pageable) {
Page<Shop> shops = null;
if (!StringUtils.isEmpty(shopFilterDto.getIpRegion())) {
List<String> filter = ipResourceRepository.findShopIdInListAndRegionLike(shopIds, false, shopFilterDto.getIpRegion())
.stream().flatMap((x -> x.getShopIds().stream())).collect(Collectors.toList());
shops = shopRepository.findByShopIdInOrderByCreateTimeDesc(filter, pageable);
}
if (!StringUtils.isEmpty(shopFilterDto.getShopAccount())) {
shops = shopRepository.findByShopIdInAndShopAccountLikeOrderByCreateTimeDesc(shopIds, shopFilterDto.getShopAccount(), pageable);
}
if (!StringUtils.isEmpty(shopFilterDto.getShopName())) {
shops = shopRepository.findByShopIdInAndShopNameLikeOrderByCreateTimeDesc(shopIds, shopFilterDto.getShopName(), pageable);
}
if (shopFilterDto.isEmpty()) {
shops = shopRepository.findByShopIdInOrderByCreateTimeDesc(shopIds, pageable);
}
return shops;
}
private ShopResultDto getShopResultDto(String username, Shop x, IpResource ipResource) {
if (ipResource == null) {
ipResource = new IpResource();
}
String group1 = userShopRepository.findByUsernameAndShopId(username, x.getShopId()).getGroupId();
ShopResultDto shopResultDto = null;
if (ipResource.isSpecialLine()) {
SpecialLine specialLine = specialLineRepository.findAll().get(0);
shopResultDto = ShopResultDto.of(x, group1, new IpResourceDto(ipResource, null, false, specialLine));
} else {
shopResultDto = ShopResultDto.of(x, group1, new IpResourceDto(ipResource, null, false));
}
return shopResultDto;
}
}
......@@ -110,79 +110,84 @@ public class BrowserTask {
List<CompletableFuture> futureList = new ArrayList<>();
for (IpResource ipResource : ipResources) {
long start = System.currentTimeMillis();
CompletableFuture future = CompletableFuture.runAsync(() -> {
if (ipResourceRepository.lockTask(ipResource)) {
try {
boolean result = false;
Map<String, String> header = buildPostHeader();
HashMap<String, Object> map = new HashMap<>();
map.put("name", ipResource.getUsername());
map.put("region", ipResource.getRegion());
map.put("period", String.valueOf(ipResource.getPeriod()));
map.put("provider", ipResource.getVendor());
map.put("unit", ipResource.getUnit());
map.put("amount", 1);
map.put("loginPassword", ipResource.getPassword());
map.put("startscript", "");
map.put("ipkeptperiod", 7);
map.put("persistSystemDiskOnTermination", false);
CompletableFuture future = CompletableFuture.runAsync(
() -> {
if (ipResourceRepository.lockTask(ipResource)) {
try {
boolean result = false;
Map<String, String> header = buildPostHeader();
HashMap<String, Object> map = new HashMap<>();
map.put("name", ipResource.getUsername());
map.put("region", ipResource.getRegion());
map.put("period", String.valueOf(ipResource.getPeriod()));
map.put("provider", ipResource.getVendor());
map.put("unit", ipResource.getUnit());
map.put("amount", 1);
map.put("loginPassword", ipResource.getPassword());
map.put("startscript", "");
map.put("ipkeptperiod", 7);
map.put("persistSystemDiskOnTermination", false);
// HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, header);
IpBuyResultDto ipBuyResultDto = null;
try {
String requestResult = HttpClientutils.doPost(URL + "/intelligroup/ipresources?accountId=browser", header, JSONObject.toJSONString(map));
ipBuyResultDto = JSONObject.parseObject(requestResult, IpBuyResultDto.class);
if (StringUtils.isNotBlank(ipBuyResultDto.getErrorCode())) {
log.error("fail to buy ip");
log.error(ipBuyResultDto.getErrorCode());
}
if (ipBuyResultDto != null && ipBuyResultDto.getIplist() != null && ipBuyResultDto.getIplist().size() >= 1) {
AtomicInteger index = new AtomicInteger();
ipBuyResultDto.getIplist().forEach(x -> {
if (ipResource != null) {
ipResource.setAddr(x.getIp());
ipResource.setStatus(3);
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli());
if (StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion())) {
ipResource.setProxyUsername(ipResource.getAddr());
ipResource.setProxyPassword(genRandom(3, 12));
ipResource.setSpecialLine(true);
}
ipResourceRepository.save(ipResource);
} else {
log.error("no ipResource");
IpBuyResultDto ipBuyResultDto = null;
try {
String requestResult = HttpClientutils.doPost(URL + "/intelligroup/ipresources?accountId=browser", header, JSONObject.toJSONString(map));
ipBuyResultDto = JSONObject.parseObject(requestResult, IpBuyResultDto.class);
if (StringUtils.isNotBlank(ipBuyResultDto.getErrorCode())) {
log.error("fail to buy ip");
log.error(ipBuyResultDto.getErrorCode());
}
index.getAndIncrement();
});
result = true;
}
} catch (Exception e) {
log.error(e.getMessage());
result = false;
}
if (result == false && (ipResource.getPurchasedTime() < Instant.now().minusSeconds(7200).toEpochMilli())) {
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResource, 3, 0);
accountService.chargeByMoney(ipResource.getUsername(), -ipResource.getPrice(), ipChargeRequestDto);
if (ipResource.getShopIds() != null && ipResource.getShopIds().size() > 0) {
ShopRequestDto shopRequestDto = new ShopRequestDto();
shopRequestDto.setIpId(ipResource.getId());
shopRequestDto.setShopIds(ipResource.getShopIds());
ipAndShopService.unBindShops(ipResource.getUsername(), shopRequestDto);
if (ipBuyResultDto != null && ipBuyResultDto.getIplist() != null && ipBuyResultDto.getIplist().size() >= 1) {
AtomicInteger index = new AtomicInteger();
ipBuyResultDto.getIplist().forEach(x -> {
if (ipResource != null) {
ipResource.setAddr(x.getIp());
ipResource.setStatus(3);
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli());
if (StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion())) {
ipResource.setProxyUsername(ipResource.getAddr());
ipResource.setProxyPassword(genRandom(3, 12));
ipResource.setSpecialLine(true);
}
ipResourceRepository.save(ipResource);
} else {
log.error("no ipResource");
}
index.getAndIncrement();
});
result = true;
}
} catch (Exception e) {
log.error(e.getMessage());
result = false;
}
if (result == false && (ipResource.getPurchasedTime() < Instant.now().minusSeconds(7200).toEpochMilli())) {
IpChargeRequestDto ipChargeRequestDto = buildIpChargeRequestDto(ipResource, 3, 0);
accountService.chargeByMoney(ipResource.getUsername(), -ipResource.getPrice(), ipChargeRequestDto);
if (ipResource.getShopIds() != null && ipResource.getShopIds().size() > 0) {
ShopRequestDto shopRequestDto = new ShopRequestDto();
shopRequestDto.setIpId(ipResource.getId());
shopRequestDto.setShopIds(ipResource.getShopIds());
ipAndShopService.unBindShops(ipResource.getUsername(), shopRequestDto);
}
ipResourceRepository.deleteById(ipResource.getId());
}
} finally {
long end = System.currentTimeMillis();
log.debug("buyIpTask {} execution time is: " + (end - start) / 1000 + "s", ipResource.getId());
try {
ipResourceRepository.unLockTask(ipResource.getId());
} catch (Throwable th) {
log.error("unlock failed", th);
//try again
ipResourceRepository.unLockTask(ipResource.getId());
}
}
ipResourceRepository.deleteById(ipResource.getId());
}
} finally {
long end = System.currentTimeMillis();
log.debug("buyIpTask {} execution time is: " + (end - start) / 1000 + "s", ipResource.getId());
try {
ipResourceRepository.unLockTask(ipResource.getId());
} catch (Throwable th) {
log.error("unlock failed", th);
//try again
ipResourceRepository.unLockTask(ipResource.getId());
}
}
}
}, ThreadPoolUtils.buyIpTasksPool);
},
ThreadPoolUtils.buyIpTasksPool
);
futureList.add(future);
}
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).join();
......@@ -195,38 +200,41 @@ public class BrowserTask {
List<IpResource> ipResources = ipResourceRepository.sampleTasks(3, time);
for (IpResource ipResource : ipResources) {
long start = System.currentTimeMillis();
CompletableFuture.runAsync(() -> {
if (ipResourceRepository.lockTask(ipResource)) {
try {
log.error("test");
String url = URL + "/ecc/ipinfo?accountId=browser&ip=" + ipResource.getAddr();
Map<String, String> header = buildGetHeader();
String rs = HttpClientutils.doGet(url, header);
IpInfoResultDto ipInfoResultDto = JSONObject.parseObject(rs, IpInfoResultDto.class);
if (ipInfoResultDto != null && StringUtils.isBlank(ipInfoResultDto.getErrorCode())) {
log.error(ipInfoResultDto.getErrorCode());
log.error(ipInfoResultDto.getStatus());
log.error(ipInfoResultDto.getEipIPAddr());
if (StringUtils.isNotEmpty(ipInfoResultDto.getStatus())) {
ipResourceRepository.updateStatus(ipResource.getId(), 0);
CompletableFuture.runAsync(
() -> {
if (ipResourceRepository.lockTask(ipResource)) {
try {
log.error("test");
String url = URL + "/ecc/ipinfo?accountId=browser&ip=" + ipResource.getAddr();
Map<String, String> header = buildGetHeader();
String rs = HttpClientutils.doGet(url, header);
IpInfoResultDto ipInfoResultDto = JSONObject.parseObject(rs, IpInfoResultDto.class);
if (ipInfoResultDto != null && StringUtils.isBlank(ipInfoResultDto.getErrorCode())) {
log.error(ipInfoResultDto.getErrorCode());
log.error(ipInfoResultDto.getStatus());
log.error(ipInfoResultDto.getEipIPAddr());
if (StringUtils.isNotEmpty(ipInfoResultDto.getStatus())) {
ipResourceRepository.updateStatus(ipResource.getId(), 0);
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
NotifyUtils.sendMessage("浏览器后端 queryIpTasks() 又炸了,赶紧看啊", e, NotifyUtils.MsgType.WEBHOOK);
} finally {
long end = System.currentTimeMillis();
log.debug("queryIpTask {} execution time is: " + (end - start) / 1000 + "s", ipResource.getId());
try {
ipResourceRepository.unLockTask(ipResource.getId());
} catch (Throwable th) {
log.error("unlock failed", th);
//try again
ipResourceRepository.unLockTask(ipResource.getId());
}
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
NotifyUtils.sendMessage("浏览器后端 queryIpTasks() 又炸了,赶紧看啊", e, NotifyUtils.MsgType.WEBHOOK);
} finally {
long end = System.currentTimeMillis();
log.debug("queryIpTask {} execution time is: " + (end - start) / 1000 + "s", ipResource.getId());
try {
ipResourceRepository.unLockTask(ipResource.getId());
} catch (Throwable th) {
log.error("unlock failed", th);
//try again
ipResourceRepository.unLockTask(ipResource.getId());
}
}
}
}, ThreadPoolUtils.queryIpTasksPool);
},
ThreadPoolUtils.queryIpTasksPool
);
}
}
......@@ -310,16 +318,18 @@ public class BrowserTask {
public void countIp() {
List<Account> accounts = accountRepository.findAll();
try {
accounts.forEach(x -> {
IpCountRecord ipCountRecord = new IpCountRecord();
ipCountRecord.setUsername(x.getName());
ipCountRecord.setTimestamp(Instant.now().toEpochMilli());
long ipcount_using = ipResourceRepository.countAllByOwnerAndIsDeletedAndValidTimeGreaterThan(x.getName(), false, Instant.now().toEpochMilli());
long ipcount_all = ipResourceRepository.countAllByOwner(x.getName());
ipCountRecord.setIp_all(ipcount_all);
ipCountRecord.setIp_using(ipcount_using);
ipCountRecordRepository.save(ipCountRecord);
});
accounts.forEach(
x -> {
IpCountRecord ipCountRecord = new IpCountRecord();
ipCountRecord.setUsername(x.getName());
ipCountRecord.setTimestamp(Instant.now().toEpochMilli());
long ipcount_using = ipResourceRepository.countAllByOwnerAndIsDeletedAndValidTimeGreaterThan(x.getName(), false, Instant.now().toEpochMilli());
long ipcount_all = ipResourceRepository.countAllByOwner(x.getName());
ipCountRecord.setIp_all(ipcount_all);
ipCountRecord.setIp_using(ipcount_using);
ipCountRecordRepository.save(ipCountRecord);
}
);
IpCountRecord ipCountRecord = new IpCountRecord();
ipCountRecord.setUsername("all");
ipCountRecord.setTimestamp(Instant.now().toEpochMilli());
......@@ -371,20 +381,5 @@ public class BrowserTask {
response.close();
return rs;
}
}
public static void main(String[] args) throws IOException {
List<QueryIpUrlList> queryIpUrlLists = new ArrayList<>();
queryIpUrlLists.add(new QueryIpUrlList("1", "baidu"));
queryIpUrlLists.add(new QueryIpUrlList("2", "google"));
for (int i = 0; i < 10; i++) {
System.out.println(getNextUrl(queryIpUrlLists, i).getUrl());
}
}
}
......@@ -2,9 +2,11 @@ package com.edgec.browserbackend.browser.task;
import com.alibaba.fastjson.JSONObject;
import com.edgec.browserbackend.account.domain.Account;
import com.edgec.browserbackend.account.exception.AccountErrorCode;
import com.edgec.browserbackend.account.repository.AccountRepository;
import com.edgec.browserbackend.browser.domain.IpResource;
import com.edgec.browserbackend.browser.repository.IpResourceRepository;
import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.commons.utils.SmsUtils;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -56,7 +58,7 @@ public class ExpireSoonWarn {
}
private void sendToAccount(String username, int day, int amount, List<String> ips) {
Account account = accountRepository.findByName(username);
Account account = accountRepository.findByName(username).orElseThrow(() -> new ClientRequestException(AccountErrorCode.NAMENOTEXIST));
JSONObject param = new JSONObject();
param.put("day", day);
param.put("amount", amount);
......
......@@ -29,7 +29,7 @@ public class PaymentTask {
@Scheduled(fixedDelay = 60000)
public void checkPayments() {
long now = new Date().getTime();
long now = System.currentTimeMillis();
Date date_5min = new Date(now - 5 * 60 * 1000);
Date date_10min = new Date(now - 10 * 60 * 1000);
List<UserPayment> unfinishedPayments = userPaymentRepository.findAllByPaymentDateBetweenAndSucceed(
......
package com.edgec.browserbackend.common.commons.kafka;
@Deprecated
public final class KafkaUtils {
public static final String TOPIC_NAME_C3_MINIONS = "tp.minions.c3";
public static final String CONSUMER_GROUP_C3_MINIONS = "cg.minions.c3";
public static final TopicDef TOPIC_C3_MINIONS = new TopicDef(TOPIC_NAME_C3_MINIONS, 12, 2);
public static final TopicDef TOPIC_C3_MINIONS = new TopicDef(TOPIC_NAME_C3_MINIONS, 12, 2);
public static class TopicDef {
......
package com.edgec.browserbackend.common.commons.utils;
@Deprecated
public class CommonStringUtils {
public static int getLongestCommonSubstring(String a, String b) {
......@@ -10,16 +11,16 @@ public class CommonStringUtils {
int[][] dp = new int[m][n];
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(a.charAt(i) == b.charAt(j)){
if(i==0 || j==0){
dp[i][j]=1;
}else{
dp[i][j] = dp[i-1][j-1]+1;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (a.charAt(i) == b.charAt(j)) {
if (i == 0 || j == 0) {
dp[i][j] = 1;
} else {
dp[i][j] = dp[i - 1][j - 1] + 1;
}
if(max < dp[i][j])
if (max < dp[i][j])
max = dp[i][j];
}
......
package com.edgec.browserbackend.common.commons.utils;
@Deprecated
public final class Pair<S, T> {
private S first;
......
......@@ -3,6 +3,7 @@ package com.edgec.browserbackend.common.commons.utils;
import java.util.Comparator;
import java.util.concurrent.*;
@Deprecated
public class PriorityThreadPoolExecutor extends ThreadPoolExecutor {
private Comparator comparator;
......
......@@ -9,16 +9,23 @@ import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
@Deprecated
public class RemoteShellExecutor {
private Logger logger = LoggerFactory.getLogger(RemoteShellExecutor.class);
private Connection conn;
/** 远程机器IP */
/**
* 远程机器IP
*/
private String ip;
/** 用户名 */
/**
* 用户名
*/
private String osUsername;
/** 密码 */
/**
* 密码
*/
private String password;
private String charset = Charset.defaultCharset().toString();
......@@ -33,6 +40,7 @@ public class RemoteShellExecutor {
/**
* 登录
*
* @return
* @throws IOException
*/
......@@ -182,18 +190,16 @@ public class RemoteShellExecutor {
// 6. 关闭输入流
out.close();
// 7. 等待,除非1.连接关闭;2.输出数据传送完毕;3.进程状态为退出;4.超时
session.waitForCondition(ChannelCondition.CLOSED | ChannelCondition.EOF | ChannelCondition.EXIT_STATUS , 30000);
session.waitForCondition(ChannelCondition.CLOSED | ChannelCondition.EOF | ChannelCondition.EXIT_STATUS, 30000);
logger.error("Here is the output from stdout:");
while (true)
{
while (true) {
String line = stdoutReader.readLine();
if (line == null)
break;
System.out.println(line);
}
logger.error("Here is the output from stderr:");
while (true)
{
while (true) {
String line = stderrReader.readLine();
if (line == null)
break;
......@@ -253,18 +259,16 @@ public class RemoteShellExecutor {
scpOutputStream.flush();
scpOutputStream.close();
session.waitForCondition(ChannelCondition.CLOSED | ChannelCondition.EOF | ChannelCondition.EXIT_STATUS , 30000);
session.waitForCondition(ChannelCondition.CLOSED | ChannelCondition.EOF | ChannelCondition.EXIT_STATUS, 30000);
logger.error("Here is the output from stdout:");
while (true)
{
while (true) {
String line = stdoutReader.readLine();
if (line == null)
break;
System.out.println(line);
}
logger.error("Here is the output from stderr:");
while (true)
{
while (true) {
String line = stderrReader.readLine();
if (line == null)
break;
......@@ -278,7 +282,7 @@ public class RemoteShellExecutor {
} catch (IOException e) {
logger.error(e.getMessage());
throw new Exception("登录远程机器失败" + ip);
}finally {
} finally {
if (conn != null) {
conn.close();
}
......
......@@ -10,6 +10,7 @@ import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Iterator;
@Deprecated
public class TimestampUtils {
......
......@@ -2,6 +2,7 @@ package com.edgec.browserbackend.common.commons.utils;
import java.util.UUID;
@Deprecated
public class UUIDGenerator {
public static String gen(Boolean withoutDashes) {
return withoutDashes ? UUID.randomUUID().toString().replace("-", "")
......
package com.edgec.browserbackend.common.constant;
@Deprecated
public interface InstanceStatus {
String STOPPING = "Stopping";
......
......@@ -5,51 +5,31 @@ import java.lang.reflect.Modifier;
import java.util.HashSet;
import java.util.Set;
@Deprecated
public class SpecialUsers {
public static final Set<String> CLOUDAM_USERS = new HashSet<>();
public static final String VPS_CLOUD_ACCOUNT_NAME = "vpsclient";
public static final String CVM_CLOUD_ACCOUNT_NAME = "cvmclient";
public static final String C3_ECC_ACCOUNT_NAME = "eccclient"; // 电商云集群
public static final String C3_IP_ACCOUNT_NAME = "c3ipclient"; //c3 ip云
public static final String SUPERBROWSER = "superbrowser";
public static final String ECOMMERCEBROWSER = "ecommercebrowser";
public static final String JKBROWSER = "jkbrowser";
/**
* 电商云集群
*/
public static final String C3_ECC_ACCOUNT_NAME = "eccclient";
/**
* c3 ip云
*/
public static final String C3_IP_ACCOUNT_NAME = "c3ipclient";
public static final String SUPER_BROWSER = "superbrowser";
public static final String ECOMMERCE_BROWSER = "ecommercebrowser";
//新增用户名写在上边
public static void main(String[] args) {
for (String cloudamUser : CLOUDAM_USERS) {
System.out.println(cloudamUser);
}
}
public static final String JK_BROWSER = "jkbrowser";
static {
Field[] fields = SpecialUsers.class.getFields();
......@@ -69,5 +49,4 @@ public class SpecialUsers {
}
}
}
package com.edgec.browserbackend.common.dto;
import lombok.Data;
@Deprecated
@Data
public class BaseResponse<T> {
private String requestId;
......@@ -7,38 +11,4 @@ public class BaseResponse<T> {
private String message;
private T data;
public String getRequestId() {
return requestId;
}
public void setRequestId(String requestId) {
this.requestId = requestId;
}
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
package com.edgec.browserbackend.common.dto;
@Deprecated
public enum Result {
SUCCESS,
......
......@@ -10,11 +10,20 @@ import javax.crypto.spec.SecretKeySpec;
import java.math.BigInteger;
import java.util.Base64;
/**
* @author cloudam
* aes加解密工具类
*/
public class Aes {
//密钥 (需要前端和后端保持一致)
/**
* 密钥 (需要前端和后端保持一致)
*/
private static final String KEY = "iefWFOAjfwefnWEI";
//算法
/**
* 算法
*/
private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";
/**
......@@ -144,6 +153,7 @@ public class Aes {
}
private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
/**
* 测试
*/
......
......@@ -16,11 +16,16 @@ import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.StringWriter;
import java.lang.reflect.Method;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Json工具类
*/
@Deprecated
public class JsonUtils {
private static final ObjectMapper mapper = new ObjectMapper();
......@@ -53,12 +58,12 @@ public class JsonUtils {
}
@SuppressWarnings("unchecked")
public static HashMap<String,String> toBeanStr(String json) {
public static HashMap<String, String> toBeanStr(String json) {
return toBean(json, HashMap.class);
}
@SuppressWarnings("unchecked")
public static <T> T toBean(String json, TypeReference<T> tr){
public static <T> T toBean(String json, TypeReference<T> tr) {
try {
T bean = (T) mapper.readValue(json, tr);
return bean;
......@@ -129,9 +134,9 @@ public class JsonUtils {
/**
* json字符串转换为List
*/
public static <T> List<T>json2ListBean(String json,Class<T>cls){
JSONArray jArray= JSONArray.parseArray(json);
List<T> collection =jArray.toJavaList(cls);
public static <T> List<T> json2ListBean(String json, Class<T> cls) {
JSONArray jArray = JSONArray.parseArray(json);
List<T> collection = jArray.toJavaList(cls);
return collection;
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.edgec.browserbackend.common.utils;
import java.time.Instant;
@Deprecated
public class PollerUtils {
public static void poll(int timeoutInSeconds, int intervalInSeconds, Evaluator evaluator) {
......@@ -12,7 +13,7 @@ public class PollerUtils {
while (!result) {
long end = Instant.now().toEpochMilli();
if((end - start) > timeoutInSeconds * 1000)
if ((end - start) > timeoutInSeconds * 1000)
return;
try {
Thread.sleep(intervalInSeconds * 1000);
......
package com.edgec.browserbackend.common.utils;
import com.edgec.browserbackend.common.commons.utils.PriorityThreadPoolExecutor;
import com.edgec.browserbackend.common.commons.utils.UniquePriorityBlockingQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.*;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public abstract class ThreadPoolUtils {
private static final Logger log = LoggerFactory.getLogger(ThreadPoolUtils.class);
public static final BlockingQueue<Runnable> schedulerQueue = new UniquePriorityBlockingQueue<>(50);
......
......@@ -21,11 +21,18 @@ import java.io.IOException;
public class Trans {
private final Logger logger = LoggerFactory.getLogger(Trans.class);
static int timeout = 10 * 1000;// 以秒为单位
private static String specialHost = "39.108.183.128";
private static int specialPort = 20008;
/**
* 以秒为单位
*/
static int timeout = 10 * 1000;
private static final String SPECIAL_HOST = "39.108.183.128";
private static final int SPECIAL_PORT = 20008;
private String host;
private int port;
private String username;
private String password;
......@@ -37,8 +44,8 @@ public class Trans {
}
public Trans(String username, String password) {
this.host = specialHost;
this.port = specialPort;
this.host = SPECIAL_HOST;
this.port = SPECIAL_PORT;
this.password = password;
this.username = username;
}
......@@ -72,11 +79,11 @@ public class Trans {
//设置代理IP,设置连接超时时间 、 设置 请求读取数据的超时时间 、 设置从connect Manager获取Connection超时时间、
RequestConfig requestConfig = RequestConfig.custom()
.setProxy(proxy)
.setConnectTimeout(5000)
.setSocketTimeout(5000)
.setConnectionRequestTimeout(5000)
.build();
.setProxy(proxy)
.setConnectTimeout(5000)
.setSocketTimeout(5000)
.setConnectionRequestTimeout(5000)
.build();
httpGet.setConfig(requestConfig);
//执行
......
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