Commit 1091834e authored by renjie's avatar renjie

分配店铺接口

子用户接口
parent e49a4064
......@@ -49,11 +49,6 @@ public class AccountController {
private static final Logger logger = LoggerFactory.getLogger(AccountController.class);
@RequestMapping(path = "/precharge/{name}", method = RequestMethod.POST)
public IpChargeResultDto preCharge(@PathVariable String name, @RequestBody IpChargeRequestDto requestDto) {
return accountService.preCharge(name, requestDto);
}
@RequestMapping(path = "/prechargeIp/{name}/{amount}/{money}", method = RequestMethod.POST)
public IpChargeResultDto preChargeIp(@PathVariable String name, @PathVariable int amount, @PathVariable double money) {
return accountService.preChargeIp(name, amount, money);
......@@ -64,11 +59,6 @@ public class AccountController {
return accountService.preChargeByMoney(name, money);
}
@RequestMapping(path = "/charge/{name}", method = RequestMethod.PUT)
public IpChargeResultDto charge(@PathVariable String name, @RequestBody IpChargeRequestDto requestDto) {
return accountService.charge(name, requestDto);
}
@RequestMapping(path = "/charge/money", method = RequestMethod.PUT)
public IpChargeResultDto chargeByMoney(@RequestParam("accountId") String name, @RequestParam("money") double money, @RequestBody IpChargeRequestDto requestDto) {
return accountService.chargeByMoney(name, money, requestDto);
......@@ -344,17 +334,6 @@ public class AccountController {
return accountService.getAccountByCellphone(cellphone);
}
@RequestMapping(path = "/fee/{region}/{instanceSpecKey}/{chargeType}", method = RequestMethod.GET)
@Deprecated
public String queryVpsRate(@PathVariable String region, @PathVariable String instanceSpecKey, @PathVariable String chargeType) {
return accountService.queryVpsRate(region, instanceSpecKey, chargeType);
}
@RequestMapping(path = "/charge/rate/{username}", method = RequestMethod.POST)
public String queryUserChargeRate(@PathVariable String username, @RequestBody IpChargeRequestDto requestDto) {
return accountService.queryUserChargeRate(username, requestDto);
}
@RequestMapping(path = "/fee/userprepaidbilling", method = RequestMethod.GET)
public Page<UserPrePaidBilling> queryPerPaid(@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "10") int size,
......@@ -408,11 +387,6 @@ public class AccountController {
return accountService.listAccountBySingupDate(pageable, beginDate, endDate);
}
@RequestMapping(path = "/preorder/{userName}", method = RequestMethod.POST)
public IpChargeResultDto preOrderOption(@PathVariable String userName, @RequestBody IpChargeRequestDto requestDto) {
return accountService.preOrder(userName, requestDto);
}
@RequestMapping(path = "/preorder/delete/{username}", method = RequestMethod.POST)
public String deletePreOrder( @PathVariable("username") String username) {
return accountService.deletePreOrder(username);
......
......@@ -3,7 +3,9 @@ package com.edgec.browserbackend.account.controller;
import com.edgec.browserbackend.account.domain.Account;
import com.edgec.browserbackend.account.domain.AccountDto;
import com.edgec.browserbackend.account.dto.ResultDto;
import com.edgec.browserbackend.account.dto.SubUsersRequestDto;
import com.edgec.browserbackend.account.service.AccountService;
import com.edgec.browserbackend.browser.dto.ShopRequestDto;
import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -38,6 +40,23 @@ public class AdminController {
return resultDto;
}
@RequestMapping(path = "/subuser/add", method = RequestMethod.POST)
public ResultDto createSubUsers(Principal principal, @RequestBody SubUsersRequestDto subUsersRequestDto) {
ResultDto resultDto = new ResultDto();
try {
LimitedUsers.filterIfLimitedUser(principal);
accountService.createSubUsers(principal.getName(), subUsersRequestDto);
resultDto.setStatus(0);
} catch (ClientRequestException e) {
resultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
}
return resultDto;
}
@RequestMapping(path = "/subuser/updateone", method = RequestMethod.PUT)
public ResultDto saveSubAccount(Principal principal, @PathVariable String child, @Valid @RequestBody AccountDto user) {
ResultDto resultDto = new ResultDto();
......@@ -56,6 +75,23 @@ public class AdminController {
return resultDto;
}
@RequestMapping(path = "/subuser/update", method = RequestMethod.POST)
public ResultDto saveSubUsers(Principal principal, @RequestBody SubUsersRequestDto subUsersRequestDto) {
ResultDto resultDto = new ResultDto();
try {
LimitedUsers.filterIfLimitedUser(principal);
accountService.saveSubUsers(principal.getName(), subUsersRequestDto);
resultDto.setStatus(0);
} catch (ClientRequestException e) {
resultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
}
return resultDto;
}
@RequestMapping(path = "/subuser/del", method = RequestMethod.DELETE)
public ResultDto deleteSubAccount(Principal principal, @PathVariable String child) {
ResultDto resultDto = new ResultDto();
......@@ -73,4 +109,23 @@ public class AdminController {
return resultDto;
}
@RequestMapping(path = "/subuser/list", method = RequestMethod.POST)
public ResultDto getSubUserList(Principal principal, @RequestBody ShopRequestDto shopRequestDto) {
ResultDto resultDto = new ResultDto();
try {
LimitedUsers.filterIfLimitedUser(principal);
resultDto.setData(accountService.getSubUserList(principal.getName(), shopRequestDto.getPage(), shopRequestDto.getAmount()));
resultDto.setStatus(0);
}catch (ClientRequestException e) {
resultDto.setStatus(-1);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
}
return resultDto;
}
}
......@@ -23,6 +23,8 @@ public class Account {
private Date signupDate = new Date();
private String nickname;
private String email;
private String companyName;
......@@ -43,6 +45,8 @@ public class Account {
private Promotion promotion;
private String comment;
private List<String> whiteList = Arrays.asList(
"amazon.com",
"amazon.jp",
......@@ -272,4 +276,20 @@ public class Account {
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;
}
}
package com.edgec.browserbackend.account.dto;
import com.edgec.browserbackend.browser.dto.PageInfo;
import java.util.ArrayList;
import java.util.List;
/**
* @Desc
* @Author jason
* @CreateTime 2020/3/13 5:44 下午
**/
public class SubUserPageResultDto {
List<SubUsersDto> userList = new ArrayList<>();
PageInfo userPage = new PageInfo();
public List<SubUsersDto> getUserList() {
return userList;
}
public void setUserList(List<SubUsersDto> userList) {
this.userList = userList;
}
public PageInfo getUserPage() {
return userPage;
}
public void setUserPage(PageInfo userPage) {
this.userPage = userPage;
}
}
package com.edgec.browserbackend.account.dto;
import com.edgec.browserbackend.account.domain.Account;
/**
* @Desc
* @Author jason
* @CreateTime 2020/3/13 5:37 下午
**/
public class SubUsersDto {
private String username;
private String nickname;
private int permission;
private String comment;
public SubUsersDto(Account account) {
this.permission = account.getPermission();
this.nickname = account.getNickname();
this.username = account.getName();
this.comment = account.getComment();
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public int getPermission() {
return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
package com.edgec.browserbackend.account.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;
/**
* @Desc
* @Author jason
* @CreateTime 2020/3/13 2:37 下午
**/
@JsonIgnoreProperties(ignoreUnknown = true)
public class SubUsersRequestDto {
private int amount;
private String password;
private int permission;
private String nickname;
private int permisson;
private String comment;
private List<String> usernames;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public int getPermission() {
return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getPermisson() {
return permisson;
}
public void setPermisson(int permisson) {
this.permisson = permisson;
}
public List<String> getUsernames() {
return usernames;
}
public void setUsernames(List<String> usernames) {
this.usernames = usernames;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
......@@ -20,7 +20,7 @@ public interface AccountRepository extends MongoRepository<Account, String>, Acc
List<Account> findByParent(String parent);
Page<Account> findByParentIsNull(Pageable request);
Page<Account> findByParent(String parent, Pageable pageable);
Page<Account> findAllBySignupDateBetween(Pageable pageable, Date startDate, Date endDate);
......
package com.edgec.browserbackend.account.service;
import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.dto.ResultDto;
import com.edgec.browserbackend.account.dto.BillQueryCriteriaDto;
import com.edgec.browserbackend.account.dto.*;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
......@@ -47,6 +46,8 @@ public interface AccountService {
Account createSub(String name, AccountDto user);
void createSubUsers(String name, SubUsersRequestDto subUsersRequestDto);
void deleteSub(String parent, String child);
void deleteByName(String name);
......@@ -55,22 +56,22 @@ public interface AccountService {
Account saveSub(String name, AccountDto user);
void saveSubUsers(String name, SubUsersRequestDto subUsersRequestDto);
List<UserDto> getAllDesendentUsers(String name, int level);
SubUserPageResultDto getSubUserList(String name, int page, int amount);
List<UserBillList> getUserBills0(String name);
List<UserBillList> getUserBills(String name, Services services);
void resetPasswordWithOtp(UserDto user);
IpChargeResultDto preCharge(String name, IpChargeRequestDto requestDto);
IpChargeResultDto preChargeByMoney(String name, double money);
IpChargeResultDto preChargeIp(String name, int amount, double money);
IpChargeResultDto charge(String name, IpChargeRequestDto requestDto);
IpChargeResultDto chargeByMoney(String name, double money, IpChargeRequestDto requestDto);
Page<UserPayment> getUserPayment(Pageable pageable, String username);
......@@ -79,10 +80,6 @@ public interface AccountService {
AccountDto getAccountByCellphone(String cellphone);
String queryVpsRate(String region, String instanceSpecKey, String chargeType);
String queryUserChargeRate(String username, IpChargeRequestDto requestDto);
Page<UserPrePaidBilling> listPrepaid(Pageable pageable, String username, String[] chargeType, int year, int month, int day, String zoneId);
Page<UserPrePaidBilling> listBills(Pageable pageable, String username, BillQueryCriteriaDto billQueryCriteriaDto, String dateFrom, String dateTo, String zoneId);
......@@ -91,8 +88,6 @@ public interface AccountService {
List<UserBillList> findOverviewByYearAndMonth(String username, int year, int mont, String zoneId, Services service);
IpChargeResultDto preOrder(String userName, IpChargeRequestDto requestDto);
String deletePreOrder(String userName);
List<Invoice> findByUsername(String username);
......
package com.edgec.browserbackend.account.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.edgec.browserbackend.account.dto.ResultDto;
import com.edgec.browserbackend.account.dto.CvmChargeRegion;
import com.edgec.browserbackend.account.dto.*;
import com.edgec.browserbackend.account.service.AccountService;
import com.edgec.browserbackend.account.service.PaymentService;
import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.dto.BillQueryCriteriaDto;
import com.edgec.browserbackend.account.exception.AccountErrorCode;
import com.edgec.browserbackend.account.repository.*;
import com.edgec.browserbackend.account.service.EmailService;
import com.edgec.browserbackend.account.utils.AccountServicePool;
import com.edgec.browserbackend.auth.exception.AuthErrorCode;
import com.edgec.browserbackend.auth.repository.UserRepository;
import com.edgec.browserbackend.auth.service.UserAuthService;
import com.edgec.browserbackend.browser.ErrorCode.BrowserErrorCode;
import com.edgec.browserbackend.common.charge.ChargeType;
import com.edgec.browserbackend.browser.dto.PageInfo;
import com.edgec.browserbackend.browser.dto.ShopPageResultDto;
import com.edgec.browserbackend.browser.dto.ShopResultDto;
import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import com.edgec.browserbackend.common.commons.utils.CommonStringUtils;
import com.edgec.browserbackend.common.commons.utils.SmsUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -33,7 +34,6 @@ import java.time.Instant;
import java.time.YearMonth;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.regex.Pattern;
......@@ -87,6 +87,9 @@ public class AccountServiceImpl implements AccountService {
@Autowired
private UserAuthService userAuthService;
@Autowired
private UserRepository userRepository;
@Override
public List<UserBillList> getUserBills0(String name) {
......@@ -132,66 +135,6 @@ public class AccountServiceImpl implements AccountService {
return result;
}
@Override
public IpChargeResultDto charge(String name, IpChargeRequestDto requestDto) {
IpChargeResultDto charge = new IpChargeResultDto();
CompletableFuture.runAsync(() -> {
charge.setApprovedAmount(0);
charge.setSuccess(true);
Account account = repository.findByName(name);
if (account != null) {
UserBalance userBalance = userBalanceRepository.findById(name).orElse(null);
if (userBalance == null) {
userBalance = new UserBalance();
userBalance.setBalanced(0);
userBalance.setUsed(0);
userBalance.setUsername(name);
userBalanceRepository.save(userBalance);
}
int amount = requestDto.getAmount();
int period = requestDto.getPeriod();
float rate = getRate(name, requestDto);
float totalCharge = amount * period * rate;
userBalanceRepository.incrementBalance(userBalance, -totalCharge, totalCharge);
userBalance = userBalanceRepository.findById(name).orElse(null);
charge.setApprovedAmount(amount);
charge.setBalance(Math.round(userBalance.getBalanced()));
charge.setSuccess(true);
UserPrePaidBilling bill = new UserPrePaidBilling();
bill.setAmount(requestDto.getAmount());
bill.setServices(Services.valueOf(requestDto.getServices()));
bill.setStatus(BillStatus.PAID);
bill.setPrepaid(true);
bill.setRate(rate);
bill.setPeriod(period);
bill.setUsername(name);
bill.setTotal(totalCharge);
bill.setTimestamp(Instant.now().toEpochMilli());
bill.setUnit(requestDto.getUnit());
bill.setChargeType(requestDto.getChargeType());
bill.setTarget(requestDto.getTarget());
final YearMonth lastmonth = YearMonth.now();
int monthValue = lastmonth.getMonthValue();
int year = lastmonth.getYear();
bill.setYear(year);
bill.setMonth(monthValue);
prePaidBillingRepository.save(bill);
}
}, AccountServicePool.taskPool).join();
return charge;
}
@Override
public IpChargeResultDto chargeByMoney(String name, double money, IpChargeRequestDto requestDto) {
IpChargeResultDto charge = new IpChargeResultDto();
......@@ -245,66 +188,6 @@ public class AccountServiceImpl implements AccountService {
}
//0 -- newip, 1 --renew, 2 --ipkeptfee, 3 --deleteip
private float getRate(String name, IpChargeRequestDto requestDto) {
int chargeType = requestDto.getChargeType();
String region = requestDto.getRegion();
if (requestDto.getUnit().equals("hour"))
return 0;
switch (chargeType) {
case 0: //newip unit 'month'
case 1: //renew
//use 0 as charge type for ip rate
return tryToFindClosedRate(name, region, 0);
case 2: //ipkeptfee, unit 'day'
//use 2 as charge type for ipkept rate
return tryToFindClosedRate(name, region, 2);
case 3: //deleteip
//use 0 as charge type for ip rate
float ipratePerMonth = tryToFindClosedRate(name, region, 0);
/**
* Deleteip need to refund fee for remaining hours, use minus and hour rate
* for this purpose
*/
float ratePerHour = -ipratePerMonth / (requestDto.getDaysPerMonth() > 0 ? (requestDto.getDaysPerMonth() * 24) : 730);
return ratePerHour;
case 4: //stopinstanceonly
case 5: //startinstanceonly
/**
* Stopinstanceonly need to refund 'instance' fee for remaining hours, use minus and hour rate
* for this purpose.
* 'instance' fee is calculated as 'iprate - ipkeptrate'.
*/
//use 0 as charge type for ip rate
ipratePerMonth = tryToFindClosedRate(name, region, 0);
float ipkeptratePerDay = tryToFindClosedRate(name, region, 2);
float instanceonlyRatePerHour = ipratePerMonth / (requestDto.getDaysPerMonth() > 0 ? (requestDto.getDaysPerMonth() * 24) : 730) - ipkeptratePerDay / 24;
if (chargeType == 4)
return -instanceonlyRatePerHour;
else
return instanceonlyRatePerHour;
case 6: //refundipkeptfee, unit 'hour'
ipkeptratePerDay = tryToFindClosedRate(name, region, 2);
float ipkeptratePerHour = ipkeptratePerDay / 24;
return -ipkeptratePerHour;
case ChargeType.newcvm:
case ChargeType.renewcvm:
case ChargeType.resetcvm:
return findCvmRate(name, region, ChargeType.newcvm);
case ChargeType.cvmsnapshot:
String result = requestDto.getRegion();
float rate = Float.valueOf(result);
return rate;
}
throw new IllegalArgumentException("Charge type is not supported yet");
}
private float findCvmRate(String name, String region, int usedChargeType) {
CvmChargeRegion cvmChargeRegion = JSONObject.parseObject(region, CvmChargeRegion.class);
float defaulRate = cvmChargeRegion.getDefaultRate();
......@@ -349,47 +232,6 @@ public class AccountServiceImpl implements AccountService {
}
}
@Override
public IpChargeResultDto preOrder(String userName, IpChargeRequestDto requestDto) {
IpChargeResultDto precharge = new IpChargeResultDto();
precharge.setApprovedAmount(0);
precharge.setSuccess(false);
//把当前请求加入预订单表,在charge完删除
PreOrder preOrder2 = new PreOrder();
preOrder2.setTradeNo(requestDto.getTradeNo());
preOrder2.setUserName(userName);
preOrder2.setAmount(0F);
preOrder2.setTime(System.currentTimeMillis());
preOrder2 = preOrderRepository.save(preOrder2);
//查询当前用户所有预订单,并且查询用户的账户余额
Long preMinutes = Instant.now().minus(1, ChronoUnit.MINUTES).toEpochMilli();
List<PreOrder> preOrderByUserName = preOrderRepository.findPreOrderByUserNameAndTimeGreaterThanEqual(userName, preMinutes);
UserBalance userBalance = userBalanceRepository.findById(userName).orElse(null);
float balance = 0;
if (userBalance != null)
balance = userBalance.getBalanced();
int amount = requestDto.getAmount();
int period = requestDto.getPeriod();
float rate = getRate(userName, requestDto);
float totalCharge = amount * period * rate;
//订单数多于一个就放弃
if (preOrderByUserName.size() > 1) {
precharge.setBalance(Math.round(balance));
preOrderRepository.deleteById(preOrder2.getTradeNo());
return precharge;
}
//如果余额足以支付当前次的请求
if (balance >= totalCharge) {
precharge.setApprovedAmount(requestDto.getAmount());
precharge.setBalance(Math.round(balance - totalCharge));
precharge.setSuccess(true);
} else {
precharge.setBalance(Math.round(balance));
}
return precharge;
}
@Override
public String deletePreOrder(String username) {
List<PreOrder> preOrders = preOrderRepository.findPreOrderByUserName(username);
......@@ -401,39 +243,6 @@ public class AccountServiceImpl implements AccountService {
return "success";
}
@Override
public IpChargeResultDto preCharge(String name, IpChargeRequestDto requestDto) {
IpChargeResultDto precharge = new IpChargeResultDto();
CompletableFuture.runAsync(() -> {
precharge.setApprovedAmount(0);
precharge.setSuccess(false);
Account account = repository.findByName(name);
if (account != null) {
UserBalance userBalance = userBalanceRepository.findById(name).orElse(null);
float balance = 0;
if (userBalance != null)
balance = userBalance.getBalanced();
int amount = requestDto.getAmount();
int period = requestDto.getPeriod();
float rate = getRate(name, requestDto);
float totalCharge = amount * period * rate;
if (balance >= totalCharge) {
precharge.setApprovedAmount(amount);
precharge.setBalance(Math.round(balance - totalCharge));
precharge.setSuccess(true);
} else {
precharge.setBalance(Math.round(balance));
}
}
}, AccountServicePool.taskPool).join();
return precharge;
}
@Override
public IpChargeResultDto preChargeByMoney(String name, double money) {
IpChargeResultDto precharge = new IpChargeResultDto();
......@@ -707,6 +516,32 @@ public class AccountServiceImpl implements AccountService {
return collect;
}
@Override
public SubUserPageResultDto getSubUserList(String name, int page, int amount) {
if (amount > 100)
amount = 100;
Pageable pageable = PageRequest.of(page, amount);
Page<Account> accounts = repository.findByParent(name, pageable);
SubUserPageResultDto subUserPageResultDto = new SubUserPageResultDto();
if (accounts == null || accounts.getNumberOfElements() <= 0)
return subUserPageResultDto;
List<SubUsersDto> subUsersDtoList = new ArrayList<>();
accounts.getContent().forEach(x -> {
subUsersDtoList.add(new SubUsersDto(x));
});
subUserPageResultDto.setUserList(subUsersDtoList);
PageInfo pageInfo = new PageInfo();
pageInfo.setTotalItems((int)accounts.getTotalElements());
pageInfo.setCurrentPage(accounts.getNumber());
pageInfo.setTotalPages(accounts.getTotalPages());
subUserPageResultDto.setUserPage(pageInfo);
return subUserPageResultDto;
}
public Account createSub(String name, AccountDto user) {
Account existing = repository.findByName(name);
if (existing == null)
......@@ -760,6 +595,60 @@ public class AccountServiceImpl implements AccountService {
return account;
}
@Override
public void createSubUsers(String name, SubUsersRequestDto subUsersRequestDto) {
Account existing = repository.findByName(name);
if (existing == null)
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST, "account does not exist: " + name);
if (!existing.isAllowedToCreateSubUser() && !StringUtils.isEmpty(existing.getParent()))
throw new ClientRequestException(AccountErrorCode.NOTALLOWEDTOCREATESUBUSER, "Not allowed to create sub user");
if (existing.getChildCount() + subUsersRequestDto.getAmount() >= 1000) {
throw new ClientRequestException(AccountErrorCode.CHILDMAX, "account cannot have more children");
}
int nameNumber = existing.getChildCount();
int time = subUsersRequestDto.getAmount();
for (int i = 0; i < time; i++) {
if (nameNumber >= 1000)
throw new ClientRequestException(AccountErrorCode.CHILDMAX, "account cannot have more children");
AccountDto user = new AccountDto();
nameNumber++;
if (nameNumber < 10)
user.setName(existing.getName() + "00" + nameNumber);
else if (nameNumber < 100)
user.setName(existing.getName() + "0" + nameNumber);
else
user.setName(existing.getName() + nameNumber);
Account child = repository.findByName(user.getName());
if (child != null) {
time++;
continue;
}
User authUser = new User();
authUser.setUsername(user.getName());
authUser.setPassword(subUsersRequestDto.getPassword());
authUser.setPhone(existing.getPhoneNumber());
authUser.setEnabled(true);
authUser.setPermission(subUsersRequestDto.getPermission());
userAuthService.create(new com.edgec.browserbackend.auth.domain.User(authUser));
Account account = new Account(user);
account.setPhoneNumber(existing.getPhoneNumber());
account.setParent(name);
repository.save(account);
// emailService.sendEmailVerification(user.getUsername(), user.getEmail(), user.getVerificationCode());
log.info("new account has been created: " + account.getName());
}
existing.setChildCount(nameNumber);
repository.save(existing);
}
public Account saveSub(String name, AccountDto user) {
Account childAccount = repository.findByName(user.getName());
if (childAccount == null || !name.equals(childAccount.getParent())) {
......@@ -774,6 +663,31 @@ public class AccountServiceImpl implements AccountService {
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())) {
throw new ClientRequestException(AccountErrorCode.UNKNOWN, "Invalid Request");
}
if (subUsersRequestDto.getPassword() != null) {
com.edgec.browserbackend.auth.domain.User user = new com.edgec.browserbackend.auth.domain.User();
user.setUsername(username);
user.setPassword(subUsersRequestDto.getPassword());
userAuthService.resetUserPassword(user);
}
if (subUsersRequestDto.getNickname() != null)
childAccount.setNickname(subUsersRequestDto.getNickname());
if (subUsersRequestDto.getPermission() != -1)
childAccount.setPermission(subUsersRequestDto.getPermission());
if (subUsersRequestDto.getComment() != null)
childAccount.setComment(subUsersRequestDto.getComment());
repository.save(childAccount);
}
}
/**
* {@inheritDoc}
*/
......@@ -896,22 +810,6 @@ public class AccountServiceImpl implements AccountService {
return new AccountDto(account);
}
@Override
public String queryVpsRate(String region, String instanceSpecKey, String chargeType) {
String regionKey = "vps:" + instanceSpecKey + "-" + region;
IpChargeRequestDto ipChargeRequestDto = new IpChargeRequestDto();
ipChargeRequestDto.setChargeType(Integer.parseInt(chargeType));
ipChargeRequestDto.setRegion(regionKey);
float rate = getRate("", ipChargeRequestDto);
return String.valueOf(rate);
}
@Override
public String queryUserChargeRate(String username, IpChargeRequestDto requestDto) {
float rate = getRate(username, requestDto);
return String.valueOf(rate);
}
@Override
public Page<UserPrePaidBilling> listPrepaid(Pageable pageable, String username, String[] chargeType, int year, int month, int day, String zoneId) {
......
......@@ -267,7 +267,7 @@ public class ShopServiceImpl implements ShopService {
if (shops == null || shops.size() < 1)
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
List<Account> accounts = accountRepository.findByNameIn(users);
if (accounts != null || accounts.size() != users.size())
if (accounts == null || accounts.size() != users.size())
throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
accounts.stream().forEach(x -> {
try {
......@@ -301,7 +301,7 @@ public class ShopServiceImpl implements ShopService {
group = groupRepository.findById(groupId).orElse(null);
if (group == null)
throw new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST);
if (account.getPermission() < 8 || (group != null && group.getOwner() != null && !group.getOwner().equals(username))) {
if (group != null && group.getOwner() != null && !group.getOwner().equals(username)) {
throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
}
List<String> shopIds = new ArrayList<>();
......
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