ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TContractController.java
@@ -514,7 +514,7 @@ "/usr/local/project/file/", templateFileName, templateParam, templateFileName, "租赁合同", "/usr/local/project/file/"); } @@ -523,7 +523,7 @@ if (StringUtils.isEmpty(key)){ throw new RuntimeException("key不能为空"); } templateParam.put(StringUtils.format("${{}}", "contractNumber"), value != null ? value : ""); templateParam.put("${"+key+"}", value != null ? value : ""); } /** ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/WordUtil.java
@@ -5,18 +5,31 @@ import freemarker.template.Template; import freemarker.template.TemplateException; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.xwpf.usermodel.UnderlinePatterns; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; ruoyi-system/src/main/java/com/ruoyi/system/mapper/TBillMapper.java
@@ -50,5 +50,5 @@ * 街道租金排行 * @return */ List<ScreenRentRankVO> getStreetRentRank(); List<ScreenRentRankVO> getStreetRentRank(@Param("businessDeptId") String businessDeptId); } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TContractMapper.java
@@ -32,5 +32,5 @@ * 本月新增租户数 * @return */ Integer getCurrentMonthRentCount(); Integer getCurrentMonthRentCount(@Param("businessDeptId") String businessDeptId); } ruoyi-system/src/main/java/com/ruoyi/system/service/TBillService.java
@@ -95,5 +95,5 @@ * 查询街道租金排行 * @return */ List<ScreenRentRankVO> getStreetRentRank(); List<ScreenRentRankVO> getStreetRentRank(String businessDeptId); } ruoyi-system/src/main/java/com/ruoyi/system/service/TContractService.java
@@ -47,5 +47,5 @@ * 本月新增租户数 * @return */ Integer getCurrentMonthRentCount(); Integer getCurrentMonthRentCount(String businessDeptId); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ScreenService.java
@@ -1,6 +1,8 @@ package com.ruoyi.system.service.impl; import com.ruoyi.common.enums.BillTypeEnum; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.system.model.TBill; import com.ruoyi.system.model.TContract; import com.ruoyi.system.model.THouse; @@ -16,7 +18,12 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; /** * @author mitao @@ -33,9 +40,12 @@ * @return */ public ScreenTopStaticsDataVO getTopStaticsData() { String businessDeptId = SecurityUtils.getBusinessDeptId(); ScreenTopStaticsDataVO vo = new ScreenTopStaticsDataVO(); //房屋总面积 List<THouse> houseList = tHouseService.list(); List<THouse> houseList = tHouseService.lambdaQuery() .eq(!businessDeptId.equals("0"), THouse::getBusinessDeptId, businessDeptId) .list(); Double totalArea = houseList.stream() .map(item -> Double.parseDouble(item.getHouseArea())) .reduce(0D, Double::sum); @@ -47,7 +57,10 @@ .reduce(0D, Double::sum); vo.setHouseRentedArea(totalRentedArea); //总计应收租金 List<TBill> billList = tBillService.list(); List<TBill> billList = tBillService.lambdaQuery() .eq(!businessDeptId.equals("0"), TBill::getBusinessDeptId, businessDeptId) .eq(TBill::getBillType, BillTypeEnum.Zujin.getCode()) .list(); BigDecimal totalReceivableRent = billList.stream() .filter(item -> !item.getPayFeesStatus().equals("5")) .map(TBill::getPayableFeesMoney) @@ -61,11 +74,12 @@ .divide(new BigDecimal("10000"),2, RoundingMode.HALF_UP); vo.setTotalReceivedRent(totalReceivedRent); //本月新增租户数 Integer newTenantCount = tContractService.getCurrentMonthRentCount(); Integer newTenantCount = tContractService.getCurrentMonthRentCount(businessDeptId); vo.setNewTenantCount(newTenantCount); //总计租户数 系统租户列表里有生效合同绑定的租户总数。 List<TContract> tContracts = tContractService.lambdaQuery() .in(TContract::getStatus, "4", "5", "6", "7", "8", "9") .eq(!businessDeptId.equals("0"), TContract::getBusinessDeptId, businessDeptId) .list(); long count = tContracts.stream() .map(TContract::getTenantId) @@ -76,7 +90,10 @@ Date first = quarterDate.get("first"); Date last = quarterDate.get("last"); List<TBill> currentQuarterBillList = tBillService.lambdaQuery() .eq(!businessDeptId.equals("0"), TBill::getBusinessDeptId, businessDeptId) .between(TBill::getPayableFeesTime, first, last) .eq(TBill::getBillType, BillTypeEnum.Zujin.getCode()) .ne(TBill::getPayFeesStatus, 5) .list(); //本季度已交租金 BigDecimal totalRentPaid = currentQuarterBillList.stream() @@ -98,7 +115,11 @@ .divide(BigDecimal.valueOf(10000L), 2, RoundingMode.HALF_UP); vo.setTotalRentOwe(totalRentOwe); //总计欠费 List<TBill> allBillList = tBillService.lambdaQuery().le(TBill::getPayableFeesTime, last).list(); List<TBill> allBillList = tBillService.lambdaQuery() .eq(TBill::getBillType, BillTypeEnum.Zujin.getCode()) .eq(!businessDeptId.equals("0"), TBill::getBusinessDeptId, businessDeptId) //.le(TBill::getPayableFeesTime, last) .list(); BigDecimal totalRentOweAll = allBillList.stream() .map(TBill::getOutstandingMoney) .reduce(BigDecimal.ZERO, BigDecimal::add) @@ -112,7 +133,8 @@ * @return */ public List<ScreenRentRankVO> streetRentRank() { return tBillService.getStreetRentRank(); String businessDeptId = SecurityUtils.getBusinessDeptId(); return tBillService.getStreetRentRank(businessDeptId); } /** @@ -121,7 +143,7 @@ */ public ScreenRentIncomeTrendVO rentIncomeTrend() { ScreenRentIncomeTrendVO vo = new ScreenRentIncomeTrendVO(); String businessDeptId = SecurityUtils.getBusinessDeptId(); // 获取当前日期 Date currentDate = new Date(); List<String> quarterLabels = new ArrayList<>(); // 季度标签列表 @@ -139,6 +161,8 @@ // 获取该季度的账单数据 List<TBill> quarterBills = tBillService.lambdaQuery() .between(TBill::getPayableFeesTime, quarterStart, quarterEnd) .eq(TBill::getBillType, BillTypeEnum.Zujin.getCode()) .eq(!businessDeptId.equals("0"), TBill::getBusinessDeptId, businessDeptId) .list(); // 计算季度租金收入总和 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TBillServiceImpl.java
@@ -585,7 +585,7 @@ * @return */ @Override public List<ScreenRentRankVO> getStreetRentRank() { return baseMapper.getStreetRentRank(); public List<ScreenRentRankVO> getStreetRentRank(String businessDeptId) { return baseMapper.getStreetRentRank(businessDeptId); } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TContractServiceImpl.java
@@ -211,7 +211,7 @@ * @return */ @Override public Integer getCurrentMonthRentCount() { return baseMapper.getCurrentMonthRentCount(); public Integer getCurrentMonthRentCount(String businessDeptId) { return baseMapper.getCurrentMonthRentCount(businessDeptId); } } ruoyi-system/src/main/resources/mapper/system/TBillMapper.xml
@@ -204,6 +204,11 @@ 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 <where> <if test="businessDeptId != 0"> AND th.business_dept_id = #{businessDeptId} </if> </where> GROUP BY ts.id ORDER BY rentAmount DESC </select> ruoyi-system/src/main/resources/mapper/system/TContractMapper.xml
@@ -130,16 +130,21 @@ <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") ) <where> <if test="businessDeptId!=0"> AND tc.business_dept_id = #{businessDeptId} </if> -- 筛选本月签订的合同 AND 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") ) </where> </select> </mapper>