TASK:Stripe订阅,添加月付(经济版)及相应费用、积分的更新
This commit is contained in:
@@ -13,19 +13,22 @@ import java.util.stream.Collectors;
|
|||||||
@Getter
|
@Getter
|
||||||
public enum CreditsEventsEnum {
|
public enum CreditsEventsEnum {
|
||||||
|
|
||||||
PRICE("price","6"),
|
PRICE("price","10"),
|
||||||
// PRICE("price","1"),// for test
|
// PRICE("price","1"),// for test
|
||||||
// PRICE("price","0.1"),
|
// PRICE("price","0.1"),
|
||||||
|
|
||||||
BUY_CREDITS("Buy Credits","60"),
|
BUY_CREDITS("Buy Credits","50"),
|
||||||
// BUY_CREDITS("Buy Credits","10"),// for test
|
// BUY_CREDITS("Buy Credits","10"),// for test
|
||||||
|
|
||||||
REFUND("Refund","60"),
|
REFUND("Refund","50"),
|
||||||
// BUY_CREDITS("Buy Credits","10"),
|
// BUY_CREDITS("Buy Credits","10"),
|
||||||
|
|
||||||
// 每月更新
|
// 每月更新
|
||||||
INIT_YEARLY("init_yearly", "6000"),
|
INIT_YEARLY("init_yearly", "50000"),
|
||||||
INIT_MONTHLY("init_monthly", "5000"),
|
INIT_MONTHLY("init_monthly", "3500"),
|
||||||
|
INIT_MONTHLY_ECO("init_monthly_eco", "500"),
|
||||||
|
INIT_QUARTERLY("init_quarterly", "12000"),
|
||||||
|
INIT_MONTHLY_EDU("init_monthly_edu", "3500"),
|
||||||
INIT_TRIAL("init_trial", "100"),
|
INIT_TRIAL("init_trial", "100"),
|
||||||
INIT_WEEKLY("init_weekly","6000"),
|
INIT_WEEKLY("init_weekly","6000"),
|
||||||
RESET_YEAR_CREDITS("reset_year_credits","6000"),
|
RESET_YEAR_CREDITS("reset_year_credits","6000"),
|
||||||
|
|||||||
@@ -7,13 +7,19 @@ import lombok.Getter;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum ProductEnum {
|
public enum ProductEnum {
|
||||||
// 积分购买
|
// 积分购买
|
||||||
CreditsProduct("AiDA credits purchase", 6L),
|
CreditsProduct("AiDA credits purchase", 10L, 60L),
|
||||||
// 年度订阅
|
// 年度订阅
|
||||||
AnnualSubscription("AiDA Annual Subscription", 5000L),
|
AnnualSubscription("AiDA Annual Subscription", 5000L, 50000L),
|
||||||
// 月度订阅
|
// 月度订阅(订阅费500,每月3500 积分)
|
||||||
MonthlySubscription("AiDA Monthly Subscription", 500L),
|
MonthlySubscription("AiDA Monthly Subscription", 500L, 3500L),
|
||||||
|
// 月度订阅 -- 经济实惠版 (订阅费100,每月500 积分)
|
||||||
|
Eco_MonthlySubscription("AiDA Eco Monthly Subscription", 100L, 500L),
|
||||||
|
// 季度订阅
|
||||||
|
QuarterlySubscription("AiDA Quarterly Subscription", 1500L, 12000L),
|
||||||
|
// 月度订阅 -- 教育版
|
||||||
|
EDUMonthlySubscription("AiDA Edu Monthly Subscription", 200L, 3500L),
|
||||||
// 测试
|
// 测试
|
||||||
DailySubscription("AiDA Daily Subscription", 5L),
|
DailySubscription("AiDA Daily Subscription", 5L, 100L),
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,4 +28,6 @@ public enum ProductEnum {
|
|||||||
private final String name;
|
private final String name;
|
||||||
|
|
||||||
private final Long price;
|
private final Long price;
|
||||||
|
|
||||||
|
private final Long credits;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class AccountTask {
|
|||||||
// @Scheduled(cron = "0 0 0 1 * ?")
|
// @Scheduled(cron = "0 0 0 1 * ?")
|
||||||
public void refreshCreditsMonthly() {
|
public void refreshCreditsMonthly() {
|
||||||
log.info("每月1号0点 将年费用户积分重置为 6000");
|
log.info("每月1号0点 将年费用户积分重置为 6000");
|
||||||
accountService.refreshCreditsWeekly();
|
accountService.refreshCreditsMonthly();
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
|
// @Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
|
||||||
|
|||||||
@@ -111,7 +111,10 @@ public class GenerateTask {
|
|||||||
if (!DateUtil.isMoreThanOneDayApart(poseTransformation.getCreateTime())){
|
if (!DateUtil.isMoreThanOneDayApart(poseTransformation.getCreateTime())){
|
||||||
try {
|
try {
|
||||||
// 方法中已经完成了pose_transformation和api_generate表的更新,不用额外做处理
|
// 方法中已经完成了pose_transformation和api_generate表的更新,不用额外做处理
|
||||||
generateService.getAnimateResult(taskId);
|
PoseTransformationVO animateResult = generateService.getAnimateResult(taskId);
|
||||||
|
if (animateResult.getStatus().equals("Success")){
|
||||||
|
sendSysMsgToUser(poseTransformation.getAccountId(), "您的姿势变换生成任务已完成");
|
||||||
|
}
|
||||||
} catch (BusinessException e){
|
} catch (BusinessException e){
|
||||||
log.warn("万相 animation 生成失败,原因:{}", e.getMessage());
|
log.warn("万相 animation 生成失败,原因:{}", e.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class ProductCoupons extends BaseEntity{
|
|||||||
private String remark;
|
private String remark;
|
||||||
|
|
||||||
@TableLogic
|
@TableLogic
|
||||||
private Integer isDeleted;
|
private Integer isDeleted = 0;
|
||||||
|
|
||||||
public ProductCoupons(String couponId, Long redeemBy, String promotionCodeId, String promotionCode, Long maxRedemptions, float percentOff, float commissionRate, String cooperator, String remark) {
|
public ProductCoupons(String couponId, Long redeemBy, String promotionCodeId, String promotionCode, Long maxRedemptions, float percentOff, float commissionRate, String cooperator, String remark) {
|
||||||
this.couponId = couponId;
|
this.couponId = couponId;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class ProductPurchaseDTO {
|
|||||||
@ApiModelProperty("产品名 CreditsPurchase || Subscription")
|
@ApiModelProperty("产品名 CreditsPurchase || Subscription")
|
||||||
private String productName;
|
private String productName;
|
||||||
|
|
||||||
@ApiModelProperty("Month || Year")
|
@ApiModelProperty("EcoMonth || Month || Year")
|
||||||
private String subscribeType;
|
private String subscribeType;
|
||||||
|
|
||||||
@ApiModelProperty("是否自动续订 one_time || recurring")
|
@ApiModelProperty("是否自动续订 one_time || recurring")
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ public interface AccountService extends IService<Account> {
|
|||||||
|
|
||||||
Boolean collectQuestionnaires(String questionnaireInfo);
|
Boolean collectQuestionnaires(String questionnaireInfo);
|
||||||
|
|
||||||
void refreshCreditsWeekly();
|
void refreshCreditsMonthly();
|
||||||
|
|
||||||
List<Account> getExpiredUserBySystemUser(Integer systemUserNum);
|
List<Account> getExpiredUserBySystemUser(Integer systemUserNum);
|
||||||
|
|
||||||
@@ -227,7 +227,7 @@ public interface AccountService extends IService<Account> {
|
|||||||
|
|
||||||
boolean updateAccountValidity(Long accountId, Long currentPeriodEnd);
|
boolean updateAccountValidity(Long accountId, Long currentPeriodEnd);
|
||||||
|
|
||||||
void updateUserRoleAndCredits(Long accountId, String type);
|
void updateUserRoleAndCredits(Long accountId, String orderNo);
|
||||||
|
|
||||||
Boolean updateUserInfo(UpdateUserInfoDTO updateUserInfoDTO);
|
Boolean updateUserInfo(UpdateUserInfoDTO updateUserInfoDTO);
|
||||||
|
|
||||||
|
|||||||
@@ -3045,9 +3045,48 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateUserRoleAndCredits(Long accountId, String type){
|
@Override
|
||||||
|
public void updateUserRoleAndCredits(Long accountId, String orderNo){
|
||||||
Account account = accountMapper.selectById(accountId);
|
Account account = accountMapper.selectById(accountId);
|
||||||
switch (type) {
|
OrderInfo orderInfo = orderInfoService.getOrderByOrderNo(orderNo);
|
||||||
|
if (Objects.nonNull(orderInfo) && !StringUtil.isNullOrEmpty(orderInfo.getTitle())){
|
||||||
|
String description = orderInfo.getTitle();
|
||||||
|
Long productCredits;
|
||||||
|
if (description.equals(ProductEnum.DailySubscription.getName())){
|
||||||
|
productCredits = ProductEnum.DailySubscription.getCredits();
|
||||||
|
account.setSystemUser(3);
|
||||||
|
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_WEEKLY.getValue())));
|
||||||
|
}else if (description.equals(ProductEnum.MonthlySubscription.getName())){
|
||||||
|
productCredits = ProductEnum.MonthlySubscription.getCredits();
|
||||||
|
account.setSystemUser(2);
|
||||||
|
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_MONTHLY.getValue())));
|
||||||
|
} else if (description.equals(ProductEnum.Eco_MonthlySubscription.getName())){
|
||||||
|
productCredits = ProductEnum.Eco_MonthlySubscription.getCredits();
|
||||||
|
account.setSystemUser(2);
|
||||||
|
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_MONTHLY_ECO.getValue())));
|
||||||
|
} else if (description.equals(ProductEnum.AnnualSubscription.getName())){
|
||||||
|
productCredits = ProductEnum.AnnualSubscription.getCredits();
|
||||||
|
account.setSystemUser(1);
|
||||||
|
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_YEARLY.getValue())));
|
||||||
|
}else {
|
||||||
|
log.error("未知订阅类型: {}", description);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
accountMapper.updateById(account);
|
||||||
|
|
||||||
|
// 先判断是否已添加添加积分变更记录
|
||||||
|
CreditsDetail creditsDetail = creditsService.queryDetailByTaskId(orderNo);
|
||||||
|
if (Objects.isNull(creditsDetail)){
|
||||||
|
creditsService.insertToCreditsDetail(accountId,
|
||||||
|
description + "--Stripe",
|
||||||
|
String.valueOf(productCredits),
|
||||||
|
"positive", orderNo);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.error("orderNo: {} 无法找到对应的记录", orderNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*switch (type) {
|
||||||
case "month":
|
case "month":
|
||||||
account.setSystemUser(2);
|
account.setSystemUser(2);
|
||||||
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_MONTHLY.getValue())));
|
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_MONTHLY.getValue())));
|
||||||
@@ -3060,9 +3099,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
account.setSystemUser(3);
|
account.setSystemUser(3);
|
||||||
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_WEEKLY.getValue())));
|
account.setCredits(BigDecimal.valueOf(Long.parseLong(CreditsEventsEnum.INIT_WEEKLY.getValue())));
|
||||||
break;
|
break;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
accountMapper.updateById(account);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean updateUserInfo(UpdateUserInfoDTO updateUserInfoDTO){
|
public Boolean updateUserInfo(UpdateUserInfoDTO updateUserInfoDTO){
|
||||||
|
|||||||
@@ -108,6 +108,10 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
case "Month":
|
case "Month":
|
||||||
productEnum = ProductEnum.MonthlySubscription;
|
productEnum = ProductEnum.MonthlySubscription;
|
||||||
break;
|
break;
|
||||||
|
case "EcoMonth":
|
||||||
|
productEnum = ProductEnum.Eco_MonthlySubscription;
|
||||||
|
productPurchaseDTO.setSubscribeType("Month");
|
||||||
|
break;
|
||||||
case "Year":
|
case "Year":
|
||||||
productEnum = ProductEnum.AnnualSubscription;
|
productEnum = ProductEnum.AnnualSubscription;
|
||||||
break;
|
break;
|
||||||
@@ -586,7 +590,7 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
// 更新账号到期时间
|
// 更新账号到期时间
|
||||||
boolean b = accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
boolean b = accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
||||||
// 更新账号身份和积分
|
// 更新账号身份和积分
|
||||||
if (b) accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), interval);
|
if (b) accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), orderNo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return subscriptionInfo;
|
return subscriptionInfo;
|
||||||
@@ -618,7 +622,13 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
// 获取一天后的时间戳(秒级)
|
// 获取一天后的时间戳(秒级)
|
||||||
ZonedDateTime now = ZonedDateTime.now();
|
ZonedDateTime now = ZonedDateTime.now();
|
||||||
currentPeriodEnd = now.plusMonths(1).toEpochSecond();
|
currentPeriodEnd = now.plusMonths(1).toEpochSecond();
|
||||||
}else if (description.equals(ProductEnum.AnnualSubscription.getName())
|
} else if (description.equals(ProductEnum.Eco_MonthlySubscription.getName())
|
||||||
|
&& amount.equals(ProductEnum.Eco_MonthlySubscription.getPrice() * 100)){
|
||||||
|
interval = "month";
|
||||||
|
// 获取一天后的时间戳(秒级)
|
||||||
|
ZonedDateTime now = ZonedDateTime.now();
|
||||||
|
currentPeriodEnd = now.plusMonths(1).toEpochSecond();
|
||||||
|
} else if (description.equals(ProductEnum.AnnualSubscription.getName())
|
||||||
&& amount.equals(ProductEnum.AnnualSubscription.getPrice() * 100)){
|
&& amount.equals(ProductEnum.AnnualSubscription.getPrice() * 100)){
|
||||||
interval = "year";
|
interval = "year";
|
||||||
// 获取一天后的时间戳(秒级)
|
// 获取一天后的时间戳(秒级)
|
||||||
@@ -643,7 +653,7 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
// 更新账号到期时间
|
// 更新账号到期时间
|
||||||
boolean b = accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
boolean b = accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
||||||
// 更新账号身份和积分
|
// 更新账号身份和积分
|
||||||
if (b) accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), interval);
|
if (b) accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), orderNo);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -700,7 +710,7 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
// 更新账号到期时间
|
// 更新账号到期时间
|
||||||
accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
||||||
// 更新账号身份和积分
|
// 更新账号身份和积分
|
||||||
accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), subscriptionInfo.getType());
|
accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), subscriptionInfo.getOrderNo());
|
||||||
log.info("更新 {} 账号到期时间为:{}", subscriptionInfo.getAccountId(), DateUtil.changeTimeStampFormat(subscriptionInfo.getCurrentPeriodEnd(), "seconds", CommonConstant.TIME_FORMAT_MMM_dd_yyyy_EEEE));
|
log.info("更新 {} 账号到期时间为:{}", subscriptionInfo.getAccountId(), DateUtil.changeTimeStampFormat(subscriptionInfo.getCurrentPeriodEnd(), "seconds", CommonConstant.TIME_FORMAT_MMM_dd_yyyy_EEEE));
|
||||||
flag = true;
|
flag = true;
|
||||||
}
|
}
|
||||||
@@ -708,7 +718,7 @@ public class StripeServiceImpl implements StripeService {
|
|||||||
// 更新账号到期时间
|
// 更新账号到期时间
|
||||||
boolean b = accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
boolean b = accountService.updateAccountValidity(subscriptionInfo.getAccountId(), subscriptionInfo.getCurrentPeriodEnd());
|
||||||
// 更新账号身份和积分
|
// 更新账号身份和积分
|
||||||
if (b) accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), subscriptionInfo.getType());
|
if (b) accountService.updateUserRoleAndCredits(subscriptionInfo.getAccountId(), subscriptionInfo.getOrderNo());
|
||||||
}
|
}
|
||||||
if (flag){
|
if (flag){
|
||||||
subscriptionInfo.setUpdateTime(LocalDateTime.now());
|
subscriptionInfo.setUpdateTime(LocalDateTime.now());
|
||||||
|
|||||||
Reference in New Issue
Block a user