From 75fe86dbc6d1fdaff6020980b3a00db4e5a3ef9a Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期四, 20 三月 2025 18:18:13 +0800
Subject: [PATCH] 大屏接口

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ScreenController.java       |   10 +
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/THouseMapper.java               |    1 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java                   |   19 ++-
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java            |    5 +
 ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml                  |   14 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java     |   43 +++++++-
 ruoyi-system/src/main/resources/mapper/system/TBillMapper.xml                      |   11 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/TBillService.java              |   17 ++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/ScreenRentIncomeTrendVO.java        |   23 ++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java          |    5 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ScreenService.java        |   98 +++++++++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java    |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java |   27 +++--
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBillMapper.java                |    7 +
 14 files changed, 246 insertions(+), 36 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ScreenController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ScreenController.java
index 4fe08d7..6abb00a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ScreenController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ScreenController.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.service.impl.ScreenService;
+import com.ruoyi.system.vo.ScreenRentIncomeTrendVO;
 import com.ruoyi.system.vo.ScreenRentRankVO;
 import com.ruoyi.system.vo.ScreenTopStaticsDataVO;
 import io.swagger.annotations.Api;
@@ -29,9 +30,14 @@
     public R<ScreenTopStaticsDataVO> getTopStaticsData() {
         return R.ok(screenService.getTopStaticsData());
     }
-    @ApiOperation("区域租金排名")
     @GetMapping("/rent-rank")
+    @ApiOperation("区域租金排名")
     public R<List<ScreenRentRankVO>> rentRank() {
-        return R.ok(screenService.rentRank());
+        return R.ok(screenService.streetRentRank());
+    }
+    @GetMapping("/rent-income-trend")
+    @ApiOperation("租金收入趋势")
+    public R<ScreenRentIncomeTrendVO> rentIncomeTrend() {
+        return R.ok(screenService.rentIncomeTrend());
     }
 }
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
index 3df99a9..cd58196 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -1,16 +1,21 @@
 package com.ruoyi.common.utils;
 
+import org.apache.commons.lang3.time.DateFormatUtils;
+
 import java.lang.management.ManagementFactory;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.time.*;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
-
-import org.apache.commons.lang3.time.DateFormatUtils;
 
 /**
  * 时间工具类
@@ -267,7 +272,7 @@
         cal.set(Calendar.YEAR, year);
         cal.set(Calendar.MONTH, startMonth);
         cal.set(Calendar.DAY_OF_MONTH, 1);
-        cal.set(Calendar.HOUR, 0);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
         cal.set(Calendar.MINUTE, 0);
         cal.set(Calendar.SECOND, 0);
         Date first = cal.getTime();
@@ -279,9 +284,9 @@
         cal.set(Calendar.YEAR, year);
         cal.set(Calendar.MONTH, lastMonth);
         cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
-        cal.set(Calendar.HOUR, 0);
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.HOUR_OF_DAY, 23);
+        cal.set(Calendar.MINUTE, 59);
+        cal.set(Calendar.SECOND, 59);
         Date last = cal.getTime();
         map.put("last", last);
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBillMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBillMapper.java
index 357d516..d2e012a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBillMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBillMapper.java
@@ -5,9 +5,9 @@
 import com.ruoyi.system.dto.TBillDto;
 import com.ruoyi.system.model.TBill;
 import com.ruoyi.system.query.TBillQuery;
+import com.ruoyi.system.vo.ScreenRentRankVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -46,4 +46,9 @@
     BigDecimal statisticsOverdue();
 
     Integer batchBillCount(@Param("userId")String userId, @Param("billIds")List<String> billIds);
+    /**
+     * 街道租金排行
+     * @return
+     */
+    List<ScreenRentRankVO> getStreetRentRank();
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java
index 4be10f7..5a36e89 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java
@@ -28,4 +28,9 @@
     List<BillVO> contractBillList(@Param("query") TContractBillQuery query, @Param("pageInfo") PageInfo<BillVO> pageInfo);
 
     List<TContract> contractExportList(@Param("query")TContractQuery query);
+    /**
+     * 本月新增租户数
+     * @return
+     */
+    Integer getCurrentMonthRentCount();
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/THouseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/THouseMapper.java
index 1cafeac..5c9afe1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/THouseMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/THouseMapper.java
@@ -24,4 +24,5 @@
 
     List<HouseVO> userHistoryList(@Param("req")TUserHistoryQuery query, @Param("pageInfo")PageInfo<HouseVO> pageInfo);
 
