Commit 2a52374d authored by xuxin's avatar xuxin

添加注释与日志

parent d149c51e
...@@ -30,7 +30,9 @@ import java.security.Principal; ...@@ -30,7 +30,9 @@ import java.security.Principal;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.Date;
import java.util.Enumeration;
import java.util.List;
@RestController @RestController
@RequestMapping("/user") @RequestMapping("/user")
...@@ -80,11 +82,7 @@ public class AccountController { ...@@ -80,11 +82,7 @@ public class AccountController {
resultDto.setStatus(0); resultDto.setStatus(0);
resultDto.setData(userDtos); resultDto.setData(userDtos);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
...@@ -102,11 +100,7 @@ public class AccountController { ...@@ -102,11 +100,7 @@ public class AccountController {
resultDto.setStatus(0); resultDto.setStatus(0);
resultDto.setData(account1); resultDto.setData(account1);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
...@@ -119,32 +113,29 @@ public class AccountController { ...@@ -119,32 +113,29 @@ public class AccountController {
resultDto.setStatus(0); resultDto.setStatus(0);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
logger.error("fail to send sms", e); logger.error("fail to send sms", e);
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
/**
* 用户注册
*/
@RequestMapping(path = "/signUp", method = RequestMethod.POST) @RequestMapping(path = "/signUp", method = RequestMethod.POST)
public ResultDto createNewAccount(@Valid @RequestBody User user) { public ResultDto createNewAccount(@Valid @RequestBody User user) {
ResultDto resultDto = new ResultDto(); ResultDto resultDto = new ResultDto();
try { try {
Account account = new Account(); Account account = new Account();
if (!StringUtils.isEmpty(user.getEmail())) if (!StringUtils.isEmpty(user.getEmail())) {
account = accountService.create(user); account = accountService.create(user);
else } else {
account = accountService.createWithSms(user); account = accountService.createWithSms(user);
}
resultDto.setStatus(0); resultDto.setStatus(0);
resultDto.setData(account); resultDto.setData(account);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
...@@ -173,11 +164,7 @@ public class AccountController { ...@@ -173,11 +164,7 @@ public class AccountController {
resultDto.setData(accountService.getUserPrePaidBills(principal.getName(), userPrePaidBillingRequestDto)); resultDto.setData(accountService.getUserPrePaidBills(principal.getName(), userPrePaidBillingRequestDto));
resultDto.setStatus(0); resultDto.setStatus(0);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
...@@ -217,11 +204,7 @@ public class AccountController { ...@@ -217,11 +204,7 @@ public class AccountController {
accountService.resetPassword(principal.getName(), user); accountService.resetPassword(principal.getName(), user);
resultDto.setStatus(0); resultDto.setStatus(0);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
...@@ -238,11 +221,7 @@ public class AccountController { ...@@ -238,11 +221,7 @@ public class AccountController {
accountService.resetPasswordWithOtp(user); accountService.resetPasswordWithOtp(user);
resultDto.setStatus(0); resultDto.setStatus(0);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
...@@ -449,11 +428,7 @@ public class AccountController { ...@@ -449,11 +428,7 @@ public class AccountController {
accountService.authorizeCompany(principal.getName(), companyAuthorizeDto); accountService.authorizeCompany(principal.getName(), companyAuthorizeDto);
resultDto.setStatus(0); resultDto.setStatus(0);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
...@@ -498,12 +473,13 @@ public class AccountController { ...@@ -498,12 +473,13 @@ public class AccountController {
else else
resultDto.setStatus(-1); resultDto.setStatus(-1);
} catch (ClientRequestException e) { } catch (ClientRequestException e) {
resultDto.setStatus(-1); dealClientRequestException(resultDto, e);
Map<String, Object> statusInfo = new HashMap<>();
statusInfo.put("code", e.getErrorCode());
statusInfo.put("message", e.getMessage());
resultDto.setStatusInfo(statusInfo);
} }
return resultDto; return resultDto;
} }
private void dealClientRequestException(ResultDto resultDto, ClientRequestException e) {
dealClientRequestException(resultDto, e);
}
} }
...@@ -68,7 +68,7 @@ public class Account { ...@@ -68,7 +68,7 @@ public class Account {
private int permission = -1; private int permission = -1;
/** /**
* 注册成功后,当前用户的邀请码,用于邀请别人获取佣金 * 注册成功后,当前用户的邀请码相关信息,用于邀请别人获取佣金
*/ */
private Promotion promotion; private Promotion promotion;
......
package com.edgec.browserbackend.account.domain; package com.edgec.browserbackend.account.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
@Data
@Document(collection = "phoneotp") @Document(collection = "phoneotp")
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public class Otp { public class Otp {
/**
* 手机号
*/
@Id @Id
private String phone; private String phone;
private String otp;
private long createdAt;
public String getPhone() {
return phone;
}
public void setPhone(String phone) { /**
this.phone = phone; * 发送给用户的短信验证码
} */
private String otp;
public String getOtp() {
return otp;
}
public void setOtp(String otp) {
this.otp = otp;
}
public long getCreatedAt() { /**
return createdAt; * 短信验证码的发送时间
} */
private long createdAt;
public void setCreatedAt(long createdAt) {
this.createdAt = createdAt;
}
} }
package com.edgec.browserbackend.account.domain; package com.edgec.browserbackend.account.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.Setter;
/** /**
* @Desc * @Desc
* @Author jason * @Author jason
* @CreateTime 2020/3/12 3:14 下午 * @CreateTime 2020/3/12 3:14 下午
**/ **/
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public class Promotion { public class Promotion {
/**
* 邀请码(用户邀请好友使用本产品)
*/
private String code; private String code;
//邀请人数 /**
* 邀请人数
*/
private int invitedUsers; private int invitedUsers;
//好友本月以前总消费
private int totalCommission;
//好友当月消费
private int commission;
//好友上月总消费
private int commissionLastMonth;
//是否是本公司的销售
private boolean isSale;
//当月礼金
private double gift;
//所有未提现金额
private double allGift;
//已提现金额
private double withdrawn;
public int getCommission() {
return commission;
}
public void setCommission(int commission) {
this.commission = commission;
}
public int getInvitedUsers() {
return invitedUsers;
}
public void setInvitedUsers(int invitedUsers) {
this.invitedUsers = invitedUsers;
}
public String getCode() {
return code;
}
public void setCode(String code) { /**
this.code = code; * 好友本月以前总消费
} */
private int totalCommission;
public boolean isSale() {
return isSale;
}
public void setSale(boolean sale) {
isSale = sale;
}
public double getGift() {
return gift;
}
public void setGift(double gift) {
this.gift = gift;
}
public int getCommissionLastMonth() {
return commissionLastMonth;
}
public void setCommissionLastMonth(int commissionLastMonth) { /**
this.commissionLastMonth = commissionLastMonth; * 好友当月消费
} */
private int commission;
public double getAllGift() { /**
return allGift; * 好友上月总消费
} */
private int commissionLastMonth;
public void setAllGift(double allGift) { /**
this.allGift = allGift; * 是否是本公司的销售
} */
private boolean isSale;
public double getWithdrawn() { /**
return withdrawn; * 当月礼金
} */
private double gift;
public void setWithdrawn(double withdrawn) { /**
this.withdrawn = withdrawn; * 所有未提现金额
} */
private double allGift;
public int getTotalCommission() { /**
return totalCommission; * 已提现金额
} */
private double withdrawn;
public void setTotalCommission(int totalCommission) {
this.totalCommission = totalCommission;
}
} }
package com.edgec.browserbackend.account.domain; package com.edgec.browserbackend.account.domain;
import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Email; import javax.validation.constraints.Email;
...@@ -7,15 +8,16 @@ import java.util.ArrayList; ...@@ -7,15 +8,16 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@Data
public class User { public class User {
@Length(min = 3, max = 20, message="Name length should be between 3 - 20") @Length(min = 3, max = 20, message = "Name length should be between 3 - 20")
private String username; private String username;
@Length(min = 6, max = 40, message="Password length should be between 6 - 40") @Length(min = 6, max = 40, message = "Password length should be between 6 - 40")
private String password; private String password;
@Email(message ="Invalid email address") @Email(message = "Invalid email address")
private String email; private String email;
private String phone; private String phone;
...@@ -28,108 +30,12 @@ public class User { ...@@ -28,108 +30,12 @@ public class User {
private String lockReason; private String lockReason;
public String getAuthCode() {
return authCode;
}
public void setAuthCode(String authCode) {
this.authCode = authCode;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
private boolean allowedToCreateSubUser = true; private boolean allowedToCreateSubUser = true;
private int permission; private int permission;
private List<String> whiteList = new ArrayList<>(); private List<String> whiteList = new ArrayList<>();
private String verificationCode= UUID.randomUUID().toString(); private String verificationCode = UUID.randomUUID().toString();
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public String getVerificationCode() {
return verificationCode;
}
public void setVerificationCode(String verificationCode) {
this.verificationCode = verificationCode;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isAllowedToCreateSubUser() {
return allowedToCreateSubUser;
}
public void setAllowedToCreateSubUser(boolean allowedToCreateSubUser) {
allowedToCreateSubUser = allowedToCreateSubUser;
}
public int getPermission() {
return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
public String getLockReason() {
return lockReason;
}
public void setLockReason(String lockReason) {
this.lockReason = lockReason;
}
public List<String> getWhiteList() {
return whiteList;
}
public void setWhiteList(List<String> whiteList) {
this.whiteList = whiteList;
}
public String getPromotionCode() {
return promotionCode;
}
public void setPromotionCode(String promotionCode) {
this.promotionCode = promotionCode;
}
} }
...@@ -40,13 +40,21 @@ public class UserPrePaidBilling { ...@@ -40,13 +40,21 @@ public class UserPrePaidBilling {
private BillStatus status; private BillStatus status;
//0 -- 余额, 1 -- 支付宝, 2 -- 微信, 3 -- 银行转账 /**
* 0 -- 余额, 1 -- 支付宝, 2 -- 微信, 3 -- 银行转账
*/
private int payMethod; private int payMethod;
private boolean isPrepaid; private boolean isPrepaid;
/**
* 本次消费金额
*/
private float total; private float total;
//0 -- 充值, 1 -- newip, 2 -- renew, 3 -- return, 4 -- 礼金提现
/**
* 0 -- 充值, 1 -- newip, 2 -- renew, 3 -- return, 4 -- 礼金提现
*/
private int chargeType; private int chargeType;
private String unit = "month"; private String unit = "month";
......
...@@ -15,8 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -15,8 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Optional;
@Service @Service
public class UserServiceImpl implements UserService { public class UserServiceImpl implements UserService {
...@@ -96,11 +94,11 @@ public class UserServiceImpl implements UserService { ...@@ -96,11 +94,11 @@ public class UserServiceImpl implements UserService {
@Override @Override
public void create(User user) { public void create(User user) {
repository.findById(user.getUsername()).ifPresent(
Optional<User> existing = repository.findById(user.getUsername()); it -> {
existing.ifPresent(it -> { throw new ClientRequestException(AuthErrorCode.NAMEEXIST, "user already exists: " + it.getUsername());
throw new ClientRequestException(AuthErrorCode.NAMEEXIST, "user already exists: " + it.getUsername()); }
}); );
String hash = encoder.encode(user.getPassword()); String hash = encoder.encode(user.getPassword());
user.setPassword(hash); user.setPassword(hash);
......
...@@ -216,6 +216,9 @@ public class ShopController { ...@@ -216,6 +216,9 @@ public class ShopController {
return resultDto; return resultDto;
} }
/**
* 恢复部分缺失数据,仅仅调用一次就好了
*/
@GetMapping(value = "/deal_dirtydata") @GetMapping(value = "/deal_dirtydata")
public ResultDto dealDirtydata() { public ResultDto dealDirtydata() {
......
...@@ -10,27 +10,58 @@ import java.util.List; ...@@ -10,27 +10,58 @@ import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public class IpResourceRequestDto { public class IpResourceRequestDto {
private String name; private String name;
/**
* ip 所在地域(英文)
*/
private String region; private String region;
/**
* ip 所在地域(中文)
*/
private String regionCn; private String regionCn;
/**
* ip 厂商
*/
private String vendor = "aliyun"; private String vendor = "aliyun";
private String logintype = "password"; private String logintype = "password";
private String shopId; private String shopId;
//0 -- 余额, 1 -- 支付宝, 2 -- 微信 /**
* 0:余额, 1:支付宝, 2:微信
*/
private int payMethod = 0; private int payMethod = 0;
@Max(12) @Max(12)
@Min(1) @Min(1)
private int period = 1; private int period = 1;
/**
* 例如 period :2,unit = month
* 代表:购买 ip 2 个 月
*/
private String unit = "month"; private String unit = "month";
/**
* 购买的ip数量(用户可以一次购买多个ip)
*/
private int amount = 1; private int amount = 1;
private boolean autorenew = false; private boolean autorenew = false;
private int ipkeptperiod = 7; private int ipkeptperiod = 7;
private String startscript = ""; private String startscript = "";
/**
* ip 是否需要使用专线
*/
private boolean specialLine; private boolean specialLine;
//自有IP需要传proxy的账号
/**
* 自有IP需要传proxy的账号
*/
private String username; private String username;
private String password; private String password;
private String instanceSpecKey; private String instanceSpecKey;
......
...@@ -35,10 +35,7 @@ public class IpResourceRepositoryCustomImpl implements IpResourceRepositoryCusto ...@@ -35,10 +35,7 @@ public class IpResourceRepositoryCustomImpl implements IpResourceRepositoryCusto
update.set("isLocked", true).set("lockTimestamp", Instant.now().toEpochMilli()); update.set("isLocked", true).set("lockTimestamp", Instant.now().toEpochMilli());
UpdateResult result = mongoTemplate.updateFirst(basicQuery, update, IpResource.class); UpdateResult result = mongoTemplate.updateFirst(basicQuery, update, IpResource.class);
if (result.getModifiedCount() < 1) return result.getModifiedCount() >= 1;
return false;
else
return true;
} }
@Override @Override
......
...@@ -272,7 +272,7 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -272,7 +272,7 @@ public class IpResourceServiceImpl implements IpResourceService {
} }
ipResource.setRegion(ipResourceRequestDto.getRegion()); ipResource.setRegion(ipResourceRequestDto.getRegion());
// 只要 申请的 ip 地域不是在 大陆,则一定会执行下面 if 中的代码块
boolean condition1 = StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion()); boolean condition1 = StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion());
boolean condition2 = ipResourceRequestDto.getVendor().equals("own") && ipResource.isSpecialLine(); boolean condition2 = ipResourceRequestDto.getVendor().equals("own") && ipResource.isSpecialLine();
if (condition1 || condition2) { if (condition1 || condition2) {
...@@ -306,7 +306,7 @@ public class IpResourceServiceImpl implements IpResourceService { ...@@ -306,7 +306,7 @@ public class IpResourceServiceImpl implements IpResourceService {
accountService.chargeByMoney(username, newprice * ipChargeRequestDto.getAmount() * ipChargeRequestDto.getPeriod(), ipChargeRequestDto); accountService.chargeByMoney(username, newprice * ipChargeRequestDto.getAmount() * ipChargeRequestDto.getPeriod(), ipChargeRequestDto);
} }
// 如果ip需要绑定店铺,则将店铺与ip绑定 // 如果ip需要绑定店铺,则将店铺与ip绑定 todo 感觉这个地方代码用不到,
if (ipResourceRequestDto.getShopId() != null) { if (ipResourceRequestDto.getShopId() != null) {
ShopRequestDto shopRequestDto = new ShopRequestDto(); ShopRequestDto shopRequestDto = new ShopRequestDto();
shopRequestDto.setIpId(ipResourceDtos.get(0).getId()); shopRequestDto.setIpId(ipResourceDtos.get(0).getId());
......
...@@ -101,12 +101,15 @@ public class BrowserTask { ...@@ -101,12 +101,15 @@ public class BrowserTask {
} }
/**
* 购买ip的定时任务,每分钟一次
*/
@Scheduled(cron = "0 0/1 * * * ?") @Scheduled(cron = "0 0/1 * * * ?")
public void buyIpTasks() { public void buyIpTasks() {
String URL = (profiles.equals("dev") || profiles.equals("staging")) ? TESTURL : CLOUDAMURL; String URL = (profiles.equals("dev") || profiles.equals("staging")) ? TESTURL : CLOUDAMURL;
long time = Instant.now().minusSeconds(300).toEpochMilli(); long time = Instant.now().minusSeconds(300).toEpochMilli();
List<IpResource> ipResources = ipResourceRepository.sampleTasks(6, time); List<IpResource> ipResources = ipResourceRepository.sampleTasks(6, time);
log.error("buyIpTasks sample {} tasks", ipResources.size()); log.info("buyIpTasks sample {} tasks", ipResources.size());
List<CompletableFuture> futureList = new ArrayList<>(); List<CompletableFuture> futureList = new ArrayList<>();
for (IpResource ipResource : ipResources) { for (IpResource ipResource : ipResources) {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
...@@ -139,22 +142,21 @@ public class BrowserTask { ...@@ -139,22 +142,21 @@ public class BrowserTask {
} }
if (ipBuyResultDto != null && ipBuyResultDto.getIplist() != null && ipBuyResultDto.getIplist().size() >= 1) { if (ipBuyResultDto != null && ipBuyResultDto.getIplist() != null && ipBuyResultDto.getIplist().size() >= 1) {
AtomicInteger index = new AtomicInteger(); AtomicInteger index = new AtomicInteger();
ipBuyResultDto.getIplist().forEach(x -> { ipBuyResultDto.getIplist().forEach(
if (ipResource != null) { x -> {
ipResource.setAddr(x.getIp()); ipResource.setAddr(x.getIp());
ipResource.setStatus(3); ipResource.setStatus(3);
ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli()); ipResource.setValidTime(Instant.parse(x.getValidTill()).toEpochMilli());
if (StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion())) { if (StringUtils.isNotBlank(ipResource.getRegion()) && region.contains(ipResource.getRegion())) {
ipResource.setProxyUsername(ipResource.getAddr()); ipResource.setProxyUsername(ipResource.getAddr());
ipResource.setProxyPassword(genRandom(3, 12)); ipResource.setProxyPassword(genRandom(3, 12));
ipResource.setSpecialLine(true); ipResource.setSpecialLine(true);
}
ipResourceRepository.save(ipResource);
index.getAndIncrement();
} }
ipResourceRepository.save(ipResource); );
} else {
log.error("no ipResource");
}
index.getAndIncrement();
});
result = true; result = true;
} }
} catch (Exception e) { } catch (Exception e) {
......
...@@ -12,9 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -12,9 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.time.Instant;
import java.time.YearMonth; import java.time.YearMonth;
import java.time.ZoneOffset;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
...@@ -32,32 +30,43 @@ public class PromotionTask { ...@@ -32,32 +30,43 @@ public class PromotionTask {
@SchedulerLock(name = "countGift", lockAtLeastForString = "PT1H", lockAtMostForString = "PT2H") @SchedulerLock(name = "countGift", lockAtLeastForString = "PT1H", lockAtMostForString = "PT2H")
@Scheduled(cron = "0 0 1 1 * ?") @Scheduled(cron = "0 0 1 1 * ?")
public void countGift() { public void countGift() {
log.info("Start scheduled task:Scheduled.countGift...");
List<Account> accounts = accountRepository.findByParentIsNull(); List<Account> accounts = accountRepository.findByParentIsNull();
for (Account account : accounts) { for (Account account : accounts) {
// 1. 获取当前账户的邀请码信息
String code = account.getPromotion().getCode(); String code = account.getPromotion().getCode();
// 2. 获取被当前账户邀请的所有账户
List<Account> promotes = accountRepository.findByPromotionCodeAndParentIsNull(code); List<Account> promotes = accountRepository.findByPromotionCodeAndParentIsNull(code);
double totalCommission = 0; double totalCommission = 0;
double secondCommission = 0; double secondCommission = 0;
// 3. 计算所有被当前账户邀请的账户上个月的消费信息,以及如果当前账户是销售账户则还需要计算销售账户的下下级账户的上个月消费信息
for (Account promote : promotes) { for (Account promote : promotes) {
List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(promote.getName(), // 3.1 获取被邀请的用户上个月的消费信息,todo 感觉这个地方最好加上支付状态
YearMonth.now().minusMonths(1).getYear(), List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(
YearMonth.now().minusMonths(1).getMonthValue(), Arrays.asList(1,2,3)); promote.getName(), YearMonth.now().minusMonths(1).getYear(), YearMonth.now().minusMonths(1).getMonthValue(), Arrays.asList(1, 2, 3)
);
// 3.2. 计算被邀请的用户上个月的总消费金额
totalCommission += userPrePaidBillings.stream().mapToDouble(UserPrePaidBilling::getTotal).sum(); totalCommission += userPrePaidBillings.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
// 3.3. 如果当前账户是本公司销售,则计算下下级用户(例如:销售人员A 邀请了 用户B,用户B 邀请了 其他用户,其他用户就是A的下下级用户)上个月总消费金额
if (account.getPromotion().isSale() && promote.getParent() == null) { if (account.getPromotion().isSale() && promote.getParent() == null) {
// 获取下下级账户
List<Account> secondPromotes = accountRepository.findByPromotionCodeAndParentIsNull(promote.getPromotion().getCode()); List<Account> secondPromotes = accountRepository.findByPromotionCodeAndParentIsNull(promote.getPromotion().getCode());
if (secondPromotes != null && secondPromotes.size() > 0) { if (secondPromotes != null && !secondPromotes.isEmpty()) {
for (Account secondPromote : secondPromotes) { for (Account secondPromote : secondPromotes) {
List<UserPrePaidBilling> userPrePaidBillings1 = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(secondPromote.getName(), List<UserPrePaidBilling> userPrePaidBillings1 = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(
YearMonth.now().minusMonths(1).getYear(), secondPromote.getName(), YearMonth.now().minusMonths(1).getYear(), YearMonth.now().minusMonths(1).getMonthValue(), Arrays.asList(1, 2, 3)
YearMonth.now().minusMonths(1).getMonthValue(), Arrays.asList(1,2,3)); );
secondCommission += userPrePaidBillings1.stream().mapToDouble(UserPrePaidBilling::getTotal).sum(); secondCommission += userPrePaidBillings1.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
} }
} }
} }
} }
// 4. 封装当前账户的返佣相关信息(总消费、上月消费、当月礼金、总共未体现礼金)并保存
Promotion promotion = account.getPromotion(); Promotion promotion = account.getPromotion();
promotion.setTotalCommission((int)(promotion.getTotalCommission() + totalCommission)); promotion.setTotalCommission((int) (promotion.getTotalCommission() + totalCommission));
promotion.setCommissionLastMonth((int)totalCommission); promotion.setCommissionLastMonth((int) totalCommission);
promotion.setGift(totalCommission * 0.08); promotion.setGift(totalCommission * 0.08);
if (account.getPromotion().isSale()) { if (account.getPromotion().isSale()) {
promotion.setGift(totalCommission * 0.1 + secondCommission * 0.02); promotion.setGift(totalCommission * 0.1 + secondCommission * 0.02);
...@@ -65,41 +74,50 @@ public class PromotionTask { ...@@ -65,41 +74,50 @@ public class PromotionTask {
promotion.setAllGift(promotion.getAllGift() + promotion.getGift()); promotion.setAllGift(promotion.getAllGift() + promotion.getGift());
accountRepository.save(account); accountRepository.save(account);
} }
log.info("End scheduled task:Scheduled.countGift...");
} }
@SchedulerLock(name = "countCommission", lockAtLeastForString = "PT1H", lockAtMostForString = "PT2H") @SchedulerLock(name = "countCommission", lockAtLeastForString = "PT1H", lockAtMostForString = "PT2H")
@Scheduled(cron = "0 0 1 * * ?") @Scheduled(cron = "0 0 1 * * ?")
public void countCommission() { public void countCommission() {
log.info("Start scheduled task:Scheduled.countCommission...");
List<Account> accounts = accountRepository.findByParentIsNull(); List<Account> accounts = accountRepository.findByParentIsNull();
for (Account account : accounts) { for (Account account : accounts) {
// 1. 获取被当前账户邀请的所有账户
String code = account.getPromotion().getCode(); String code = account.getPromotion().getCode();
List<Account> promotes = accountRepository.findByPromotionCodeAndParentIsNull(code); List<Account> promotes = accountRepository.findByPromotionCodeAndParentIsNull(code);
double totalCommission = 0; double totalCommission = 0;
double secondCommission = 0; double secondCommission = 0;
// 2. 计算所有被当前账户邀请的账户当月当前的消费信息,以及如果当前账户是销售账户则还需要计算销售账户的下下级账户的当月当前消费信息
for (Account promote : promotes) { for (Account promote : promotes) {
List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(promote.getName(), List<UserPrePaidBilling> userPrePaidBillings = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(
YearMonth.now().getYear(), promote.getName(), YearMonth.now().getYear(), YearMonth.now().getMonthValue(), Arrays.asList(1, 2, 3)
YearMonth.now().getMonthValue(), Arrays.asList(1,2,3)); );
totalCommission += userPrePaidBillings.stream().mapToDouble(UserPrePaidBilling::getTotal).sum(); totalCommission += userPrePaidBillings.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
if (account.getPromotion().isSale() && promote.getParent() == null) { if (account.getPromotion().isSale() && promote.getParent() == null) {
List<Account> secondPromotes = accountRepository.findByPromotionCodeAndParentIsNull(promote.getPromotion().getCode()); List<Account> secondPromotes = accountRepository.findByPromotionCodeAndParentIsNull(promote.getPromotion().getCode());
if (secondPromotes != null && secondPromotes.size() > 0) { if (secondPromotes != null && secondPromotes.size() > 0) {
for (Account secondPromote : secondPromotes) { for (Account secondPromote : secondPromotes) {
List<UserPrePaidBilling> userPrePaidBillings1 = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(secondPromote.getName(), List<UserPrePaidBilling> userPrePaidBillings1 = userPrePaidBillingRepository.findByAdministratorAndYearAndMonthAndPayMethodIn(
YearMonth.now().getYear(), secondPromote.getName(), YearMonth.now().getYear(), YearMonth.now().getMonthValue(), Arrays.asList(1, 2, 3)
YearMonth.now().getMonthValue(), Arrays.asList(1,2,3)); );
secondCommission += userPrePaidBillings1.stream().mapToDouble(UserPrePaidBilling::getTotal).sum(); secondCommission += userPrePaidBillings1.stream().mapToDouble(UserPrePaidBilling::getTotal).sum();
} }
} }
} }
} }
// 3. 封装当前账户的返佣相关信息(当月当前的消费、当月当前的返佣)并保存
Promotion promotion = account.getPromotion(); Promotion promotion = account.getPromotion();
promotion.setCommission((int)totalCommission); promotion.setCommission((int) totalCommission);
promotion.setGift(totalCommission * 0.08); promotion.setGift(totalCommission * 0.08);
if (account.getPromotion().isSale()) { if (account.getPromotion().isSale()) {
promotion.setGift(totalCommission * 0.1 + secondCommission * 0.02); promotion.setGift(totalCommission * 0.1 + secondCommission * 0.02);
} }
accountRepository.save(account); accountRepository.save(account);
} }
log.info("End scheduled task:Scheduled.countCommission...");
} }
} }
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