Commit 1091834e authored by renjie's avatar renjie

分配店铺接口

子用户接口
parent e49a4064
...@@ -49,11 +49,6 @@ public class AccountController { ...@@ -49,11 +49,6 @@ public class AccountController {
private static final Logger logger = LoggerFactory.getLogger(AccountController.class); 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) @RequestMapping(path = "/prechargeIp/{name}/{amount}/{money}", method = RequestMethod.POST)
public IpChargeResultDto preChargeIp(@PathVariable String name, @PathVariable int amount, @PathVariable double money) { public IpChargeResultDto preChargeIp(@PathVariable String name, @PathVariable int amount, @PathVariable double money) {
return accountService.preChargeIp(name, amount, money); return accountService.preChargeIp(name, amount, money);
...@@ -64,11 +59,6 @@ public class AccountController { ...@@ -64,11 +59,6 @@ public class AccountController {
return accountService.preChargeByMoney(name, money); 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) @RequestMapping(path = "/charge/money", method = RequestMethod.PUT)
public IpChargeResultDto chargeByMoney(@RequestParam("accountId") String name, @RequestParam("money") double money, @RequestBody IpChargeRequestDto requestDto) { public IpChargeResultDto chargeByMoney(@RequestParam("accountId") String name, @RequestParam("money") double money, @RequestBody IpChargeRequestDto requestDto) {
return accountService.chargeByMoney(name, money, requestDto); return accountService.chargeByMoney(name, money, requestDto);
...@@ -344,17 +334,6 @@ public class AccountController { ...@@ -344,17 +334,6 @@ public class AccountController {
return accountService.getAccountByCellphone(cellphone); 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) @RequestMapping(path = "/fee/userprepaidbilling", method = RequestMethod.GET)
public Page<UserPrePaidBilling> queryPerPaid(@RequestParam(value = "page", defaultValue = "0") int page, public Page<UserPrePaidBilling> queryPerPaid(@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "10") int size, @RequestParam(value = "size", defaultValue = "10") int size,
...@@ -408,11 +387,6 @@ public class AccountController { ...@@ -408,11 +387,6 @@ public class AccountController {
return accountService.listAccountBySingupDate(pageable, beginDate, endDate); 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) @RequestMapping(path = "/preorder/delete/{username}", method = RequestMethod.POST)
public String deletePreOrder( @PathVariable("username") String username) { public String deletePreOrder( @PathVariable("username") String username) {
return accountService.deletePreOrder(username); return accountService.deletePreOrder(username);
......
...@@ -3,7 +3,9 @@ package com.edgec.browserbackend.account.controller; ...@@ -3,7 +3,9 @@ package com.edgec.browserbackend.account.controller;
import com.edgec.browserbackend.account.domain.Account; import com.edgec.browserbackend.account.domain.Account;
import com.edgec.browserbackend.account.domain.AccountDto; import com.edgec.browserbackend.account.domain.AccountDto;
import com.edgec.browserbackend.account.dto.ResultDto; 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.account.service.AccountService;
import com.edgec.browserbackend.browser.dto.ShopRequestDto;
import com.edgec.browserbackend.common.commons.error.ClientRequestException; import com.edgec.browserbackend.common.commons.error.ClientRequestException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -38,6 +40,23 @@ public class AdminController { ...@@ -38,6 +40,23 @@ public class AdminController {
return resultDto; 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) @RequestMapping(path = "/subuser/updateone", method = RequestMethod.PUT)
public ResultDto saveSubAccount(Principal principal, @PathVariable String child, @Valid @RequestBody AccountDto user) { public ResultDto saveSubAccount(Principal principal, @PathVariable String child, @Valid @RequestBody AccountDto user) {
ResultDto resultDto = new ResultDto(); ResultDto resultDto = new ResultDto();
...@@ -56,6 +75,23 @@ public class AdminController { ...@@ -56,6 +75,23 @@ public class AdminController {
return resultDto; 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) @RequestMapping(path = "/subuser/del", method = RequestMethod.DELETE)
public ResultDto deleteSubAccount(Principal principal, @PathVariable String child) { public ResultDto deleteSubAccount(Principal principal, @PathVariable String child) {
ResultDto resultDto = new ResultDto(); ResultDto resultDto = new ResultDto();
...@@ -73,4 +109,23 @@ public class AdminController { ...@@ -73,4 +109,23 @@ public class AdminController {
return resultDto; 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 { ...@@ -23,6 +23,8 @@ public class Account {
private Date signupDate = new Date(); private Date signupDate = new Date();
private String nickname;
private String email; private String email;
private String companyName; private String companyName;
...@@ -43,6 +45,8 @@ public class Account { ...@@ -43,6 +45,8 @@ public class Account {
private Promotion promotion; private Promotion promotion;
private String comment;
private List<String> whiteList = Arrays.asList( private List<String> whiteList = Arrays.asList(
"amazon.com", "amazon.com",
"amazon.jp", "amazon.jp",
...@@ -272,4 +276,20 @@ public class Account { ...@@ -272,4 +276,20 @@ public class Account {
public void setPromotion(Promotion promotion) { public void setPromotion(Promotion promotion) {
this.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 ...@@ -20,7 +20,7 @@ public interface AccountRepository extends MongoRepository<Account, String>, Acc
List<Account> findByParent(String parent); 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); Page<Account> findAllBySignupDateBetween(Pageable pageable, Date startDate, Date endDate);
......
package com.edgec.browserbackend.account.service; package com.edgec.browserbackend.account.service;
import com.edgec.browserbackend.account.domain.*; import com.edgec.browserbackend.account.domain.*;
import com.edgec.browserbackend.account.dto.ResultDto; import com.edgec.browserbackend.account.dto.*;
import com.edgec.browserbackend.account.dto.BillQueryCriteriaDto;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
...@@ -47,6 +46,8 @@ public interface AccountService { ...@@ -47,6 +46,8 @@ public interface AccountService {
Account createSub(String name, AccountDto user); Account createSub(String name, AccountDto user);
void createSubUsers(String name, SubUsersRequestDto subUsersRequestDto);
void deleteSub(String parent, String child); void deleteSub(String parent, String child);
void deleteByName(String name); void deleteByName(String name);
...@@ -55,22 +56,22 @@ public interface AccountService { ...@@ -55,22 +56,22 @@ public interface AccountService {
Account saveSub(String name, AccountDto user); Account saveSub(String name, AccountDto user);
void saveSubUsers(String name, SubUsersRequestDto subUsersRequestDto);
List<UserDto> getAllDesendentUsers(String name, int level); List<UserDto> getAllDesendentUsers(String name, int level);
SubUserPageResultDto getSubUserList(String name, int page, int amount);
List<UserBillList> getUserBills0(String name); List<UserBillList> getUserBills0(String name);
List<UserBillList> getUserBills(String name, Services services); List<UserBillList> getUserBills(String name, Services services);
void resetPasswordWithOtp(UserDto user); void resetPasswordWithOtp(UserDto user);
IpChargeResultDto preCharge(String name, IpChargeRequestDto requestDto);
IpChargeResultDto preChargeByMoney(String name, double money); IpChargeResultDto preChargeByMoney(String name, double money);
IpChargeResultDto preChargeIp(String name, int amount, double money); IpChargeResultDto preChargeIp(String name, int amount, double money);
IpChargeResultDto charge(String name, IpChargeRequestDto requestDto);
IpChargeResultDto chargeByMoney(String name, double money, IpChargeRequestDto requestDto); IpChargeResultDto chargeByMoney(String name, double money, IpChargeRequestDto requestDto);
Page<UserPayment> getUserPayment(Pageable pageable, String username); Page<UserPayment> getUserPayment(Pageable pageable, String username);
...@@ -79,10 +80,6 @@ public interface AccountService { ...@@ -79,10 +80,6 @@ public interface AccountService {
AccountDto getAccountByCellphone(String cellphone); 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> 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); Page<UserPrePaidBilling> listBills(Pageable pageable, String username, BillQueryCriteriaDto billQueryCriteriaDto, String dateFrom, String dateTo, String zoneId);
...@@ -91,8 +88,6 @@ public interface AccountService { ...@@ -91,8 +88,6 @@ public interface AccountService {
List<UserBillList> findOverviewByYearAndMonth(String username, int year, int mont, String zoneId, Services service); List<UserBillList> findOverviewByYearAndMonth(String username, int year, int mont, String zoneId, Services service);
IpChargeResultDto preOrder(String userName, IpChargeRequestDto requestDto);
String deletePreOrder(String userName); String deletePreOrder(String userName);
List<Invoice> findByUsername(String username); List<Invoice> findByUsername(String username);
......
package com.edgec.browserbackend.account.service.impl; package com.edgec.browserbackend.account.service.impl;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.edgec.browserbackend.account.dto.ResultDto; import com.edgec.browserbackend.account.dto.*;
import com.edgec.browserbackend.account.dto.CvmChargeRegion;
import com.edgec.browserbackend.account.service.AccountService; import com.edgec.browserbackend.account.service.AccountService;
import com.edgec.browserbackend.account.service.PaymentService; import com.edgec.browserbackend.account.service.PaymentService;
import com.edgec.browserbackend.account.domain.*; 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.exception.AccountErrorCode;
import com.edgec.browserbackend.account.repository.*; import com.edgec.browserbackend.account.repository.*;
import com.edgec.browserbackend.account.service.EmailService; import com.edgec.browserbackend.account.service.EmailService;
import com.edgec.browserbackend.account.utils.AccountServicePool; import com.edgec.browserbackend.account.utils.AccountServicePool;
import com.edgec.browserbackend.auth.exception.AuthErrorCode; 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.auth.service.UserAuthService;
import com.edgec.browserbackend.browser.ErrorCode.BrowserErrorCode; import com.edgec.browserbackend.browser.dto.PageInfo;
import com.edgec.browserbackend.common.charge.ChargeType; 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.error.ClientRequestException;
import com.edgec.browserbackend.common.commons.utils.CommonStringUtils; import com.edgec.browserbackend.common.commons.utils.CommonStringUtils;
import com.edgec.browserbackend.common.commons.utils.SmsUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.domain.Page; 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.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -33,7 +34,6 @@ import java.time.Instant; ...@@ -33,7 +34,6 @@ import java.time.Instant;
import java.time.YearMonth; import java.time.YearMonth;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.regex.Pattern; import java.util.regex.Pattern;
...@@ -87,6 +87,9 @@ public class AccountServiceImpl implements AccountService { ...@@ -87,6 +87,9 @@ public class AccountServiceImpl implements AccountService {
@Autowired @Autowired
private UserAuthService userAuthService; private UserAuthService userAuthService;
@Autowired
private UserRepository userRepository;
@Override @Override
public List<UserBillList> getUserBills0(String name) { public List<UserBillList> getUserBills0(String name) {
...@@ -132,66 +135,6 @@ public class AccountServiceImpl implements AccountService { ...@@ -132,66 +135,6 @@ public class AccountServiceImpl implements AccountService {
return result; 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 @Override
public IpChargeResultDto chargeByMoney(String name, double money, IpChargeRequestDto requestDto) { public IpChargeResultDto chargeByMoney(String name, double money, IpChargeRequestDto requestDto) {
IpChargeResultDto charge = new IpChargeResultDto(); IpChargeResultDto charge = new IpChargeResultDto();
...@@ -245,66 +188,6 @@ public class AccountServiceImpl implements AccountService { ...@@ -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) { private float findCvmRate(String name, String region, int usedChargeType) {
CvmChargeRegion cvmChargeRegion = JSONObject.parseObject(region, CvmChargeRegion.class); CvmChargeRegion cvmChargeRegion = JSONObject.parseObject(region, CvmChargeRegion.class);
float defaulRate = cvmChargeRegion.getDefaultRate(); float defaulRate = cvmChargeRegion.getDefaultRate();
...@@ -349,47 +232,6 @@ public class AccountServiceImpl implements AccountService { ...@@ -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 @Override
public String deletePreOrder(String username) { public String deletePreOrder(String username) {
List<PreOrder> preOrders = preOrderRepository.findPreOrderByUserName(username); List<PreOrder> preOrders = preOrderRepository.findPreOrderByUserName(username);
...@@ -401,39 +243,6 @@ public class AccountServiceImpl implements AccountService { ...@@ -401,39 +243,6 @@ public class AccountServiceImpl implements AccountService {
return "success"; 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 @Override
public IpChargeResultDto preChargeByMoney(String name, double money) { public IpChargeResultDto preChargeByMoney(String name, double money) {
IpChargeResultDto precharge = new IpChargeResultDto(); IpChargeResultDto precharge = new IpChargeResultDto();
...@@ -707,6 +516,32 @@ public class AccountServiceImpl implements AccountService { ...@@ -707,6 +516,32 @@ public class AccountServiceImpl implements AccountService {
return collect; 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) { public Account createSub(String name, AccountDto user) {
Account existing = repository.findByName(name); Account existing = repository.findByName(name);
if (existing == null) if (existing == null)
...@@ -760,6 +595,60 @@ public class AccountServiceImpl implements AccountService { ...@@ -760,6 +595,60 @@ public class AccountServiceImpl implements AccountService {
return account; 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) { public Account saveSub(String name, AccountDto user) {
Account childAccount = repository.findByName(user.getName()); Account childAccount = repository.findByName(user.getName());
if (childAccount == null || !name.equals(childAccount.getParent())) { if (childAccount == null || !name.equals(childAccount.getParent())) {
...@@ -774,6 +663,31 @@ public class AccountServiceImpl implements AccountService { ...@@ -774,6 +663,31 @@ public class AccountServiceImpl implements AccountService {
return 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())) {
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} * {@inheritDoc}
*/ */
...@@ -896,22 +810,6 @@ public class AccountServiceImpl implements AccountService { ...@@ -896,22 +810,6 @@ public class AccountServiceImpl implements AccountService {
return new AccountDto(account); 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 @Override
public Page<UserPrePaidBilling> listPrepaid(Pageable pageable, String username, String[] chargeType, int year, int month, int day, String zoneId) { 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 { ...@@ -267,7 +267,7 @@ public class ShopServiceImpl implements ShopService {
if (shops == null || shops.size() < 1) if (shops == null || shops.size() < 1)
throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST); throw new ClientRequestException(BrowserErrorCode.SHOPNOTEXIST);
List<Account> accounts = accountRepository.findByNameIn(users); 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); throw new ClientRequestException(AccountErrorCode.NAMENOTEXIST);
accounts.stream().forEach(x -> { accounts.stream().forEach(x -> {
try { try {
...@@ -301,7 +301,7 @@ public class ShopServiceImpl implements ShopService { ...@@ -301,7 +301,7 @@ public class ShopServiceImpl implements ShopService {
group = groupRepository.findById(groupId).orElse(null); group = groupRepository.findById(groupId).orElse(null);
if (group == null) if (group == null)
throw new ClientRequestException(BrowserErrorCode.GROUPNOTEXIST); 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); throw new ClientRequestException(AccountErrorCode.NOPERMISSION);
} }
List<String> shopIds = new ArrayList<>(); 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