+    Double getHouseRentedArea();
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TBillService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TBillService.java
index 0015ee5..abf30a2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TBillService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TBillService.java
@@ -2,18 +2,21 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.basic.PageInfo;
-import com.ruoyi.system.dto.*;
+import com.ruoyi.system.dto.BillStatisticsDto;
+import com.ruoyi.system.dto.CachPayDto;
+import com.ruoyi.system.dto.OfflinePayCheckDto;
+import com.ruoyi.system.dto.SmsByBillDto;
+import com.ruoyi.system.dto.TBillDto;
+import com.ruoyi.system.dto.TbillSaveDto;
 import com.ruoyi.system.model.TBill;
 import com.ruoyi.system.query.TBillQuery;
+import com.ruoyi.system.vo.ScreenRentRankVO;
 import com.taxi591.bankapi.dto.ChargeBillRequest;
 
 import javax.validation.constraints.NotEmpty;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.function.Consumer;
-import java.util.function.Function;
-
-import java.util.List;
 
 /**
  * <p>
@@ -87,4 +90,10 @@
     BillStatisticsDto statistics();
 
     Integer batchBillCount(String userId, List<String> billIds);
+
+    /**
+     * 查询街道租金排行
+     * @return
+     */
+    List<ScreenRentRankVO> getStreetRentRank();
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java
index 00b2a31..3bd61b1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java
@@ -43,4 +43,9 @@
 
     Boolean updateContractAuditStatus(String projectId, Integer submitStatus);
 
+    /**
+     * 本月新增租户数
+     * @return
+     */
+    Integer getCurrentMonthRentCount();
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ScreenService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ScreenService.java
index cf3554a..b4265f7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ScreenService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ScreenService.java
@@ -1,12 +1,26 @@
 package com.ruoyi.system.service.impl;
 
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.system.model.TBill;
+import com.ruoyi.system.model.TContract;
+import com.ruoyi.system.model.THouse;
+import com.ruoyi.system.service.ITStreetService;
+import com.ruoyi.system.service.TBillService;
+import com.ruoyi.system.service.TContractService;
+import com.ruoyi.system.service.THouseService;
+import com.ruoyi.system.vo.ScreenRentIncomeTrendVO;
 import com.ruoyi.system.vo.ScreenRentRankVO;
 import com.ruoyi.system.vo.ScreenTopStaticsDataVO;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Calendar;
