diff --git a/src/main/java/com/ai/da/controller/ConvenientInquiryController.java b/src/main/java/com/ai/da/controller/ConvenientInquiryController.java index f874f8ed..f4a7c9da 100644 --- a/src/main/java/com/ai/da/controller/ConvenientInquiryController.java +++ b/src/main/java/com/ai/da/controller/ConvenientInquiryController.java @@ -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,43 +32,37 @@ 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> getTrial(){ + @PostMapping("/getTrial") + public Response> 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 trialOrders = trialOrderMapper.selectList(null); - return Response.success(trialOrders); - }else { + if (accountId.equals(31L) || accountId.equals(87L) || accountId.equals(83L) || accountId.equals(6L) || accountId.equals(4L) || accountId.equals(73L)) { + return Response.success(convenientInquiryService.getTrial(queryUserConditionsVO)); + } else { return Response.fail("Sorry, you don't have permission"); } } @ApiOperation("获取指定时间区间内所有用户design的使用情况") @GetMapping("/getDesignStatistic") - public Response> getDesignStatistic(@RequestParam String startTime,@RequestParam String endTime){ + public Response> getDesignStatistic(@RequestParam String startTime, @RequestParam String endTime) { Long accountId = UserContext.getUserHolder().getId(); - if (accountId.equals(31L) || accountId.equals(87L) || accountId.equals(83L) || accountId.equals(6L) || accountId.equals(4L) || accountId.equals(73L)){ + if (accountId.equals(31L) || accountId.equals(87L) || accountId.equals(83L) || accountId.equals(6L) || accountId.equals(4L) || accountId.equals(73L)) { if (StringUtil.isNullOrEmpty(startTime)) startTime = "2024-02-01 00:00:00"; - if (StringUtil.isNullOrEmpty(endTime)){ + if (StringUtil.isNullOrEmpty(endTime)) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); endTime = simpleDateFormat.format(date); } List designStatistic = designMapper.getDesignStatistic(startTime, endTime); return Response.success(designStatistic); - }else { + } else { return Response.fail("Sorry, you don't have permission"); } } @@ -74,57 +71,101 @@ public class ConvenientInquiryController { //调查问卷 @ApiOperation("获取调查问卷统计详情") @GetMapping("/getQuestionnaireStatistic") - public Response getQuestionnaire(){ + public Response getQuestionnaire() { return Response.success(convenientInquiryService.getQuestionnaireInfo()); } @ApiOperation("获取所有调查问卷") @GetMapping("/getAllQuestionnaire") - public Response> getAllQuestionnaire(){ + public Response> getAllQuestionnaire() { return Response.success(convenientInquiryService.getAllQuestionnaire()); } @ApiOperation("获取近期新用户") - @PostMapping("/recentNewUser") + @GetMapping("/recentNewUser") public Response> 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("size") @RequestParam int size){ - return Response.success(convenientInquiryService.recentNewUser(startTime, endTime, userType, pageNum, size)); + @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, page, size)); } @ApiOperation("获取近期新用户图表数据") - @PostMapping("/recentNewUserChart") + @GetMapping("/recentNewUserChart") public Response> recentNewUserChart(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime, - @ApiParam(value = "endTime") @RequestParam @Nullable String endTime, - @ApiParam("userType") @RequestParam String userType){ + @ApiParam(value = "endTime") @RequestParam @Nullable String endTime, + @ApiParam("userType") @RequestParam String userType) { return Response.success(convenientInquiryService.recentNewUserChart(startTime, endTime, userType)); } @ApiOperation("获取近期活跃用户") - @PostMapping("/recentActiveUser") + @GetMapping("/recentActiveUser") public Response> recentActiveUser(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime, - @ApiParam(value = "endTime") @RequestParam @Nullable String endTime, - @ApiParam("pageNum") @RequestParam int pageNum, - @ApiParam("size") @RequestParam int size){ - return Response.success(convenientInquiryService.recentActiveUser(startTime, endTime, pageNum, size)); + @ApiParam(value = "endTime") @RequestParam @Nullable String endTime, + @ApiParam("pageNum") @RequestParam int page, + @ApiParam("size") @RequestParam int size) { + return Response.success(convenientInquiryService.recentActiveUser(startTime, endTime, page, size)); } @ApiOperation("获取近期活跃用户图表数据") - @PostMapping("/recentActiveUserChart") + @GetMapping("/recentActiveUserChart") public Response recentActiveUserChart(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime, - @ApiParam(value = "endTime") @RequestParam @Nullable String endTime){ + @ApiParam(value = "endTime") @RequestParam @Nullable String endTime) { return Response.success(convenientInquiryService.recentActiveUserChart(startTime, endTime)); } @ApiOperation("获取用户的各模块功能使用详情") - @PostMapping("/getActiveUserFunc") + @GetMapping("/getActiveUserFunc") public Response>> getActiveUserFunc(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime, - @ApiParam(value = "endTime") @RequestParam @Nullable String endTime, - @ApiParam("userIdList") @RequestParam List userIdList){ + @ApiParam(value = "endTime") @RequestParam @Nullable String endTime, + @ApiParam("userIdList") @RequestParam @Nullable List userIdList) { return Response.success(convenientInquiryService.getActiveUserFunc(startTime, endTime, userIdList)); } + @ApiOperation("试用用户到正式用户的转化率") + @GetMapping("/conversionRate") + public Response> conversionRate() { + return Response.success(convenientInquiryService.conversionRate()); + } + + @ApiOperation("试用用户国家/城市分布") + @GetMapping("/trialUserCountry") + public Response>> trialUserCountry() { + return Response.success(convenientInquiryService.trialUserCountry()); + } + + @ApiOperation("添加用户") + @PostMapping("/addUser") + public Response addUser(@Valid @RequestBody AccountAddDTO accountAddDTO) { + return Response.success(convenientInquiryService.addUser(accountAddDTO)); + } + + @ApiOperation("修改用户信息") + @PostMapping("/modifyUser") + public Response 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> 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>> getAllUsrIdList() { + return Response.success(convenientInquiryService.getAllUserIdList()); + } + } diff --git a/src/main/java/com/ai/da/mapper/primary/TrialOrderMapper.java b/src/main/java/com/ai/da/mapper/primary/TrialOrderMapper.java index 39def53f..65709299 100644 --- a/src/main/java/com/ai/da/mapper/primary/TrialOrderMapper.java +++ b/src/main/java/com/ai/da/mapper/primary/TrialOrderMapper.java @@ -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 { + Map countOfficialUser(); + } 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 ac09310e..8e39896b 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 @@ -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; diff --git a/src/main/java/com/ai/da/model/vo/QueryUserConditionsVO.java b/src/main/java/com/ai/da/model/vo/QueryUserConditionsVO.java new file mode 100644 index 00000000..37422556 --- /dev/null +++ b/src/main/java/com/ai/da/model/vo/QueryUserConditionsVO.java @@ -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 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; + +} diff --git a/src/main/java/com/ai/da/service/ConvenientInquiryService.java b/src/main/java/com/ai/da/service/ConvenientInquiryService.java index 00d5e349..d32fd084 100644 --- a/src/main/java/com/ai/da/service/ConvenientInquiryService.java +++ b/src/main/java/com/ai/da/service/ConvenientInquiryService.java @@ -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 { + IPage getTrial(QueryUserConditionsVO queryUserConditionsVO); + QuestionnaireFeedbackVO getQuestionnaireInfo(); List getAllQuestionnaire(); @@ -26,4 +32,16 @@ public interface ConvenientInquiryService extends IService { int recentActiveUserChart(String startTime, String endTime); Map> getActiveUserFunc(String startTime, String endTime, List ids); + + Map conversionRate(); + + Map> trialUserCountry(); + + Boolean addUser(AccountAddDTO accountAddDTO); + + Boolean modifyUser(Long accountId, Long validEndTime, Integer systemUser, Long credits); + + IPage getUserInfo(QueryUserConditionsVO queryUserConditionsVO); + + List> getAllUserIdList(); } diff --git a/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java b/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java index 92ede7aa..536f26e4 100644 --- a/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/ConvenientInquiryServiceImpl.java @@ -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 implements ConvenientInquiryService { @Resource @@ -31,6 +46,56 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl getTrial(QueryUserConditionsVO queryUserConditionsVO) { + log.info("getTrial parameter : {},page:{}, size:{}",queryUserConditionsVO,queryUserConditionsVO.getPage(),queryUserConditionsVO.getSize()); + /* 添加按条件查询试用用户 */ + // 按用户邮箱/用户名/用户id查指定用户 + QueryWrapper 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 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 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 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 accountIds = accountLoginLogService.getByDate(startTime, endTime); return accountIds.size(); } - @Resource private GenerateService generateService; @Resource @@ -255,6 +335,8 @@ public class ConvenientInquiryServiceImpl extends ServiceImpl> getActiveUserFunc(String startTime, String endTime, List 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 conversionRate() { + + QueryWrapper queryWrapper = new QueryWrapper<>(); + // 获取试用用户总数 + queryWrapper.select("count(distinct email) as count"); + + List> trialMaps = trialOrderMapper.selectMaps(queryWrapper); + Long totalTrials = (Long) trialMaps.get(0).get("count"); + + // 获取从试用用户转为正式用户的用户数量 + Map officialMaps = trialOrderMapper.countOfficialUser(); + Long trialToOfficial = officialMaps.get("count"); + + // 计算转化率 + HashMap 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> trialUserCountry() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("country, count(id) as count") + .groupBy("country"); + List> countryCount = trialOrderMapper.selectMaps(queryWrapper); + + Map countryCountMap = countryCount.stream().collect(Collectors.toMap( + map -> map.get("country"), + map -> map.get("count") + )); + HashMap> 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 getUserInfo(QueryUserConditionsVO queryUserConditionsVO) { + log.info("getUserInfo parameter : {},page:{}, size:{}",queryUserConditionsVO,queryUserConditionsVO.getPage(),queryUserConditionsVO.getSize()); + // 按用户邮箱/用户名/用户id查指定用户 + QueryWrapper 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> getAllUserIdList() { + QueryWrapper 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()); + } } diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index 4c30059e..7f779570 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -1292,7 +1292,7 @@ public class DesignServiceImpl extends ServiceImpl impleme .lt("create_date", endTime) .select("count(id) as count"); - if (!accountIds.isEmpty()){ + if (!Objects.isNull(accountIds) && !accountIds.isEmpty() ){ queryWrapper.in("account_id", accountIds); } diff --git a/src/main/resources/mapper/primary/TrialOrderMapper.xml b/src/main/resources/mapper/primary/TrialOrderMapper.xml index 30f62bf0..827aa65d 100644 --- a/src/main/resources/mapper/primary/TrialOrderMapper.xml +++ b/src/main/resources/mapper/primary/TrialOrderMapper.xml @@ -4,18 +4,24 @@ - - - - - - - - - - - + + + + + + + + + + + +