|
@@ -0,0 +1,183 @@
|
|
|
+package com.ylx.web.controller.massage;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.ylx.common.constant.MassageConstants;
|
|
|
+import com.ylx.common.exception.ServiceException;
|
|
|
+import com.ylx.common.utils.StringUtils;
|
|
|
+import com.ylx.massage.domain.TJsDay;
|
|
|
+import com.ylx.massage.domain.TTxRecord;
|
|
|
+import com.ylx.massage.domain.vo.HomeBlock;
|
|
|
+import com.ylx.massage.domain.vo.HomeBlocks;
|
|
|
+import com.ylx.massage.mapper.*;
|
|
|
+import com.ylx.massage.service.TOrderService;
|
|
|
+import com.ylx.massage.service.TWxUserService;
|
|
|
+import com.ylx.massage.utils.DateTimeUtils;
|
|
|
+import io.swagger.annotations.Api;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.compress.utils.Lists;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author jianlong
|
|
|
+ * @date 2024-09-02 16:58
|
|
|
+ */
|
|
|
+
|
|
|
+@RestController
|
|
|
+@RequestMapping("homeController")
|
|
|
+@Slf4j
|
|
|
+@Api(tags = {"首页"})
|
|
|
+public class HomeController {
|
|
|
+
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TOrderService orderService;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TConsumptionLogMapper consumptionLogMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TWxUserMapper wxUserMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TJsMapper jsMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TTxRecordMapper txRecordMapper;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private TJsDayMapper jsDayMapper;
|
|
|
+
|
|
|
+ @GetMapping("block")
|
|
|
+ @ApiOperation("首页数据块")
|
|
|
+ public HomeBlocks block(String deptId) {
|
|
|
+
|
|
|
+ if(StringUtils.isBlank(deptId)){
|
|
|
+ throw new ServiceException("部门Id不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取上个月时间
|
|
|
+ Date update = DateTimeUtils.addMonths(new Date(), -1);
|
|
|
+
|
|
|
+ //上个月第一天
|
|
|
+ Date start = DateTimeUtils.getBeginDayOfMonth(update);
|
|
|
+ //当月最后一天
|
|
|
+ Date end = DateTimeUtils.getEndDayOfMonth(new Date());
|
|
|
+
|
|
|
+ //营业额
|
|
|
+ //订单量
|
|
|
+ List<HomeBlock> blockOrder = orderService.getBlock(start, end, deptId);
|
|
|
+
|
|
|
+ //提现
|
|
|
+// List<HomeBlock> blockAmount = consumptionLogMapper.getBlockGetAmount(start, end, deptId);
|
|
|
+ List<HomeBlock> blockAmount = txRecordMapper.getBlockGetAmount(start, end, deptId);
|
|
|
+ //用户总数
|
|
|
+ List<HomeBlock> blockUser = wxUserMapper.getBlockGetUser(start, end, deptId);
|
|
|
+ Integer sumUser = wxUserMapper.getBlockUser();
|
|
|
+ //教练数量
|
|
|
+ List<HomeBlock> blockJs = jsMapper.getBlockGetJs(start, end, deptId);
|
|
|
+ Integer sumJs = jsMapper.getBlockJs(deptId);
|
|
|
+
|
|
|
+ //块
|
|
|
+ HomeBlocks homeBlocks = new HomeBlocks();
|
|
|
+ Optional<Integer> orderNumMax = blockOrder.stream().max(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getOrderNum()).orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+ homeBlocks.setOrderNum(orderNumMax.orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+ Optional<Integer> upOrderNum = blockOrder.stream().min(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getOrderNum()).orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+ homeBlocks.setUpOrderNum(upOrderNum.orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+
|
|
|
+ Optional<BigDecimal> turnover = blockOrder.stream().max(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getTurnover()).orElse(BigDecimal.ZERO));
|
|
|
+ homeBlocks.setTurnover(turnover.orElse(BigDecimal.ZERO));
|
|
|
+ Optional<BigDecimal> upTurnover = blockOrder.stream().min(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getTurnover()).orElse(BigDecimal.ZERO));
|
|
|
+ homeBlocks.setUpTurnover(upTurnover.orElse(BigDecimal.ZERO));
|
|
|
+
|
|
|
+ Optional<BigDecimal> getAmountMax = blockAmount.stream().max(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getGetAmount()).orElse(BigDecimal.ZERO));
|
|
|
+ homeBlocks.setGetAmount(getAmountMax.orElse(BigDecimal.ZERO));
|
|
|
+ Optional<BigDecimal> getupAmount = blockAmount.stream().min(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getGetAmount()).orElse(BigDecimal.ZERO));
|
|
|
+ homeBlocks.setUpGetAmount(getupAmount.orElse(BigDecimal.ZERO));
|
|
|
+
|
|
|
+ homeBlocks.setUserNum(sumUser);
|
|
|
+ Optional<Integer> userNumMax = blockUser.stream().max(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getUserNum()).orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+ homeBlocks.setUpUserNum(sumUser - userNumMax.orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+
|
|
|
+ homeBlocks.setJsNum(sumJs);
|
|
|
+ Optional<Integer> jsNumMax = blockJs.stream().max(Comparator.comparing(HomeBlock::getMonth)).map(i -> Optional.ofNullable(i.getJsNum()).orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+ homeBlocks.setUpJsNum(sumJs - jsNumMax.orElse(MassageConstants.INTEGER_ZERO));
|
|
|
+
|
|
|
+ return homeBlocks;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @GetMapping("columnar")
|
|
|
+ @ApiOperation("首页柱状图")
|
|
|
+ public List<HomeBlock> columnar(String deptId) {
|
|
|
+ if(StringUtils.isBlank(deptId)){
|
|
|
+ throw new ServiceException("部门Id不能为空");
|
|
|
+ }
|
|
|
+ //获取上个年时间
|
|
|
+ Date update = DateTimeUtils.addYears(new Date(), -1);
|
|
|
+ //上个月第一天
|
|
|
+ Date start = DateTimeUtils.getBeginDayOfMonth(update);
|
|
|
+ //当月最后一天
|
|
|
+ Date end = DateTimeUtils.getEndDayOfMonth(new Date());
|
|
|
+ //营业额
|
|
|
+ //订单量
|
|
|
+ List<HomeBlock> blockOrder = orderService.getBlock(start, end, deptId);
|
|
|
+ //提现
|
|
|
+ List<HomeBlock> blockAmount = txRecordMapper.getBlockGetAmount(start, end, deptId);
|
|
|
+ //用户总数
|
|
|
+ List<HomeBlock> blockUser = wxUserMapper.getBlockGetUser(start, end, deptId);
|
|
|
+ //教练数量
|
|
|
+ List<HomeBlock> blockJs = jsMapper.getBlockGetJs(start, end, deptId);
|
|
|
+ //图
|
|
|
+ blockOrder.addAll(blockAmount);
|
|
|
+ blockOrder.addAll(blockUser);
|
|
|
+ blockOrder.addAll(blockJs);
|
|
|
+ Map<String, List<HomeBlock>> blockMap = blockOrder.stream().collect(Collectors.groupingBy(HomeBlock::getMonth));
|
|
|
+ ArrayList<HomeBlock> block = Lists.newArrayList();
|
|
|
+ blockMap.forEach((k, v)->{
|
|
|
+
|
|
|
+ HomeBlock homeBlock = new HomeBlock();
|
|
|
+ homeBlock.setMonth(k);
|
|
|
+
|
|
|
+ Integer userNum = v.stream().map(i -> Optional.ofNullable(i.getUserNum()).orElse(MassageConstants.INTEGER_ZERO)).reduce(0, Integer::sum);
|
|
|
+ homeBlock.setUserNum(userNum);
|
|
|
+
|
|
|
+ Integer jsNum = v.stream().map(i -> Optional.ofNullable(i.getJsNum()).orElse(MassageConstants.INTEGER_ZERO)).reduce(0, Integer::sum);
|
|
|
+ homeBlock.setJsNum(jsNum);
|
|
|
+
|
|
|
+ Integer orderNum = v.stream().map(i -> Optional.ofNullable(i.getOrderNum()).orElse(MassageConstants.INTEGER_ZERO)).reduce(0, Integer::sum);
|
|
|
+ homeBlock.setOrderNum(orderNum);
|
|
|
+
|
|
|
+ BigDecimal rurnover = v.stream().map(i -> Optional.ofNullable(i.getTurnover()).orElse(BigDecimal.ZERO)).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ homeBlock.setTurnover(rurnover);
|
|
|
+
|
|
|
+ BigDecimal getAmount = v.stream().map(i -> Optional.ofNullable(i.getGetAmount()).orElse(BigDecimal.ZERO)).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ homeBlock.setGetAmount(getAmount);
|
|
|
+
|
|
|
+ block.add(homeBlock);
|
|
|
+ });
|
|
|
+ return block;
|
|
|
+ }
|
|
|
+
|
|
|
+ @GetMapping("ranking")
|
|
|
+ @ApiOperation("首页排名")
|
|
|
+ public List<TJsDay> ranking(String deptId,String start,String end) {
|
|
|
+ if(StringUtils.isBlank(deptId)){
|
|
|
+ throw new ServiceException("部门Id不能为空");
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<TJsDay> jsDayQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ jsDayQueryWrapper.eq(StringUtils.isNotBlank(deptId) && !"100".equals(deptId),TJsDay::getDeptId , deptId).
|
|
|
+ ge(TJsDay::getCountDate , start).le(TJsDay::getCountDate , end).orderByAsc(TJsDay::getOrderNum).last("limit 10");
|
|
|
+ List<TJsDay> tJsDays = jsDayMapper.selectList(jsDayQueryWrapper);
|
|
|
+ return tJsDays;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|