From 30d54668057813a0b6778ae31661707c26e3c9e9 Mon Sep 17 00:00:00 2001 From: xupei Date: Fri, 21 Jun 2024 15:11:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2Code-Create?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=EF=BC=8C=E7=9B=91=E6=8E=A7=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E4=BB=98=E8=B4=B9=E8=AE=B0=E5=BD=95=E5=B9=B6=E5=AF=B9?= =?UTF-8?q?=E4=BB=98=E8=B4=B9=E7=94=A8=E6=88=B7=E8=BF=9B=E8=A1=8C=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E6=96=B0=E5=A2=9E=E6=88=96=E5=BB=B6=E9=95=BF=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E6=9C=89=E6=95=88=E6=9C=9F=E7=9A=84=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ai/da/common/task/AccountTask.java | 26 ++++++++ .../ai/da/mapper/primary/entity/Account.java | 9 ++- .../com/ai/da/model/dto/AccountAddDTO.java | 14 +++- .../com/ai/da/service/AccountService.java | 4 ++ .../da/service/impl/AccountServiceImpl.java | 66 +++++++++++++++---- 5 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/ai/da/common/task/AccountTask.java diff --git a/src/main/java/com/ai/da/common/task/AccountTask.java b/src/main/java/com/ai/da/common/task/AccountTask.java new file mode 100644 index 00000000..04b57b46 --- /dev/null +++ b/src/main/java/com/ai/da/common/task/AccountTask.java @@ -0,0 +1,26 @@ +package com.ai.da.common.task; + +import com.ai.da.service.AccountService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class AccountTask { + + @Resource + private AccountService accountService; + + /** 每个月1号凌晨刷新 年付用户的积分 */ +// @Scheduled(cron = "0 0 0 1 * ?") + public void refreshCreditsMonthly(){ + accountService.refreshCreditsMonthly(); + } + + // todo 多久执行一次? + public void getPaidUser(){ + // 获取code-create 表中 指定日期之后 订单状态为wc-processing的订单 + accountService.extendValidityForCC(); + } +} diff --git a/src/main/java/com/ai/da/mapper/primary/entity/Account.java b/src/main/java/com/ai/da/mapper/primary/entity/Account.java index 025f49ef..f9f37fd9 100644 --- a/src/main/java/com/ai/da/mapper/primary/entity/Account.java +++ b/src/main/java/com/ai/da/mapper/primary/entity/Account.java @@ -87,5 +87,12 @@ public class Account implements Serializable { */ private BigDecimal credits; - private Integer SystemUser; + /** + * 用于区分游客与系统用户 + * 0 : 游客 + * 1 : 年付用户 + * 2 : 月付用户 + * 3 : 试用用户 + */ + private Integer systemUser; } diff --git a/src/main/java/com/ai/da/model/dto/AccountAddDTO.java b/src/main/java/com/ai/da/model/dto/AccountAddDTO.java index 22de2a4f..5f054973 100644 --- a/src/main/java/com/ai/da/model/dto/AccountAddDTO.java +++ b/src/main/java/com/ai/da/model/dto/AccountAddDTO.java @@ -2,23 +2,27 @@ package com.ai.da.model.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Data; import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import java.math.BigDecimal; @Data @ApiModel("AccountAdd") +@AllArgsConstructor public class AccountAddDTO { @NotBlank(message = "email.cannot.be.empty") - @ApiModelProperty("email") - private String email; + @ApiModelProperty("userEmail") + private String userEmail; @NotBlank(message = "userName.cannot.be.empty") @ApiModelProperty("userName") private String userName; + private String country; + @NotBlank(message = "validStartTime.cannot.be.empty") @ApiModelProperty("Start time of account validity ") private String validStartTime; @@ -29,4 +33,8 @@ public class AccountAddDTO { private Integer isTrial; + private BigDecimal credits; + + private Integer systemUser; + } diff --git a/src/main/java/com/ai/da/service/AccountService.java b/src/main/java/com/ai/da/service/AccountService.java index f6254484..bf6b72db 100644 --- a/src/main/java/com/ai/da/service/AccountService.java +++ b/src/main/java/com/ai/da/service/AccountService.java @@ -135,5 +135,9 @@ public interface AccountService extends IService { AccountLoginVO designWorksRegisterCode(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO); + Boolean extendValidityForCC(); + Boolean collectQuestionnaires(String questionnaireInfo); + + void refreshCreditsMonthly(); } diff --git a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java index 3d41c2a2..afc5a849 100644 --- a/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/AccountServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.ai.da.common.config.exception.BusinessException; import com.ai.da.common.context.UserContext; import com.ai.da.common.enums.AuthenticationOperationTypeEnum; +import com.ai.da.common.enums.CreditsEventsEnum; import com.ai.da.common.enums.LoginTypeEnum; import com.ai.da.common.response.ResultEnum; import com.ai.da.common.security.jwt.JWTTokenHelper; @@ -22,6 +23,7 @@ import com.ai.da.model.vo.QuestionnaireVO; import com.ai.da.service.*; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -383,15 +385,18 @@ public class AccountServiceImpl extends ServiceImpl impl @Override public Boolean addUser(AccountAddDTO accountAddDTO) { - Account account = new Account(); - account.setUserEmail(accountAddDTO.getEmail()); - account.setUserPassword("Third-000000"); - account.setUserName(accountAddDTO.getUserName()); + Account account; + account = CopyUtil.copyObject(accountAddDTO,Account.class); +// account.setUserEmail(accountAddDTO.getUserEmail()); +// account.setUserName(accountAddDTO.getUserName()); +// account.setIsTrial(accountAddDTO.getIsTrial()); account.setValidStartTime(Long.valueOf(accountAddDTO.getValidStartTime())); account.setValidEndTime(Long.valueOf(accountAddDTO.getValidEndTime())); + account.setUserPassword("Third-000000"); + account.setLanguage(Language.ENGLISH.name()); account.setCreateDate(new Date()); - account.setIsTrial(accountAddDTO.getIsTrial()); - account.setSystemUser(1); + account.setIsTrial(0); + account.setIsBeginner(1); return accountMapper.insert(account) > 0; } @@ -1010,10 +1015,10 @@ public class AccountServiceImpl extends ServiceImpl impl } private static final String QUERY_ORDER = "SELECT * FROM pmr_wc_order_stats " + - "WHERE status = 'wc-processing' AND date_paid > '2024-06-10 00:00:00'" + + "WHERE status = 'wc-processing' AND date_paid > '2024-06-20 00:00:00'" + " ORDER BY order_id DESC "; - private static final String QUERY_CUSTOMER_EMAIL = "SELECT username, email FROM pmr_wc_customer_lookup " + + private static final String QUERY_CUSTOMER_EMAIL = "SELECT username, email, country FROM pmr_wc_customer_lookup " + "WHERE customer_id = ? "; private static final String UPDATE_ORDER_STATUS = "UPDATE pmr_wc_order_stats " + "SET status = 'wc-complete' , date_completed = ? " + @@ -1037,7 +1042,9 @@ public class AccountServiceImpl extends ServiceImpl impl * * @return null */ - public String extendValidityForCC() { + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean extendValidityForCC() { try (Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(QUERY_ORDER)) { // preparedStatement.setString(1, "someCondition"); @@ -1049,6 +1056,8 @@ public class AccountServiceImpl extends ServiceImpl impl double totalSales = queryOrderResultSet.getDouble("total_sales"); String email = ""; String userName = ""; + // 为什么一般没有值 + String country = ""; // 1、查pmr_wc_customer_lookup表;确认当前订单对应的用户邮箱 PreparedStatement preparedQueryEmail = connection.prepareStatement(QUERY_CUSTOMER_EMAIL); preparedQueryEmail.setInt(1, customerId); @@ -1056,6 +1065,7 @@ public class AccountServiceImpl extends ServiceImpl impl if (queryEmailResultSet.next()) { email = queryEmailResultSet.getString("email"); userName = queryEmailResultSet.getString("username"); + country = queryEmailResultSet.getString("country"); } else { log.error("未知错误。code-create的用户表中没有付费用户的信息"); throw new BusinessException("user info missing"); @@ -1083,7 +1093,27 @@ public class AccountServiceImpl extends ServiceImpl impl if (flag) { // 是新用户 => 新增一条数据 - Boolean b = addUser(new AccountAddDTO(email, StringUtil.isNullOrEmpty(userName) ? email.substring(0, email.indexOf("@") - 1) : userName, account.getValidStartTime().toString(), account.getValidEndTime().toString(), 0)); + String credits = "0"; + int systemUserType = 0; + if (totalSales == 5000.0){ + log.info("年付用户,初始积分6000"); + credits = CreditsEventsEnum.INIT_MONTHLY.getValue(); + systemUserType = 1; + }else if (totalSales == 500.0){ + log.info("月付用户,初始积分5000"); + credits = CreditsEventsEnum.INIT_MONTHLY.getValue(); + systemUserType = 2; + }else if (totalSales == 0.0){ + log.info("测试用户,初始积分10"); + credits = "10"; + systemUserType = 3; + } + + Boolean b = addUser(new AccountAddDTO(email, + StringUtil.isNullOrEmpty(userName) ? email.substring(0, email.indexOf("@")) : userName, + country, + account.getValidStartTime().toString(), + account.getValidEndTime().toString(), 0,new BigDecimal(credits),systemUserType)); if (b) log.info("付费新用户新增成功!"); } else { userInfo.setValidEndTime(account.getValidEndTime()); @@ -1112,9 +1142,10 @@ public class AccountServiceImpl extends ServiceImpl impl } catch (Exception e) { // 记录异常并处理 e.printStackTrace(); + return Boolean.FALSE; } - return null; + return Boolean.TRUE; } private Account extendValidity(Long validEndTime, double totalSales) { @@ -1199,4 +1230,17 @@ public class AccountServiceImpl extends ServiceImpl impl return Boolean.TRUE; } + /** + * 为年费用户每月更新积分 + */ + public void refreshCreditsMonthly(){ + UpdateWrapper accountUpdateWrapper = new UpdateWrapper<>(); + // 刷新账号有效期截止之前的年付用户的积分 + long epochMilli = Instant.now().toEpochMilli(); + accountUpdateWrapper.lambda().set(Account::getCredits, CreditsEventsEnum.INIT_YEARLY.getValue()) + .eq(Account::getSystemUser,1) + .gt(Account::getValidEndTime, epochMilli); + baseMapper.update(null,accountUpdateWrapper); + } + }