+import java.util.ArrayList;
 
 /**
  * @author mitao
@@ -15,19 +29,97 @@
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ScreenService {
+    private final THouseService tHouseService;
+    private final TContractService tContractService;
+    private final TBillService tBillService;
+    private final ITStreetService tStreetService;
     /**
      * 获取顶部统计数据
      * @return
      */
     public ScreenTopStaticsDataVO getTopStaticsData() {
-        return null;
+        ScreenTopStaticsDataVO vo = new ScreenTopStaticsDataVO();
+        //房屋总面积
+        List<THouse> houseList = tHouseService.list();
+        Double totalArea = houseList.stream().map(item -> Double.parseDouble(item.getHouseArea())).reduce(0D, Double::sum);
+        vo.setHouseTotalArea(totalArea);
+        //已出租面积
+        Double totalRentedArea = houseList.stream().filter(item -> !item.getLeaseStatus().equals("1"))
+                .map(item -> Double.parseDouble(item.getHouseArea())).reduce(0D, Double::sum);
+        vo.setHouseRentedArea(totalRentedArea);
+        //总计应收租金
+        List<TBill> billList = tBillService.list();
+        BigDecimal totalReceivableRent = billList.stream().filter(item -> !item.getPayFeesStatus().equals("5"))
+                .map(TBill::getPayableFeesMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+        vo.setTotalReceivableRent(totalReceivableRent);
+        //总计已收租金
+        BigDecimal totalReceivedRent = billList.stream().map(TBill::getPayFeesMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+        vo.setTotalReceivedRent(totalReceivedRent);
+        //本月新增租户数
+        Integer newTenantCount = tContractService.getCurrentMonthRentCount();
+        vo.setNewTenantCount(newTenantCount);
+        //总计租户数 系统租户列表里有生效合同绑定的租户总数。
+        Long count = tContractService.lambdaQuery().in(TContract::getStatus, "4", "5", "6", "7", "8", "9").groupBy(TContract::getTenantId).count();
+        vo.setTotalTenantCount(count.intValue());
+        Map<String, Date> quarterDate = DateUtils.getQuarterDate(new Date());
+        Date first = quarterDate.get("first");
+        Date last = quarterDate.get("last");
+        List<TBill> currentQuarterBillList = tBillService.lambdaQuery().between(TBill::getPayableFeesTime, first, last).list();
+        //本季度已交租金
+        BigDecimal totalRentPaid = currentQuarterBillList.stream().map(TBill::getPayFeesMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+        vo.setTotalRentPaid(totalRentPaid);
+        //本季度应交租金
+        BigDecimal totalRentShould = currentQuarterBillList.stream().filter(item -> !item.getPayFeesStatus().equals("5"))
+                .map(TBill::getPayableFeesMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+        vo.setTotalRentShould(totalRentShould);
+        return vo;
     }
 
     /**
      * 区域租金排名
      * @return
      */
-    public List<ScreenRentRankVO> rentRank() {
-        return null;
+    public List<ScreenRentRankVO> streetRentRank() {
+        return  tBillService.getStreetRentRank();
+    }
+
+    public ScreenRentIncomeTrendVO rentIncomeTrend() {
+        ScreenRentIncomeTrendVO vo = new ScreenRentIncomeTrendVO();
+        
+        // 获取当前日期
+        Date currentDate = new Date();
+        List<String> quarterLabels = new ArrayList<>();
+        List<BigDecimal> incomeData = new ArrayList<>();
+        
+        // 获取最近7个季度的数据
+        for (int i = 6; i >= 0; i--) {
+            // 计算对应季度的起止时间
+            Date targetDate = DateUtils.addMonths(currentDate, -3 * i);
+            Map<String, Date> quarterDate = DateUtils.getQuarterDate(targetDate);
+            Date quarterStart = quarterDate.get("first");
+            Date quarterEnd = quarterDate.get("last");
+            
+            // 获取该季度的账单数据并计算总和
+            BigDecimal quarterIncome = tBillService.lambdaQuery()
+                .between(TBill::getPayableFeesTime, quarterStart, quarterEnd)
+                .list()
+                .stream()
+                .map(TBill::getPayFeesMoney)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+            
+            // 生成季度标签 (格式: YY-MM月)
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(quarterEnd);
+            String label = String.format("%02d-%d月",
+                cal.get(Calendar.YEAR) % 100,
+                cal.get(Calendar.MONTH) + 1);
+            
+            quarterLabels.add(label);
+            incomeData.add(quarterIncome);
+        }
+        
+        vo.setQuarters(quarterLabels);
+        vo.setIncomeData(incomeData);
+        return vo;
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
index 0376220..05bbd56 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
@@ -1,21 +1,42 @@
 package com.ruoyi.system.service.impl;
 
-import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
-import com.ruoyi.common.config.SmsProperties;
 import com.ruoyi.common.constant.AmountConstant;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.exception.ServiceException;
-import com.ruoyi.common.utils.*;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.OrderNos;
+import com.ruoyi.common.utils.SmsUtil;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.TencentMailUtil;
 import com.ruoyi.common.utils.uuid.UUID;
-import com.ruoyi.system.dto.*;
+import com.ruoyi.system.dto.BillStatisticsDto;
+import com.ruoyi.system.dto.CachPayDto;
+import com.ruoyi.system.dto.OfflinePayCheckDto;
+import com.ruoyi.system.dto.SmsByBillDto;
+import com.ruoyi.system.dto.TBillDto;
+import com.ruoyi.system.dto.TbillSaveDto;
 import com.ruoyi.system.mapper.TBillMapper;
-import com.ruoyi.system.model.*;
+import com.ruoyi.system.model.TBankFlow;
+import com.ruoyi.system.model.TBill;
+import com.ruoyi.system.model.TBillDetail;
+import com.ruoyi.system.model.TFlowManagement;
+import com.ruoyi.system.model.TInvoiceToBill;
+import com.ruoyi.system.model.TOrderBill;
+import com.ruoyi.system.model.TPayOrder;
 import com.ruoyi.system.query.TBillQuery;
 import com.ruoyi.system.query.TInvoiceToBillQuery;
-import com.ruoyi.system.service.*;
+import com.ruoyi.system.service.TBankFlowService;
+import com.ruoyi.system.service.TBillConfirmService;
+import com.ruoyi.system.service.TBillDetailService;
+import com.ruoyi.system.service.TBillService;
+import com.ruoyi.system.service.TFlowManagementService;
+import com.ruoyi.system.service.TInvoiceToBillService;
+import com.ruoyi.system.service.TOrderBillService;
+import com.ruoyi.system.service.TPayOrderService;
+import com.ruoyi.system.vo.ScreenRentRankVO;
 import com.taxi591.bankapi.dto.ChargeBillRequest;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
@@ -28,7 +49,6 @@
 import javax.validation.constraints.NotEmpty;
 import java.math.BigDecimal;
 import java.text.ParseException;
-import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Date;
@@ -552,5 +572,12 @@
         return this.baseMapper.batchBillCount(userId,billIds);
     }
 
-
+    /**
+     * 街道租金排行
+     * @return
+     */
+    @Override
+    public List<ScreenRentRankVO> getStreetRentRank() {
+        return baseMapper.getStreetRentRank();
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java
index 30368c2..623ef3d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java
@@ -4,6 +4,7 @@
 import com.aizuda.bpm.mybatisplus.mapper.FlwHisTaskMapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.constant.DictConstants;
 import com.ruoyi.common.core.domain.R;
@@ -17,7 +18,9 @@
 import com.ruoyi.system.mapper.TCheckAcceptRecordMapper;
 import com.ruoyi.system.mapper.TContractMapper;
 import com.ruoyi.system.mapper.THouseMapper;
-import com.ruoyi.system.model.*;
+import com.ruoyi.system.model.TCheckAcceptRecord;
+import com.ruoyi.system.model.TContract;
+import com.ruoyi.system.model.THouse;
 import com.ruoyi.system.query.TContractAppletQuery;
 import com.ruoyi.system.query.TContractBillQuery;
 import com.ruoyi.system.query.TContractQuery;
@@ -25,21 +28,16 @@
 import com.ruoyi.system.service.TBillService;
 import com.ruoyi.system.service.TContractRentTypeService;
 import com.ruoyi.system.service.TContractService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.vo.BillVO;
 import com.ruoyi.system.vo.CheckAcceptRecordVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.temporal.ChronoUnit;
-import java.time.temporal.TemporalAdjusters;
-import java.util.*;
-import java.util.stream.Collectors;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -198,4 +196,13 @@
         contractLambdaUpdateWrapper.eq(TContract::getId, projectId).set(TContract::getStatus, status);
         return this.update(contractLambdaUpdateWrapper);
     }
+
+    /**
+     * 本月新增租户数
+     * @return
+     */
+    @Override
+    public Integer getCurrentMonthRentCount() {
+        return baseMapper.getCurrentMonthRentCount();
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java
index 259962e..4d590af 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/THouseServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.constant.DictConstants;
 import com.ruoyi.common.utils.DictUtils;
@@ -12,7 +13,6 @@
 import com.ruoyi.system.query.THouseQuery;
 import com.ruoyi.system.query.TUserHistoryQuery;
 import com.ruoyi.system.service.THouseService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.vo.HouseVO;
 import org.springframework.stereotype.Service;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScreenRentIncomeTrendVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScreenRentIncomeTrendVO.java
new file mode 100644
index 0000000..bfda473
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/ScreenRentIncomeTrendVO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author mitao
+ * @date 2025/3/20
+ */
+@Data
+@ApiModel("租金收入区域视图对象")
+public class ScreenRentIncomeTrendVO {
+
+    @ApiModelProperty("x轴 时间列表")
+    private List<String> quarters;
+
+    @ApiModelProperty("y轴 收入列表")
+    private List<BigDecimal> incomeData;
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/TBillMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TBillMapper.xml
index 81d281c..e024b7e 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TBillMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TBillMapper.xml
@@ -186,4 +186,15 @@
             AND b.bill_type = 3
         </where>
     </select>
+    <select id="getStreetRentRank" resultType="com.ruoyi.system.vo.ScreenRentRankVO">
+        SELECT
+            ts.street_name,ROUND(COALESCE(SUM(tb.pay_fees_money),0) /10000,2) AS rentAmount
+        FROM
+            t_street ts
+                LEFT JOIN t_house th ON ts.id = th.street_id
+                LEFT JOIN t_contract tc ON tc.house_id = th.id
+                LEFT JOIN t_bill tb ON tc.id = tb.contract_id
+        GROUP BY ts.id
+        ORDER BY rentAmount DESC
+    </select>
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
index 66ccabf..92a83f9 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
@@ -124,5 +124,19 @@
 
         </where>
     </select>
+    <select id="getCurrentMonthRentCount" resultType="java.lang.Integer">
+        SELECT COUNT(DISTINCT tc.tenant_id) AS new_tenant_count
+        FROM t_contract tc
+        WHERE
+        -- 筛选本月签订的合同
+        DATE_FORMAT(tc.sign_time, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m') AND tc.status IN ("4", "5", "6", "7", "8", "9")
+        -- 且租户在本月前从未签订过任何合同
+        AND NOT EXISTS (
+        SELECT 1
+        FROM t_contract tc_hist
+        WHERE tc_hist.tenant_id = tc.tenant_id
+        AND tc_hist.sign_time <![CDATA[ < ]]> DATE_FORMAT(CURDATE(), '%Y-%m-01') AND tc_hist.status IN ("4", "5", "6", "7", "8", "9")
+        )
+    </select>
 
 </mapper>

--
Gitblit v1.7.1