package com.cyksj.web.controller.distribute; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.cyksj.common.constant.Constant; import com.cyksj.dto.Result; import com.cyksj.enums.GatewayResponse; import com.cyksj.mapper.UserDistributeRankStatisticsRecordMapper; import com.cyksj.mapper.manage.distribute.UserDistributeMapper; import com.cyksj.model.entity.UserDistribute; import com.cyksj.model.views.DistributeUserRankPersonalView; import com.cyksj.model.views.DistributeUserRankView; import com.cyksj.model.views.UserActivityDistributeDetailView; import com.cyksj.model.views.UserDistributeRankRewardDetailView; import com.cyksj.web.util.StpUserUtil; import com.ejlchina.searcher.BeanSearcher; import com.ejlchina.searcher.SearchResult; import com.ejlchina.searcher.util.MapUtils; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.ChronoField; import java.util.List; /** * server/分销排行 * 项目名: yhlxj * 文件名: DistributeRankController * 创建者: JavaZou * 创建时间:2024/7/23 17:10 */ @RestController @RequestMapping("/applets/distribute/rank") @RequiredArgsConstructor public class DistributeRankController { private final BeanSearcher beanSearcher; private final HttpServletRequest request; private final UserDistributeMapper userDistributeMapper; private final UserDistributeRankStatisticsRecordMapper userDistributeRankStatisticsRecordMapper; /** * 分销排行活动详情 */ @GetMapping("/get/activity/detail") public Result getActivityDetail() { long userId = StpUserUtil.getLoginIdAsLong(); UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class) .eq(UserDistribute::getUserId, userId) .eq(UserDistribute::getDeleted, 1) .last("limit 1")); //非普通推广渠道 if (userDistribute != null) { return GatewayResponse.SUCCESS.newBuilder().toResult(); } String dateStr = DateTime.now().toString(); String time = String.format(" and (ua.start_time is null or (ua.start_time < '%s' and ua.end_time > '%s'))", dateStr, dateStr); UserActivityDistributeDetailView view = beanSearcher.searchFirst(UserActivityDistributeDetailView.class, MapUtils.flatBuilder(request.getParameterMap()) .field(UserActivityDistributeDetailView::getType, 1) .put("time", time) .build()); return GatewayResponse.SUCCESS.newBuilder().toResult(view); } /** * 个人分销排行详情 以及所属分类排行列表 */ @GetMapping("/get/personal") public Result getPersonal(@RequestParam(defaultValue = "0") Integer type, @RequestParam(defaultValue = "week") String statisticsType, @RequestParam(defaultValue = "1") Integer start, @RequestParam(defaultValue = "5") Integer limit) { long userId = StpUserUtil.getLoginIdAsLong(); DistributeUserRankPersonalView distributeUserRankPersonalView = new DistributeUserRankPersonalView(); String orderByField = Constant.money; //订单排行 if (type == 1) { orderByField = Constant.orders; } String statisticsTime; if (Constant.week.equals(statisticsType)) { //上周一 LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_WEEK, DayOfWeek.MONDAY.getValue()); statisticsTime = monday.toString(); } else { LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_MONTH, DayOfWeek.MONDAY.getValue()).plusMonths(-1); statisticsTime = monday.toString(); } DistributeUserRankView self = userDistributeRankStatisticsRecordMapper.getSelfRank(orderByField, userId, statisticsTime); distributeUserRankPersonalView.setSelf(self); Page ranks = userDistributeRankStatisticsRecordMapper.selectDistributeRanks(orderByField, statisticsTime, new Page<>(start, limit)); distributeUserRankPersonalView.setRanks(ranks); return GatewayResponse.SUCCESS.newBuilder().toResult(distributeUserRankPersonalView); } /** * 上期获奖名单 */ @GetMapping("/get/previous/winners") public Result> getPreviousWinners(@RequestParam(defaultValue = "0") Integer type, @RequestParam(defaultValue = "week") String statisticsType) { String lastTime; if (Constant.week.equals(statisticsType)) { //上周一 LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_WEEK, DayOfWeek.MONDAY.getValue()).plusWeeks(-1); lastTime = monday.toString(); } else { LocalDate monday = LocalDate.now().with(ChronoField.DAY_OF_MONTH, DayOfWeek.MONDAY.getValue()).plusMonths(-1); lastTime = monday.toString(); } String orderByField = "money"; if (type == 1) { orderByField = "orders"; } List ranks = userDistributeRankStatisticsRecordMapper.getPreviousWinners(orderByField, lastTime); return GatewayResponse.SUCCESS.newBuilder().toResult(ranks); } /** * 获奖明细 */ @GetMapping("/get/reward/detail") public Result> getUserRewardDetailView() { long userId = StpUserUtil.getLoginIdAsLong(); SearchResult search = beanSearcher.search(UserDistributeRankRewardDetailView.class, MapUtils.flatBuilder(request.getParameterMap()) .field(UserDistributeRankRewardDetailView::getUserId, userId) .orderBy(UserDistributeRankRewardDetailView::getCreatedTime).desc() .build()); return GatewayResponse.SUCCESS.newBuilder().toResult(search); } }