管理员系统功能添加
This commit is contained in:
@@ -4,14 +4,16 @@ package com.ai.da.controller;
|
||||
import com.ai.da.common.context.UserContext;
|
||||
import com.ai.da.common.response.Response;
|
||||
import com.ai.da.mapper.primary.DesignMapper;
|
||||
import com.ai.da.mapper.primary.TrialOrderMapper;
|
||||
import com.ai.da.mapper.primary.entity.Account;
|
||||
import com.ai.da.mapper.primary.entity.TrialOrder;
|
||||
import com.ai.da.model.dto.AccountAddDTO;
|
||||
import com.ai.da.model.dto.UserDesignStatisticDTO;
|
||||
import com.ai.da.model.vo.QuestionnaireFeedbackVO;
|
||||
import com.ai.da.model.vo.QuestionnaireVO;
|
||||
import com.ai.da.model.vo.QueryUserConditionsVO;
|
||||
import com.ai.da.service.ConvenientInquiryService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.netty.util.internal.StringUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@@ -29,24 +32,18 @@ import java.util.*;
|
||||
@RestController
|
||||
@RequestMapping("/api/inquiry")
|
||||
public class ConvenientInquiryController {
|
||||
|
||||
@Resource
|
||||
private TrialOrderMapper trialOrderMapper;
|
||||
|
||||
@Resource
|
||||
private DesignMapper designMapper;
|
||||
|
||||
@Resource
|
||||
private ConvenientInquiryService convenientInquiryService;
|
||||
|
||||
|
||||
@ApiOperation("获取当前所有试用用户")
|
||||
@GetMapping("/getTrial")
|
||||
public Response<List<TrialOrder>> getTrial(){
|
||||
@PostMapping("/getTrial")
|
||||
public Response<IPage<TrialOrder>> getTrial(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
|
||||
Long accountId = UserContext.getUserHolder().getId();
|
||||
if (accountId.equals(31L) || accountId.equals(87L) || accountId.equals(83L) || accountId.equals(6L) || accountId.equals(4L) || accountId.equals(73L)) {
|
||||
List<TrialOrder> trialOrders = trialOrderMapper.selectList(null);
|
||||
return Response.success(trialOrders);
|
||||
return Response.success(convenientInquiryService.getTrial(queryUserConditionsVO));
|
||||
} else {
|
||||
return Response.fail("Sorry, you don't have permission");
|
||||
}
|
||||
@@ -85,17 +82,17 @@ public class ConvenientInquiryController {
|
||||
}
|
||||
|
||||
@ApiOperation("获取近期新用户")
|
||||
@PostMapping("/recentNewUser")
|
||||
@GetMapping("/recentNewUser")
|
||||
public Response<IPage<Account>> recentNewUser(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime,
|
||||
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime,
|
||||
@ApiParam("userType") @RequestParam String userType,
|
||||
@ApiParam("pageNum") @RequestParam int pageNum,
|
||||
@ApiParam("userType visitor/trial/official") @RequestParam String userType,
|
||||
@ApiParam("page") @RequestParam int page,
|
||||
@ApiParam("size") @RequestParam int size) {
|
||||
return Response.success(convenientInquiryService.recentNewUser(startTime, endTime, userType, pageNum, size));
|
||||
return Response.success(convenientInquiryService.recentNewUser(startTime, endTime, userType, page, size));
|
||||
}
|
||||
|
||||
@ApiOperation("获取近期新用户图表数据")
|
||||
@PostMapping("/recentNewUserChart")
|
||||
@GetMapping("/recentNewUserChart")
|
||||
public Response<Map<String, Object>> recentNewUserChart(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime,
|
||||
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime,
|
||||
@ApiParam("userType") @RequestParam String userType) {
|
||||
@@ -103,28 +100,72 @@ public class ConvenientInquiryController {
|
||||
}
|
||||
|
||||
@ApiOperation("获取近期活跃用户")
|
||||
@PostMapping("/recentActiveUser")
|
||||
@GetMapping("/recentActiveUser")
|
||||
public Response<IPage<Account>> recentActiveUser(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime,
|
||||
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime,
|
||||
@ApiParam("pageNum") @RequestParam int pageNum,
|
||||
@ApiParam("pageNum") @RequestParam int page,
|
||||
@ApiParam("size") @RequestParam int size) {
|
||||
return Response.success(convenientInquiryService.recentActiveUser(startTime, endTime, pageNum, size));
|
||||
return Response.success(convenientInquiryService.recentActiveUser(startTime, endTime, page, size));
|
||||
}
|
||||
|
||||
@ApiOperation("获取近期活跃用户图表数据")
|
||||
@PostMapping("/recentActiveUserChart")
|
||||
@GetMapping("/recentActiveUserChart")
|
||||
public Response<Integer> recentActiveUserChart(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime,
|
||||
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime) {
|
||||
return Response.success(convenientInquiryService.recentActiveUserChart(startTime, endTime));
|
||||
}
|
||||
|
||||
@ApiOperation("获取用户的各模块功能使用详情")
|
||||
@PostMapping("/getActiveUserFunc")
|
||||
@GetMapping("/getActiveUserFunc")
|
||||
public Response<Map<String, List<Object>>> getActiveUserFunc(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime,
|
||||
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime,
|
||||
@ApiParam("userIdList") @RequestParam List<Long> userIdList){
|
||||
@ApiParam("userIdList") @RequestParam @Nullable List<Long> userIdList) {
|
||||
return Response.success(convenientInquiryService.getActiveUserFunc(startTime, endTime, userIdList));
|
||||
}
|
||||
|
||||
@ApiOperation("试用用户到正式用户的转化率")
|
||||
@GetMapping("/conversionRate")
|
||||
public Response<Map<String, Float>> conversionRate() {
|
||||
return Response.success(convenientInquiryService.conversionRate());
|
||||
}
|
||||
|
||||
@ApiOperation("试用用户国家/城市分布")
|
||||
@GetMapping("/trialUserCountry")
|
||||
public Response<Map<String, List<Object>>> trialUserCountry() {
|
||||
return Response.success(convenientInquiryService.trialUserCountry());
|
||||
}
|
||||
|
||||
@ApiOperation("添加用户")
|
||||
@PostMapping("/addUser")
|
||||
public Response<Boolean> addUser(@Valid @RequestBody AccountAddDTO accountAddDTO) {
|
||||
return Response.success(convenientInquiryService.addUser(accountAddDTO));
|
||||
}
|
||||
|
||||
@ApiOperation("修改用户信息")
|
||||
@PostMapping("/modifyUser")
|
||||
public Response<Boolean> modifyUser(@ApiParam(value = "用户id") @RequestParam @Nullable Long accountId,
|
||||
@ApiParam(value = "有效期截止时间的毫秒级unix格式") @RequestParam @Nullable Long validEndTime,
|
||||
@ApiParam(value = "用户类型 1/2/3/0 -> yearly/monthly/trial/visitor") @RequestParam @Nullable Integer systemUser,
|
||||
@ApiParam("积分") @RequestParam @Nullable Long credits) {
|
||||
return Response.success(convenientInquiryService.modifyUser(accountId, validEndTime, systemUser, credits));
|
||||
}
|
||||
|
||||
@ApiOperation("获取用户信息")
|
||||
@PostMapping("/getUserInfo")
|
||||
public Response<IPage<Account>> getUserInfo(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
|
||||
Long accountId = UserContext.getUserHolder().getId();
|
||||
if (accountId.equals(31L) || accountId.equals(87L) || accountId.equals(83L) || accountId.equals(6L) || accountId.equals(4L) || accountId.equals(73L)) {
|
||||
return Response.success(convenientInquiryService.getUserInfo(queryUserConditionsVO));
|
||||
} else {
|
||||
return Response.fail("Sorry, you don't have permission");
|
||||
}
|
||||
}
|
||||
|
||||
@ApiOperation("获取所有用户id")
|
||||
@GetMapping("/getAllUserId")
|
||||
public Response<List<Map<String, Object>>> getAllUsrIdList() {
|
||||
return Response.success(convenientInquiryService.getAllUserIdList());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.ai.da.mapper.primary;
|
||||
import com.ai.da.common.config.mybatis.plus.CommonMapper;
|
||||
import com.ai.da.mapper.primary.entity.TrialOrder;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Mapper 接口
|
||||
*
|
||||
@@ -11,6 +13,8 @@ import com.ai.da.mapper.primary.entity.TrialOrder;
|
||||
*/
|
||||
public interface TrialOrderMapper extends CommonMapper<TrialOrder> {
|
||||
|
||||
Map<String, Long> countOfficialUser();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.ai.da.mapper.primary.entity;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
@@ -69,11 +70,13 @@ public class Account implements Serializable {
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date createDate;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
|
||||
private Date updateDate;
|
||||
|
||||
private Integer isTrial;
|
||||
|
||||
38
src/main/java/com/ai/da/model/vo/QueryUserConditionsVO.java
Normal file
38
src/main/java/com/ai/da/model/vo/QueryUserConditionsVO.java
Normal file
@@ -0,0 +1,38 @@
|
||||
package com.ai.da.model.vo;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel("按条件筛选试用用户")
|
||||
public class QueryUserConditionsVO extends PageQueryBaseVo {
|
||||
|
||||
|
||||
private List<Long> ids;
|
||||
|
||||
private String userName;
|
||||
|
||||
private String email;
|
||||
|
||||
private String country;
|
||||
|
||||
private String occupation;
|
||||
|
||||
private String startTime;
|
||||
|
||||
private String endTime;
|
||||
|
||||
@ApiModelProperty("Ascending(升序) || Descending(降序)")
|
||||
private String order;
|
||||
|
||||
// by id | time | credits
|
||||
private String orderBy;
|
||||
|
||||
private Integer systemUser;
|
||||
|
||||
}
|
||||
@@ -2,9 +2,13 @@ package com.ai.da.service;
|
||||
|
||||
import com.ai.da.mapper.primary.entity.Account;
|
||||
import com.ai.da.mapper.primary.entity.Questionnaire;
|
||||
import com.ai.da.mapper.primary.entity.TrialOrder;
|
||||
import com.ai.da.model.dto.AccountAddDTO;
|
||||
import com.ai.da.model.vo.QuestionnaireFeedbackVO;
|
||||
import com.ai.da.model.vo.QuestionnaireVO;
|
||||
import com.ai.da.model.vo.QueryUserConditionsVO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
@@ -12,6 +16,8 @@ import java.util.Map;
|
||||
|
||||
public interface ConvenientInquiryService extends IService<Questionnaire> {
|
||||
|
||||
IPage<TrialOrder> getTrial(QueryUserConditionsVO queryUserConditionsVO);
|
||||
|
||||
QuestionnaireFeedbackVO getQuestionnaireInfo();
|
||||
|
||||
List<QuestionnaireVO> getAllQuestionnaire();
|
||||
@@ -26,4 +32,16 @@ public interface ConvenientInquiryService extends IService<Questionnaire> {
|
||||
int recentActiveUserChart(String startTime, String endTime);
|
||||
|
||||
Map<String, List<Object>> getActiveUserFunc(String startTime, String endTime, List<Long> ids);
|
||||
|
||||
Map<String, Float> conversionRate();
|
||||
|
||||
Map<String, List<Object>> trialUserCountry();
|
||||
|
||||
Boolean addUser(AccountAddDTO accountAddDTO);
|
||||
|
||||
Boolean modifyUser(Long accountId, Long validEndTime, Integer systemUser, Long credits);
|
||||
|
||||
IPage<Account> getUserInfo(QueryUserConditionsVO queryUserConditionsVO);
|
||||
|
||||
List<Map<String, Object>> getAllUserIdList();
|
||||
}
|
||||
|
||||
@@ -1,28 +1,43 @@
|
||||
package com.ai.da.service.impl;
|
||||
|
||||
import com.ai.da.common.config.exception.BusinessException;
|
||||
import com.ai.da.common.constant.CommonConstant;
|
||||
import com.ai.da.common.context.UserContext;
|
||||
import com.ai.da.common.enums.CreditsEventsEnum;
|
||||
import com.ai.da.common.utils.CopyUtil;
|
||||
import com.ai.da.mapper.primary.AccountMapper;
|
||||
import com.ai.da.mapper.primary.QuestionnaireMapper;
|
||||
import com.ai.da.mapper.primary.ToProductImageResultMapper;
|
||||
import com.ai.da.mapper.primary.TrialOrderMapper;
|
||||
import com.ai.da.mapper.primary.entity.Account;
|
||||
import com.ai.da.mapper.primary.entity.Questionnaire;
|
||||
import com.ai.da.mapper.primary.entity.TrialOrder;
|
||||
import com.ai.da.model.dto.AccountAddDTO;
|
||||
import com.ai.da.model.enums.Language;
|
||||
import com.ai.da.model.vo.QuestionnaireFeedbackVO;
|
||||
import com.ai.da.model.vo.QuestionnaireVO;
|
||||
import com.ai.da.model.vo.QueryUserConditionsVO;
|
||||
import com.ai.da.service.*;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.mysql.cj.util.StringUtils;
|
||||
import io.netty.util.internal.StringUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMapper, Questionnaire> implements ConvenientInquiryService {
|
||||
|
||||
@Resource
|
||||
@@ -31,6 +46,56 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
||||
@Resource
|
||||
private AccountLoginLogService accountLoginLogService;
|
||||
|
||||
public IPage<TrialOrder> getTrial(QueryUserConditionsVO queryUserConditionsVO) {
|
||||
log.info("getTrial parameter : {},page:{}, size:{}",queryUserConditionsVO,queryUserConditionsVO.getPage(),queryUserConditionsVO.getSize());
|
||||
/* 添加按条件查询试用用户 */
|
||||
// 按用户邮箱/用户名/用户id查指定用户
|
||||
QueryWrapper<TrialOrder> queryWrapper = new QueryWrapper<>();
|
||||
if (!Objects.isNull(queryUserConditionsVO.getIds()) && !queryUserConditionsVO.getIds().isEmpty()) {
|
||||
queryWrapper.in("id", queryUserConditionsVO.getIds());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getUserName())) {
|
||||
queryWrapper.eq("user_name", queryUserConditionsVO.getUserName());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getEmail())) {
|
||||
queryWrapper.eq("email", queryUserConditionsVO.getEmail());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getCountry())) {
|
||||
queryWrapper.eq("country", queryUserConditionsVO.getCountry());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getOccupation())) {
|
||||
queryWrapper.eq("occupation", queryUserConditionsVO.getOccupation());
|
||||
}
|
||||
|
||||
// 按时间区间查
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getStartTime())) {
|
||||
queryWrapper.gt("create_time", queryUserConditionsVO.getStartTime());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getEndTime())) {
|
||||
queryWrapper.lt("create_time", queryUserConditionsVO.getEndTime());
|
||||
}
|
||||
|
||||
// 排序
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getOrder()) && !StringUtils.isNullOrEmpty(queryUserConditionsVO.getOrderBy())) {
|
||||
String orderBy = "id";
|
||||
if (queryUserConditionsVO.getOrderBy().equals("time")) {
|
||||
orderBy = "create_time";
|
||||
}
|
||||
switch (queryUserConditionsVO.getOrder()) {
|
||||
case "Ascending":
|
||||
queryWrapper.orderByAsc(orderBy);
|
||||
break;
|
||||
case "Descending":
|
||||
queryWrapper.orderByDesc(orderBy);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 分页查询
|
||||
return trialOrderMapper.selectPage(new Page<>(queryUserConditionsVO.getPage(), queryUserConditionsVO.getSize()), queryWrapper);
|
||||
// List<TrialOrder> trialOrders = trialOrderMapper.selectList(null);
|
||||
}
|
||||
|
||||
|
||||
public QuestionnaireFeedbackVO getQuestionnaireInfo() {
|
||||
String title = "AiDA_3.0 Feedback Survey--06/2024";
|
||||
@@ -195,6 +260,10 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
||||
if (StringUtil.isNullOrEmpty(startTime) && StringUtil.isNullOrEmpty(endTime)) {
|
||||
return null;
|
||||
}
|
||||
if (!StringUtil.isNullOrEmpty(startTime) && StringUtil.isNullOrEmpty(endTime)) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
endTime = LocalDateTime.now().format(formatter);
|
||||
}
|
||||
Integer type = null;
|
||||
if (!StringUtil.isNullOrEmpty(userType)) {
|
||||
type = userType.equals("visitor") ? 0 : userType.equals("trial") ? 1 : 2;
|
||||
@@ -208,6 +277,10 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
||||
if (StringUtil.isNullOrEmpty(startTime) && StringUtil.isNullOrEmpty(endTime)) {
|
||||
return null;
|
||||
}
|
||||
if (!StringUtil.isNullOrEmpty(startTime) && StringUtil.isNullOrEmpty(endTime)) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
endTime = LocalDateTime.now().format(formatter);
|
||||
}
|
||||
Integer type = null;
|
||||
if (!StringUtil.isNullOrEmpty(userType)) {
|
||||
type = userType.equals("visitor") ? 0 : userType.equals("trial") ? 1 : 2;
|
||||
@@ -232,17 +305,24 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
||||
|
||||
// 近期活跃用户
|
||||
public IPage<Account> recentActiveUser(String startTime, String endTime, int pageNum, int size) {
|
||||
if (!StringUtil.isNullOrEmpty(startTime) && StringUtil.isNullOrEmpty(endTime)) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
endTime = LocalDateTime.now().format(formatter);
|
||||
}
|
||||
List<Long> accountIds = accountLoginLogService.getByDate(startTime, endTime);
|
||||
return accountService.getPageByIds(accountIds, pageNum, size);
|
||||
}
|
||||
|
||||
// 图表数据
|
||||
public int recentActiveUserChart(String startTime, String endTime) {
|
||||
if (!StringUtil.isNullOrEmpty(startTime) && StringUtil.isNullOrEmpty(endTime)) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
endTime = LocalDateTime.now().format(formatter);
|
||||
}
|
||||
List<Long> accountIds = accountLoginLogService.getByDate(startTime, endTime);
|
||||
return accountIds.size();
|
||||
}
|
||||
|
||||
|
||||
@Resource
|
||||
private GenerateService generateService;
|
||||
@Resource
|
||||
@@ -255,6 +335,8 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
||||
private ChatRobotService chatRobotService;
|
||||
|
||||
public Map<String, List<Object>> getActiveUserFunc(String startTime, String endTime, List<Long> ids) {
|
||||
|
||||
log.info("getActiveUserFunc ==> startTime:{}, endTime:{}, accountList:{}", startTime, endTime, ids);
|
||||
// 必须指定时间区间
|
||||
if (StringUtil.isNullOrEmpty(startTime) && StringUtil.isNullOrEmpty(endTime)) {
|
||||
return null;
|
||||
@@ -306,7 +388,199 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl<QuestionnaireMappe
|
||||
return resp;
|
||||
}
|
||||
|
||||
//
|
||||
@Resource
|
||||
private TrialOrderMapper trialOrderMapper;
|
||||
|
||||
// 试用用户到正式用户的转化率
|
||||
public Map<String, Float> conversionRate() {
|
||||
|
||||
QueryWrapper<TrialOrder> queryWrapper = new QueryWrapper<>();
|
||||
// 获取试用用户总数
|
||||
queryWrapper.select("count(distinct email) as count");
|
||||
|
||||
List<Map<String, Object>> trialMaps = trialOrderMapper.selectMaps(queryWrapper);
|
||||
Long totalTrials = (Long) trialMaps.get(0).get("count");
|
||||
|
||||
// 获取从试用用户转为正式用户的用户数量
|
||||
Map<String, Long> officialMaps = trialOrderMapper.countOfficialUser();
|
||||
Long trialToOfficial = officialMaps.get("count");
|
||||
|
||||
// 计算转化率
|
||||
HashMap<String, Float> resp = new HashMap<>();
|
||||
resp.put("trialUserCount", totalTrials.floatValue());
|
||||
resp.put("trialToOfficialCount", trialToOfficial.floatValue());
|
||||
resp.put("conversionRate", new BigDecimal(trialToOfficial).divide(new BigDecimal(totalTrials), 2, RoundingMode.HALF_UP).floatValue());
|
||||
|
||||
return resp;
|
||||
|
||||
}
|
||||
|
||||
// 试用用户地区统计
|
||||
public Map<String, List<Object>> trialUserCountry() {
|
||||
QueryWrapper<TrialOrder> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.select("country, count(id) as count")
|
||||
.groupBy("country");
|
||||
List<Map<String, Object>> countryCount = trialOrderMapper.selectMaps(queryWrapper);
|
||||
|
||||
Map<Object, Object> countryCountMap = countryCount.stream().collect(Collectors.toMap(
|
||||
map -> map.get("country"),
|
||||
map -> map.get("count")
|
||||
));
|
||||
HashMap<String, List<Object>> resp = new HashMap<>();
|
||||
resp.put("names", new ArrayList<>(countryCountMap.keySet()));
|
||||
resp.put("values", new ArrayList<>(countryCountMap.values()));
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
|
||||
// 新增用户
|
||||
public Boolean addUser(AccountAddDTO accountAddDTO) {
|
||||
// 需要给的数据 用户邮箱、用户名、账号有效期截止时间、账号类型
|
||||
Account account = CopyUtil.copyObject(accountAddDTO, Account.class);
|
||||
|
||||
// 添加正式用户
|
||||
if (Objects.isNull(accountAddDTO.getSystemUser())) {
|
||||
throw new BusinessException("you have to choose user type");
|
||||
} else {
|
||||
switch (accountAddDTO.getSystemUser()) {
|
||||
case 0:
|
||||
account.setCredits(new BigDecimal(0));
|
||||
account.setIsTrial(0);
|
||||
break;
|
||||
case 1:
|
||||
account.setCredits(new BigDecimal(CreditsEventsEnum.INIT_YEARLY.getValue()));
|
||||
account.setIsTrial(0);
|
||||
break;
|
||||
case 2:
|
||||
account.setCredits(new BigDecimal(CreditsEventsEnum.INIT_MONTHLY.getValue()));
|
||||
account.setIsTrial(0);
|
||||
break;
|
||||
case 3:
|
||||
account.setCredits(new BigDecimal(CreditsEventsEnum.INIT_TRIAL.getValue()));
|
||||
account.setIsTrial(1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
account.setValidStartTime(Long.parseLong(accountAddDTO.getValidStartTime()));
|
||||
account.setValidEndTime(Long.parseLong(accountAddDTO.getValidEndTime()));
|
||||
account.setUserPassword("Third-000000");
|
||||
account.setLanguage(Language.ENGLISH.name());
|
||||
account.setCreateDate(new Date());
|
||||
account.setIsBeginner(1);
|
||||
|
||||
log.info("添加用户:{}", accountAddDTO.getUserEmail());
|
||||
return accountService.save(account);
|
||||
}
|
||||
|
||||
// 修改用户信息
|
||||
public Boolean modifyUser(Long accountId, Long validEndTime, Integer systemUser, Long credits) {
|
||||
log.info("modifyUser ==> accountId:{}, validEndTime:{}, systemUser:{}, systemUser:{}", accountId, validEndTime, systemUser, credits);
|
||||
if (Objects.isNull(accountId) && Objects.isNull(validEndTime) && Objects.isNull(systemUser) && Objects.isNull(credits)) {
|
||||
return null;
|
||||
} else if (Objects.isNull(accountId)) {
|
||||
throw new BusinessException("you have to choose a user");
|
||||
}
|
||||
|
||||
Account account = new Account();
|
||||
// 修改用户有效期截止日期、用户类型、积分
|
||||
if (!Objects.isNull(validEndTime)) {
|
||||
account.setValidEndTime(validEndTime);
|
||||
}
|
||||
if (!Objects.isNull(systemUser)) {
|
||||
account.setSystemUser(systemUser);
|
||||
}
|
||||
/*if (!StringUtils.isNullOrEmpty(systemUser)) {
|
||||
int systemUser = 0;
|
||||
switch (systemUser) {
|
||||
case "yearly":
|
||||
systemUser = 1;
|
||||
break;
|
||||
case "monthly":
|
||||
systemUser = 2;
|
||||
break;
|
||||
case "trial":
|
||||
systemUser = 3;
|
||||
break;
|
||||
case "visitor":
|
||||
systemUser = 0;
|
||||
break;
|
||||
}
|
||||
account.setSystemUser(systemUser);
|
||||
}*/
|
||||
if (!Objects.isNull(credits)) {
|
||||
account.setCredits(new BigDecimal(credits));
|
||||
}
|
||||
account.setId(accountId);
|
||||
account.setUpdateDate(new Date());
|
||||
log.info("修改用户信息:{}", accountId);
|
||||
return accountMapper.updateById(account) == 1;
|
||||
// accountService.update(account,null);
|
||||
}
|
||||
|
||||
@Resource
|
||||
private AccountMapper accountMapper;
|
||||
|
||||
// 按条件查询用户信息
|
||||
public IPage<Account> getUserInfo(QueryUserConditionsVO queryUserConditionsVO) {
|
||||
log.info("getUserInfo parameter : {},page:{}, size:{}",queryUserConditionsVO,queryUserConditionsVO.getPage(),queryUserConditionsVO.getSize());
|
||||
// 按用户邮箱/用户名/用户id查指定用户
|
||||
QueryWrapper<Account> queryWrapper = new QueryWrapper<>();
|
||||
if (!Objects.isNull(queryUserConditionsVO.getIds()) && !queryUserConditionsVO.getIds().isEmpty()) {
|
||||
queryWrapper.in("id", queryUserConditionsVO.getIds());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getUserName())) {
|
||||
queryWrapper.eq("user_name", queryUserConditionsVO.getUserName());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getEmail())) {
|
||||
queryWrapper.eq("user_email", queryUserConditionsVO.getEmail());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getCountry())) {
|
||||
queryWrapper.eq("country", queryUserConditionsVO.getCountry());
|
||||
}
|
||||
if (!Objects.isNull(queryUserConditionsVO.getSystemUser())) {
|
||||
queryWrapper.eq("system_user", queryUserConditionsVO.getSystemUser());
|
||||
}
|
||||
|
||||
// 按时间区间查
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getStartTime())) {
|
||||
queryWrapper.gt("create_date", queryUserConditionsVO.getStartTime());
|
||||
}
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getEndTime())) {
|
||||
queryWrapper.lt("create_date", queryUserConditionsVO.getEndTime());
|
||||
}
|
||||
|
||||
// 排序
|
||||
if (!StringUtils.isNullOrEmpty(queryUserConditionsVO.getOrder()) && !StringUtils.isNullOrEmpty(queryUserConditionsVO.getOrderBy())) {
|
||||
String orderBy = "id";
|
||||
switch (queryUserConditionsVO.getOrderBy()) {
|
||||
case "time":
|
||||
orderBy = "create_date";
|
||||
break;
|
||||
case "credits":
|
||||
orderBy = "credits";
|
||||
break;
|
||||
}
|
||||
switch (queryUserConditionsVO.getOrder()) {
|
||||
case "Ascending":
|
||||
queryWrapper.orderByAsc(orderBy);
|
||||
break;
|
||||
case "Descending":
|
||||
queryWrapper.orderByDesc(orderBy);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 分页查询
|
||||
return accountMapper.selectPage(new Page<>(queryUserConditionsVO.getPage(), queryUserConditionsVO.getSize()), queryWrapper);
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getAllUserIdList() {
|
||||
QueryWrapper<Account> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.select("id as value, user_name as label");
|
||||
|
||||
return accountMapper.selectMaps(queryWrapper);
|
||||
// return maps.stream().map(map -> (Long)map.get("id")).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1292,7 +1292,7 @@ public class DesignServiceImpl extends ServiceImpl<DesignMapper, Design> impleme
|
||||
.lt("create_date", endTime)
|
||||
.select("count(id) as count");
|
||||
|
||||
if (!accountIds.isEmpty()){
|
||||
if (!Objects.isNull(accountIds) && !accountIds.isEmpty() ){
|
||||
queryWrapper.in("account_id", accountIds);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,5 +17,11 @@
|
||||
<result column="is_deleted" property="isDeleted"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="countOfficialUser" resultType="java.util.Map">
|
||||
select count(distinct a.user_email) as count
|
||||
from t_account a
|
||||
inner join trial_order b
|
||||
ON a.user_email = b.email
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user