| | |
| | | package com.ruoyi.web.controller.api; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.model.TContract; |
| | | import com.ruoyi.system.service.TContractService; |
| | | import com.ruoyi.system.service.impl.ScreenService; |
| | | import com.ruoyi.system.vo.TenantCountTrendVO; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.text.DateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.time.format.DateTimeFormatterBuilder; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @author mitao |
| | |
| | | @RequiredArgsConstructor |
| | | public class ScreenController { |
| | | private final ScreenService screenService; |
| | | private final TContractService contractService; |
| | | |
| | | |
| | | @GetMapping("/getTenantCountTrend") |
| | | @ApiModelProperty(value = "租户数量趋势统计") |
| | | public R<?> getTenantCountTrend() { |
| | | // 获取所有签约时间不为空的合同 |
| | | List<TContract> contracts = contractService.list(new LambdaQueryWrapper<TContract>() |
| | | .isNotNull(TContract::getSignTime)); |
| | | |
| | | // 使用年-月格式化日期,并按此分组计算每个时间段的合同数量 |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yy-M"); |
| | | |
| | | List<TenantCountTrendVO> trendData = contracts.stream() |
| | | .collect(Collectors.groupingBy(contract -> contract.getSignTime().toLocalDate() |
| | | .withDayOfMonth(1) // 将日期调整为该月的第一天,以便正确分组 |
| | | .atStartOfDay())) |
| | | .entrySet().stream() |
| | | .map(entry -> { |
| | | String period = entry.getKey().format(formatter); |
| | | long count = entry.getValue().size(); |
| | | return new TenantCountTrendVO(period, count); |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | |
| | | return R.ok(trendData); |
| | | } |
| | | |
| | | } |