新增接口:调查问卷
This commit is contained in:
@@ -50,7 +50,7 @@ public class AuthenticationFilter extends OncePerRequestFilter {
|
|||||||
"/api/third/party/existNoLoginRequired","/api/third/party/getRedirectUrl",
|
"/api/third/party/existNoLoginRequired","/api/third/party/getRedirectUrl",
|
||||||
"/api/python/flush","/api/account/healthy","/api/ali-pay/trade/notify","/api/paypal/ipn/back","/api/alipay-hk/trade/notify",
|
"/api/python/flush","/api/account/healthy","/api/ali-pay/trade/notify","/api/paypal/ipn/back","/api/alipay-hk/trade/notify",
|
||||||
"/api/portfolio/page", "/api/portfolio/detail",
|
"/api/portfolio/page", "/api/portfolio/detail",
|
||||||
"/api/account/designWorksRegister"
|
"/api/account/designWorksRegister","/api/account/questionnaire"
|
||||||
);
|
);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -450,6 +450,106 @@ public class SendEmailUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final static Long QUESTIONNAIRE_FEEDBACK_EN_ID = 124151L;
|
||||||
|
private final static Long QUESTIONNAIRE_FEEDBACK_CN_ID = 124156L;
|
||||||
|
public static void questionnaireRelatedNotify(String userName, String email, String language){
|
||||||
|
try {
|
||||||
|
// 实例化一个认证对象
|
||||||
|
Credential cred = new Credential(SECRET_ID, SECRET_KEy);
|
||||||
|
HttpProfile httpProfile = new HttpProfile();
|
||||||
|
httpProfile.setEndpoint("ses.tencentcloudapi.com");
|
||||||
|
ClientProfile clientProfile = new ClientProfile();
|
||||||
|
clientProfile.setHttpProfile(httpProfile);
|
||||||
|
SesClient client = new SesClient(cred, "ap-hongkong", clientProfile);
|
||||||
|
SendEmailRequest req = new SendEmailRequest();
|
||||||
|
req.setFromEmailAddress(CODE_CREATE_SEND_ADDRESS);
|
||||||
|
req.setDestination(new String[]{email});
|
||||||
|
|
||||||
|
// 根据邮件类型设置不同的主题和模板
|
||||||
|
Template template = new Template();
|
||||||
|
String subject = "Thank You for Completing the AiDA System Survey";
|
||||||
|
template.setTemplateID(QUESTIONNAIRE_FEEDBACK_EN_ID);
|
||||||
|
if (language.equals("CN")) {
|
||||||
|
subject = "感谢您完成AiDA系统问卷调查";
|
||||||
|
template.setTemplateID(QUESTIONNAIRE_FEEDBACK_CN_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject parameter = new JSONObject();
|
||||||
|
parameter.put("userName", userName);
|
||||||
|
|
||||||
|
template.setTemplateData(parameter.toJSONString());
|
||||||
|
|
||||||
|
req.setSubject(subject);
|
||||||
|
req.setTemplate(template);
|
||||||
|
|
||||||
|
// 发送邮件
|
||||||
|
SendEmailResponse resp = client.SendEmail(req);
|
||||||
|
log.info("短信发送结果res###{}", SendEmailResponse.toJsonString(resp));
|
||||||
|
} catch (TencentCloudSDKException e) {
|
||||||
|
log.info("邮件发送失败###{}", e.toString());
|
||||||
|
throw new BusinessException("failed.to.send.mail");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private final static Long NEW_USER_PAYMENT_NOTIFICATION_EN = 0L;
|
||||||
|
private final static Long NEW_USER_PAYMENT_NOTIFICATION_CN = 0L;
|
||||||
|
private final static Long RENEWAL_NOTIFICATION_FOR_OLD_USER_EN = 0L;
|
||||||
|
private final static Long RENEWAL_NOTIFICATION_FOR_OLD_USER_CN = 0L;
|
||||||
|
|
||||||
|
public static void notificationForPaidUser(String receiverAddress, int emailType, String country){
|
||||||
|
try {
|
||||||
|
// 实例化一个认证对象
|
||||||
|
Credential cred = new Credential(SECRET_ID, SECRET_KEy);
|
||||||
|
HttpProfile httpProfile = new HttpProfile();
|
||||||
|
httpProfile.setEndpoint("ses.tencentcloudapi.com");
|
||||||
|
ClientProfile clientProfile = new ClientProfile();
|
||||||
|
clientProfile.setHttpProfile(httpProfile);
|
||||||
|
SesClient client = new SesClient(cred, "ap-hongkong", clientProfile);
|
||||||
|
SendEmailRequest req = new SendEmailRequest();
|
||||||
|
req.setFromEmailAddress(SEND_ADDRESS);
|
||||||
|
req.setDestination(new String[]{receiverAddress});
|
||||||
|
|
||||||
|
// 根据邮件类型设置不同的主题和模板
|
||||||
|
String subject = "";
|
||||||
|
Template template = new Template();
|
||||||
|
switch (emailType) {
|
||||||
|
// 新用户
|
||||||
|
case 1:
|
||||||
|
subject = "Welcome to AiDA!";
|
||||||
|
if (country.equals("China")) {
|
||||||
|
template.setTemplateID(NEW_USER_PAYMENT_NOTIFICATION_CN);
|
||||||
|
}else {
|
||||||
|
template.setTemplateID(NEW_USER_PAYMENT_NOTIFICATION_EN);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// 续费用户
|
||||||
|
case 2:
|
||||||
|
subject = "Account renewal notification";
|
||||||
|
if (country.equals("China")) {
|
||||||
|
template.setTemplateID(RENEWAL_NOTIFICATION_FOR_OLD_USER_CN);
|
||||||
|
}else {
|
||||||
|
template.setTemplateID(RENEWAL_NOTIFICATION_FOR_OLD_USER_EN);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
|
||||||
|
// template.setTemplateData(buildNotificationData(trialOrder, link));
|
||||||
|
}
|
||||||
|
|
||||||
|
req.setSubject(subject);
|
||||||
|
req.setTemplate(template);
|
||||||
|
|
||||||
|
// 发送邮件
|
||||||
|
SendEmailResponse resp = client.SendEmail(req);
|
||||||
|
log.info("短信发送结果res###{}", SendEmailResponse.toJsonString(resp));
|
||||||
|
} catch (TencentCloudSDKException e) {
|
||||||
|
log.info("邮件发送失败###{}", e.toString());
|
||||||
|
throw new BusinessException("failed.to.send.mail");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Boolean designWorksRegister(String userEmail, String randomVerifyCode) {
|
public static Boolean designWorksRegister(String userEmail, String randomVerifyCode) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -167,4 +167,14 @@ public class AccountController {
|
|||||||
public Response<AccountLoginVO> designWorksRegisterCode(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) {
|
public Response<AccountLoginVO> designWorksRegisterCode(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) {
|
||||||
return Response.success(accountService.designWorksRegisterCode(accountDesignWorksRegisterDTO));
|
return Response.success(accountService.designWorksRegisterCode(accountDesignWorksRegisterDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 填写调查问卷
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "填写调查问卷")
|
||||||
|
@PostMapping("/questionnaire")
|
||||||
|
public Response<Boolean> questionnaire(@Valid @RequestBody String questionnaireInfo){
|
||||||
|
return Response.success(accountService.collectQuestionnaires(questionnaireInfo));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.ai.da.mapper.primary;
|
||||||
|
|
||||||
|
import com.ai.da.common.config.mybatis.plus.CommonMapper;
|
||||||
|
import com.ai.da.mapper.primary.entity.Questionnaire;
|
||||||
|
|
||||||
|
public interface QuestionnaireMapper extends CommonMapper<Questionnaire> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.ai.da.mapper.primary.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName("t_questionnaire")
|
||||||
|
public class Questionnaire extends BaseEntity{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户所填调查问卷结果
|
||||||
|
*/
|
||||||
|
private String questionnaireInfo;
|
||||||
|
/**
|
||||||
|
* 调查问卷标题
|
||||||
|
*/
|
||||||
|
private String title;
|
||||||
|
}
|
||||||
57
src/main/java/com/ai/da/model/vo/QuestionnaireVO.java
Normal file
57
src/main/java/com/ai/da/model/vo/QuestionnaireVO.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package com.ai.da.model.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class QuestionnaireVO {
|
||||||
|
/**
|
||||||
|
* 用户名
|
||||||
|
*/
|
||||||
|
private String userName;
|
||||||
|
/**
|
||||||
|
* 用户性别
|
||||||
|
*/
|
||||||
|
private String gender;
|
||||||
|
/**
|
||||||
|
* 职业
|
||||||
|
*/
|
||||||
|
private String occupation;
|
||||||
|
/**
|
||||||
|
* 国家
|
||||||
|
*/
|
||||||
|
private String country;
|
||||||
|
/**
|
||||||
|
* 电子邮件
|
||||||
|
*/
|
||||||
|
private String email;
|
||||||
|
/**
|
||||||
|
* 年龄区间
|
||||||
|
*/
|
||||||
|
private String age;
|
||||||
|
/**
|
||||||
|
* How has AiDA been helpful to you?
|
||||||
|
*/
|
||||||
|
private List<String> helpful;
|
||||||
|
/**
|
||||||
|
* What do you think AiDA should improve?
|
||||||
|
*/
|
||||||
|
private List<String> improve;
|
||||||
|
/**
|
||||||
|
* Will you subscribe to AiDA 3.0
|
||||||
|
*/
|
||||||
|
private String isSubscribe;
|
||||||
|
/**
|
||||||
|
* If NO, please share why:
|
||||||
|
*/
|
||||||
|
private List<String> reasonForNotSubscribe;
|
||||||
|
/**
|
||||||
|
* Are you currently using any design tools?
|
||||||
|
*/
|
||||||
|
private String designTools;
|
||||||
|
/**
|
||||||
|
* 用户所选语言
|
||||||
|
*/
|
||||||
|
private String language;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -134,4 +134,6 @@ public interface AccountService extends IService<Account> {
|
|||||||
Boolean designWorksRegister(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO);
|
Boolean designWorksRegister(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO);
|
||||||
|
|
||||||
AccountLoginVO designWorksRegisterCode(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO);
|
AccountLoginVO designWorksRegisterCode(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO);
|
||||||
|
|
||||||
|
Boolean collectQuestionnaires(String questionnaireInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,4 +30,6 @@ public interface CreditsService extends IService<CreditsDetail> {
|
|||||||
Boolean creditsPreDeduction(CreditsEventsEnum event, Integer num);
|
Boolean creditsPreDeduction(CreditsEventsEnum event, Integer num);
|
||||||
|
|
||||||
void taskCreditsDeduction(Long accountId, String taskId);
|
void taskCreditsDeduction(Long accountId, String taskId);
|
||||||
|
|
||||||
|
CreditsDetail getByAccountIdAndChangeEvent(Long accountId, String changeEvent, String changedCredits);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,31 +3,31 @@ package com.ai.da.service.impl;
|
|||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.ai.da.common.config.exception.BusinessException;
|
import com.ai.da.common.config.exception.BusinessException;
|
||||||
import com.ai.da.common.context.UserContext;
|
import com.ai.da.common.context.UserContext;
|
||||||
import com.ai.da.common.enums.LoginTypeEnum;
|
|
||||||
import com.ai.da.common.enums.AuthenticationOperationTypeEnum;
|
import com.ai.da.common.enums.AuthenticationOperationTypeEnum;
|
||||||
|
import com.ai.da.common.enums.LoginTypeEnum;
|
||||||
import com.ai.da.common.response.ResultEnum;
|
import com.ai.da.common.response.ResultEnum;
|
||||||
import com.ai.da.common.security.jwt.JWTTokenHelper;
|
import com.ai.da.common.security.jwt.JWTTokenHelper;
|
||||||
import com.ai.da.common.utils.*;
|
import com.ai.da.common.utils.*;
|
||||||
import com.ai.da.mapper.primary.AccountMapper;
|
import com.ai.da.mapper.primary.AccountMapper;
|
||||||
|
import com.ai.da.mapper.primary.QuestionnaireMapper;
|
||||||
import com.ai.da.mapper.primary.TrialOrderMapper;
|
import com.ai.da.mapper.primary.TrialOrderMapper;
|
||||||
import com.ai.da.mapper.primary.entity.Account;
|
import com.ai.da.mapper.primary.entity.*;
|
||||||
import com.ai.da.mapper.primary.entity.AccountLoginLog;
|
|
||||||
import com.ai.da.mapper.primary.entity.TrialOrder;
|
|
||||||
import com.ai.da.model.dto.*;
|
import com.ai.da.model.dto.*;
|
||||||
import com.ai.da.model.enums.AutoApproved;
|
import com.ai.da.model.enums.AutoApproved;
|
||||||
import com.ai.da.model.enums.Language;
|
import com.ai.da.model.enums.Language;
|
||||||
import com.ai.da.model.vo.AccountLoginVO;
|
import com.ai.da.model.vo.AccountLoginVO;
|
||||||
import com.ai.da.model.vo.AccountPreLoginVO;
|
import com.ai.da.model.vo.AccountPreLoginVO;
|
||||||
import com.ai.da.model.vo.AuthPrincipalVo;
|
import com.ai.da.model.vo.AuthPrincipalVo;
|
||||||
import com.ai.da.service.AccountLoginLogService;
|
import com.ai.da.model.vo.QuestionnaireVO;
|
||||||
import com.ai.da.service.AccountService;
|
import com.ai.da.service.*;
|
||||||
import com.ai.da.service.LibraryService;
|
|
||||||
import com.ai.da.service.UserLikeGroupService;
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.zaxxer.hikari.HikariConfig;
|
||||||
|
import com.zaxxer.hikari.HikariDataSource;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -36,9 +36,16 @@ import org.springframework.util.Assert;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.sql.DataSource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -72,6 +79,11 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
@Resource
|
@Resource
|
||||||
private TrialOrderMapper trialOrderMapper;
|
private TrialOrderMapper trialOrderMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private QuestionnaireMapper questionnaireMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CreditsService creditsService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@@ -264,7 +276,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
if (!verifyCode.equals(accountDTO.getEmailVerifyCode())) {
|
if (!verifyCode.equals(accountDTO.getEmailVerifyCode())) {
|
||||||
throw new BusinessException("verification.code.error", ResultEnum.PROMPT.getCode());
|
throw new BusinessException("verification.code.error", ResultEnum.PROMPT.getCode());
|
||||||
}
|
}
|
||||||
}else {
|
} else {
|
||||||
updatePwdByEmail(accountDTO.getPassword(), accountDTO.getEmail());
|
updatePwdByEmail(accountDTO.getPassword(), accountDTO.getEmail());
|
||||||
}
|
}
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
@@ -493,7 +505,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
if (CollectionUtil.isNotEmpty(accountList)) {
|
if (CollectionUtil.isNotEmpty(accountList)) {
|
||||||
if (accountList.get(0).getIsTrial() == 1) {
|
if (accountList.get(0).getIsTrial() == 1) {
|
||||||
throw new BusinessException("The email has already been registered", ResultEnum.PROMPT.getCode());
|
throw new BusinessException("The email has already been registered", ResultEnum.PROMPT.getCode());
|
||||||
}else {
|
} else {
|
||||||
Account account = accountList.get(0);
|
Account account = accountList.get(0);
|
||||||
if (null == account.getValidEndTime() || account.getValidEndTime() > System.currentTimeMillis()) {
|
if (null == account.getValidEndTime() || account.getValidEndTime() > System.currentTimeMillis()) {
|
||||||
throw new BusinessException("The email has already been registered", ResultEnum.PROMPT.getCode());
|
throw new BusinessException("The email has already been registered", ResultEnum.PROMPT.getCode());
|
||||||
@@ -523,11 +535,11 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
account.setValidStartTime(System.currentTimeMillis());
|
account.setValidStartTime(System.currentTimeMillis());
|
||||||
if (link) {
|
if (link) {
|
||||||
account.setValidEndTime(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli());
|
account.setValidEndTime(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli());
|
||||||
}else {
|
} else {
|
||||||
account.setValidEndTime(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli());
|
account.setValidEndTime(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli());
|
||||||
}
|
}
|
||||||
accountMapper.updateById(account);
|
accountMapper.updateById(account);
|
||||||
}else {
|
} else {
|
||||||
account.setUserName(trialOrder.getUserName());
|
account.setUserName(trialOrder.getUserName());
|
||||||
account.setUserPassword("Third-000000");
|
account.setUserPassword("Third-000000");
|
||||||
account.setUserEmail(trialOrder.getEmail());
|
account.setUserEmail(trialOrder.getEmail());
|
||||||
@@ -535,7 +547,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
account.setValidStartTime(System.currentTimeMillis());
|
account.setValidStartTime(System.currentTimeMillis());
|
||||||
if (link) {
|
if (link) {
|
||||||
account.setValidEndTime(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli());
|
account.setValidEndTime(Instant.now().plus(14, ChronoUnit.DAYS).toEpochMilli());
|
||||||
}else {
|
} else {
|
||||||
account.setValidEndTime(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli());
|
account.setValidEndTime(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli());
|
||||||
}
|
}
|
||||||
account.setCreateDate(new Date());
|
account.setCreateDate(new Date());
|
||||||
@@ -550,7 +562,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
// SendEmailUtil.sendCustomEmail("kaicpang.pang@connect.polyu.hk", null, trialOrder,2);
|
// SendEmailUtil.sendCustomEmail("kaicpang.pang@connect.polyu.hk", null, trialOrder,2);
|
||||||
if (trialOrder.getCountry().equals("China")) {
|
if (trialOrder.getCountry().equals("China")) {
|
||||||
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), link);
|
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), link);
|
||||||
}else {
|
} else {
|
||||||
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), link);
|
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -584,7 +596,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
account.setValidStartTime(System.currentTimeMillis());
|
account.setValidStartTime(System.currentTimeMillis());
|
||||||
account.setValidEndTime(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli());
|
account.setValidEndTime(Instant.now().plus(5, ChronoUnit.DAYS).toEpochMilli());
|
||||||
accountMapper.updateById(account);
|
accountMapper.updateById(account);
|
||||||
}else {
|
} else {
|
||||||
account.setUserName(trialOrder.getUserName());
|
account.setUserName(trialOrder.getUserName());
|
||||||
account.setUserPassword("Third-000000");
|
account.setUserPassword("Third-000000");
|
||||||
account.setUserEmail(trialOrder.getEmail());
|
account.setUserEmail(trialOrder.getEmail());
|
||||||
@@ -603,7 +615,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
// SendEmailUtil.sendCustomEmail("kaicpang.pang@connect.polyu.hk", null, trialOrder,2, trialOrder.getCountry());
|
// SendEmailUtil.sendCustomEmail("kaicpang.pang@connect.polyu.hk", null, trialOrder,2, trialOrder.getCountry());
|
||||||
if (trialOrder.getCountry().equals("China")) {
|
if (trialOrder.getCountry().equals("China")) {
|
||||||
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), false);
|
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), false);
|
||||||
}else {
|
} else {
|
||||||
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), false);
|
SendEmailUtil.sendCustomEmail(account.getUserEmail(), null, trialOrder, 3, trialOrder.getCountry(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -707,7 +719,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
accountMapper.deleteById(accountDelete);
|
accountMapper.deleteById(accountDelete);
|
||||||
userToBeUpdate.setUserName(userName);
|
userToBeUpdate.setUserName(userName);
|
||||||
accountMapper.updateById(userToBeUpdate);
|
accountMapper.updateById(userToBeUpdate);
|
||||||
}else {
|
} else {
|
||||||
accountMapper.deleteById(accountDelete);
|
accountMapper.deleteById(accountDelete);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -845,7 +857,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
" <body>\n" +
|
" <body>\n" +
|
||||||
" </body>\n" +
|
" </body>\n" +
|
||||||
" <script>\n" +
|
" <script>\n" +
|
||||||
" window.location.href = 'https://polyu.aida.com.hk?"+id+"';\n" +
|
" window.location.href = 'https://polyu.aida.com.hk?" + id + "';\n" +
|
||||||
" </script>\n" +
|
" </script>\n" +
|
||||||
" </html>";
|
" </html>";
|
||||||
}
|
}
|
||||||
@@ -889,7 +901,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
throw new BusinessException("Illegal serial number.");
|
throw new BusinessException("Illegal serial number.");
|
||||||
}
|
}
|
||||||
queryWrapperDelete.lambda().eq(Account::getUserName, "PolyU-SFT-" + noLoginRequiredDTO.getId());
|
queryWrapperDelete.lambda().eq(Account::getUserName, "PolyU-SFT-" + noLoginRequiredDTO.getId());
|
||||||
}else {
|
} else {
|
||||||
queryWrapperDelete.lambda().like(Account::getBrowserIdentifiers, ipAddress);
|
queryWrapperDelete.lambda().like(Account::getBrowserIdentifiers, ipAddress);
|
||||||
}
|
}
|
||||||
List<Account> accountList = accountMapper.selectList(queryWrapperDelete);
|
List<Account> accountList = accountMapper.selectList(queryWrapperDelete);
|
||||||
@@ -923,7 +935,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
// SendEmailUtil.sendUpgradeNotification(account, null, 1);
|
// SendEmailUtil.sendUpgradeNotification(account, null, 1);
|
||||||
if (account.getLanguage().equals(Language.CHINESE_SIMPLIFIED.name())) {
|
if (account.getLanguage().equals(Language.CHINESE_SIMPLIFIED.name())) {
|
||||||
SendEmailUtil.sendUpgradeNotification(account, null, 0);
|
SendEmailUtil.sendUpgradeNotification(account, null, 0);
|
||||||
}else {
|
} else {
|
||||||
// 英文
|
// 英文
|
||||||
SendEmailUtil.sendUpgradeNotification(account, null, 1);
|
SendEmailUtil.sendUpgradeNotification(account, null, 1);
|
||||||
}
|
}
|
||||||
@@ -937,7 +949,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
// 未迁移过的进行迁移,注意模特数据迁移打点信息以及转换模特格式
|
// 未迁移过的进行迁移,注意模特数据迁移打点信息以及转换模特格式
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateCredits(Long accountId, String value){
|
public void updateCredits(Long accountId, String value) {
|
||||||
Account account = new Account();
|
Account account = new Account();
|
||||||
account.setId(accountId);
|
account.setId(accountId);
|
||||||
account.setCredits(new BigDecimal(value));
|
account.setCredits(new BigDecimal(value));
|
||||||
@@ -954,7 +966,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
String randomVerifyCode = RandomsUtil.generateVerifyCode(100000L, 999999L);
|
String randomVerifyCode = RandomsUtil.generateVerifyCode(100000L, 999999L);
|
||||||
LocalCacheUtils.setVerifyCodeCache("DesignWorksRegister"+ "_" + accountDesignWorksRegisterDTO.getUserEmail(), randomVerifyCode);
|
LocalCacheUtils.setVerifyCodeCache("DesignWorksRegister" + "_" + accountDesignWorksRegisterDTO.getUserEmail(), randomVerifyCode);
|
||||||
|
|
||||||
Boolean b = SendEmailUtil.designWorksRegister(accountDesignWorksRegisterDTO.getUserEmail(), randomVerifyCode);
|
Boolean b = SendEmailUtil.designWorksRegister(accountDesignWorksRegisterDTO.getUserEmail(), randomVerifyCode);
|
||||||
if (!b) {
|
if (!b) {
|
||||||
@@ -966,7 +978,7 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
@Override
|
@Override
|
||||||
public AccountLoginVO designWorksRegisterCode(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) {
|
public AccountLoginVO designWorksRegisterCode(AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) {
|
||||||
|
|
||||||
String verifyCode = LocalCacheUtils.getVerifyCodeCache("DesignWorksRegister"+ "_" + accountDesignWorksRegisterDTO.getUserEmail());
|
String verifyCode = LocalCacheUtils.getVerifyCodeCache("DesignWorksRegister" + "_" + accountDesignWorksRegisterDTO.getUserEmail());
|
||||||
if (StringUtils.isBlank(verifyCode)) {
|
if (StringUtils.isBlank(verifyCode)) {
|
||||||
throw new BusinessException("the.verification.code.has.expired", ResultEnum.PROMPT.getCode());
|
throw new BusinessException("the.verification.code.has.expired", ResultEnum.PROMPT.getCode());
|
||||||
}
|
}
|
||||||
@@ -996,4 +1008,195 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
|
|||||||
response.setSystemUser(account.getSystemUser());
|
response.setSystemUser(account.getSystemUser());
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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'" +
|
||||||
|
" ORDER BY order_id DESC ";
|
||||||
|
|
||||||
|
private static final String QUERY_CUSTOMER_EMAIL = "SELECT username, email 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 = ? " +
|
||||||
|
"WHERE order_id = ?";
|
||||||
|
|
||||||
|
private static final DataSource dataSource;
|
||||||
|
|
||||||
|
static {
|
||||||
|
HikariConfig config = new HikariConfig();
|
||||||
|
config.setJdbcUrl("jdbc:mysql://code-create.com.hk:3306/db1nfvsgmjp3b8");
|
||||||
|
config.setUsername("uafqtz4gsvfrw");
|
||||||
|
config.setPassword("aida123456.");
|
||||||
|
config.addDataSourceProperty("cachePrepStmts", "true");
|
||||||
|
config.addDataSourceProperty("prepStmtCacheSize", "250");
|
||||||
|
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
|
||||||
|
dataSource = new HikariDataSource(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 为Code-Create的用户延长有效期
|
||||||
|
*
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
public String extendValidityForCC() {
|
||||||
|
try (Connection connection = dataSource.getConnection();
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement(QUERY_ORDER)) {
|
||||||
|
// preparedStatement.setString(1, "someCondition");
|
||||||
|
try (ResultSet queryOrderResultSet = preparedStatement.executeQuery()) {
|
||||||
|
while (queryOrderResultSet.next()) {
|
||||||
|
/* 处理结果集 */
|
||||||
|
int orderId = queryOrderResultSet.getInt("order_id");
|
||||||
|
int customerId = queryOrderResultSet.getInt("customer_id");
|
||||||
|
double totalSales = queryOrderResultSet.getDouble("total_sales");
|
||||||
|
String email = "";
|
||||||
|
String userName = "";
|
||||||
|
// 1、查pmr_wc_customer_lookup表;确认当前订单对应的用户邮箱
|
||||||
|
PreparedStatement preparedQueryEmail = connection.prepareStatement(QUERY_CUSTOMER_EMAIL);
|
||||||
|
preparedQueryEmail.setInt(1, customerId);
|
||||||
|
try (ResultSet queryEmailResultSet = preparedQueryEmail.executeQuery()) {
|
||||||
|
if (queryEmailResultSet.next()) {
|
||||||
|
email = queryEmailResultSet.getString("email");
|
||||||
|
userName = queryEmailResultSet.getString("username");
|
||||||
|
} else {
|
||||||
|
log.error("未知错误。code-create的用户表中没有付费用户的信息");
|
||||||
|
throw new BusinessException("user info missing");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2、查t_account表中是否有该用户
|
||||||
|
// 2.1 没有 新建用户
|
||||||
|
Account userInfo = null;
|
||||||
|
Long validEndTime = null;
|
||||||
|
// 标志当前用户是不是新用户
|
||||||
|
Boolean flag = Boolean.FALSE;
|
||||||
|
try {
|
||||||
|
// 不是新用户 直接延长使用期限
|
||||||
|
userInfo = getOneByEmail(email);
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
// 通过邮箱找不到用户 说明是新用户 => 创建用户
|
||||||
|
flag = Boolean.TRUE;
|
||||||
|
}
|
||||||
|
if (!Objects.isNull(userInfo) && !Objects.isNull(userInfo.getValidEndTime()))
|
||||||
|
validEndTime = userInfo.getValidEndTime();
|
||||||
|
|
||||||
|
// 2、获取当前续费费用能延长多长时间
|
||||||
|
Account account = extendValidity(validEndTime, totalSales);
|
||||||
|
|
||||||
|
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));
|
||||||
|
if (b) log.info("付费新用户新增成功!");
|
||||||
|
} else {
|
||||||
|
userInfo.setValidEndTime(account.getValidEndTime());
|
||||||
|
baseMapper.updateById(account);
|
||||||
|
log.info("付费用户续订成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3、todo 邮件通知
|
||||||
|
// 3.1 判断用户语言
|
||||||
|
|
||||||
|
// 3.2 将用户信息填到邮件中
|
||||||
|
|
||||||
|
// 4、更新订单状态和日期
|
||||||
|
PreparedStatement preparedUpdateOrder = connection.prepareStatement(UPDATE_ORDER_STATUS);
|
||||||
|
LocalDateTime localDateTime = LocalDateTime.now();
|
||||||
|
String currentTime = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||||||
|
|
||||||
|
preparedUpdateOrder.setString(1, currentTime);
|
||||||
|
preparedUpdateOrder.setInt(2, orderId);
|
||||||
|
int row = preparedUpdateOrder.executeUpdate();
|
||||||
|
if (row == 1) log.info("表 pmr_wc_order_stats 订单状态更新成功");
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// 记录异常并处理
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Account extendValidity(Long validEndTime, double totalSales) {
|
||||||
|
Instant specifiedInstant;
|
||||||
|
Account account = new Account();
|
||||||
|
long epochMilli = Instant.now().toEpochMilli();
|
||||||
|
if (!Objects.isNull(validEndTime) && validEndTime > epochMilli) {
|
||||||
|
// 将 Unix 毫秒级时间戳转换为 Instant
|
||||||
|
specifiedInstant = Instant.ofEpochMilli(validEndTime);
|
||||||
|
} else {
|
||||||
|
specifiedInstant = Instant.now();
|
||||||
|
account.setValidStartTime(specifiedInstant.toEpochMilli());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 指定时区
|
||||||
|
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
|
||||||
|
// 将 Instant 转换为 ZonedDateTime,使用指定时区
|
||||||
|
ZonedDateTime specifiedDateTime = ZonedDateTime.ofInstant(specifiedInstant, zoneId);
|
||||||
|
ZonedDateTime validityExtension;
|
||||||
|
if (totalSales == 500) {
|
||||||
|
// 一个月
|
||||||
|
validityExtension = specifiedDateTime.plusMonths(1);
|
||||||
|
} else if (totalSales == 5000) {
|
||||||
|
// 一年
|
||||||
|
validityExtension = specifiedDateTime.plusYears(1);
|
||||||
|
} else {
|
||||||
|
// 测试 一天
|
||||||
|
validityExtension = specifiedDateTime.plusDays(1);
|
||||||
|
}
|
||||||
|
// 获取一个月之后的时间的 Unix 毫秒级时间戳
|
||||||
|
account.setValidEndTime(validityExtension.toInstant().toEpochMilli());
|
||||||
|
return account;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 收集调查问卷的信息
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public Boolean collectQuestionnaires(String questionnaireInfo) {
|
||||||
|
log.info("调查问卷详细信息:{}", questionnaireInfo);
|
||||||
|
QuestionnaireVO questionnaireVO = JSON.parseObject(questionnaireInfo, QuestionnaireVO.class);
|
||||||
|
String email = questionnaireVO.getEmail();
|
||||||
|
// 1、通过邮箱判断当前用户有无系统账号
|
||||||
|
Account account;
|
||||||
|
try {
|
||||||
|
account = getOneByEmail(email);
|
||||||
|
} catch (BusinessException e) {
|
||||||
|
log.info(e.getMessage());
|
||||||
|
log.warn("当前用户 {} 在AiDA中没有账号", email);
|
||||||
|
throw new BusinessException("user.has.no.account",ResultEnum.PROMPT.getCode());
|
||||||
|
}
|
||||||
|
// 2、先判断当前用户是否已经填写过问卷
|
||||||
|
CreditsDetail record = creditsService.getByAccountIdAndChangeEvent(account.getId(), "Fill out the questionnaire", "+100");
|
||||||
|
if (!Objects.isNull(record)) {
|
||||||
|
log.info("当前用户 {} 已经填写过问卷", email);
|
||||||
|
throw new BusinessException("questionnaire.filled.out", ResultEnum.PROMPT.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3.1、将问卷信息存储到数据库
|
||||||
|
Questionnaire questionnaire = new Questionnaire();
|
||||||
|
questionnaire.setQuestionnaireInfo(questionnaireInfo);
|
||||||
|
questionnaire.setTitle("AiDA_3.0 Feedback Survey--06/2024");
|
||||||
|
questionnaire.setCreateTime(LocalDateTime.now());
|
||||||
|
int insert = questionnaireMapper.insert(questionnaire);
|
||||||
|
|
||||||
|
if (insert == 1) {
|
||||||
|
// 3.2、更新 t_credits_detail表
|
||||||
|
CreditsDetail creditsDetail = new CreditsDetail();
|
||||||
|
creditsDetail.setAccountId(account.getId());
|
||||||
|
creditsDetail.setChangeEvent("Fill out the questionnaire");
|
||||||
|
creditsDetail.setChangedCredits("+100");
|
||||||
|
BigDecimal added = account.getCredits().add(new BigDecimal("100"));
|
||||||
|
creditsDetail.setCredits(added);
|
||||||
|
creditsDetail.setCreateTime(LocalDateTime.now());
|
||||||
|
creditsService.save(creditsDetail);
|
||||||
|
|
||||||
|
// 3.3、更新 t_account 表
|
||||||
|
updateCredits(account.getId(), added.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4、发邮件 区分中英文
|
||||||
|
SendEmailUtil.questionnaireRelatedNotify(questionnaireVO.getUserName(), email, questionnaireVO.getLanguage());
|
||||||
|
return Boolean.TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,4 +243,13 @@ public class CreditsServiceImpl extends ServiceImpl<CreditsDetailMapper, Credits
|
|||||||
redisUtil.removeFromString(key);
|
redisUtil.removeFromString(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CreditsDetail getByAccountIdAndChangeEvent(Long accountId, String changeEvent, String changedCredits){
|
||||||
|
QueryWrapper<CreditsDetail> qw = new QueryWrapper<>();
|
||||||
|
qw.eq("account_id", accountId);
|
||||||
|
qw.eq("change_event", changeEvent);
|
||||||
|
qw.eq("changed_credits", changedCredits);
|
||||||
|
|
||||||
|
return baseMapper.selectOne(qw);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,6 +137,8 @@ the.value.range.of.seed=The value range of seed is 0-99999
|
|||||||
image.modify.failed=Image modification failed, please try again later.
|
image.modify.failed=Image modification failed, please try again later.
|
||||||
slogan.style.cannot.be.empty=Slogan style text cannot be empty.
|
slogan.style.cannot.be.empty=Slogan style text cannot be empty.
|
||||||
slogan.image.cannot.be.empty=Slogan image cannot be empty.
|
slogan.image.cannot.be.empty=Slogan image cannot be empty.
|
||||||
|
questionnaire.filled.out=You have filled out the current questionnaire.
|
||||||
|
user.has.no.account=The current user has no account!
|
||||||
|
|
||||||
# 可能会报异常
|
# 可能会报异常
|
||||||
# Informative:
|
# Informative:
|
||||||
|
|||||||
@@ -130,8 +130,10 @@ the.workspace.lastIndex.not.found=未找到工作区的lastIndex。
|
|||||||
gender.cannot.be.empty=性别不能为空。
|
gender.cannot.be.empty=性别不能为空。
|
||||||
image.synthesis.failed=图像合成失败。
|
image.synthesis.failed=图像合成失败。
|
||||||
priority.cannot.be.repeated=优先级不能重复。
|
priority.cannot.be.repeated=优先级不能重复。
|
||||||
slogan.style.cannot.be.empty=标语风格文本不能为空.
|
slogan.style.cannot.be.empty=标语风格文本不能为空。
|
||||||
slogan.image.cannot.be.empty=标语图片不能为空.
|
slogan.image.cannot.be.empty=标语图片不能为空。
|
||||||
|
questionnaire.filled.out=您已填写过当前问卷。
|
||||||
|
user.has.no.account=当前用户没有账号。
|
||||||
|
|
||||||
# 可能会报异常
|
# 可能会报异常
|
||||||
# Informative:
|
# Informative:
|
||||||
|
|||||||
Reference in New Issue
Block a user