package com.ruoyi.bussiness.service.impl;
|
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.ObjUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.bussiness.domain.PlacementBatchHousehold;
|
import com.ruoyi.bussiness.mapper.PlacementBatchHouseholdMapper;
|
import com.ruoyi.bussiness.object.request.placementBatch.PlacementBatchDetailRequest;
|
import com.ruoyi.bussiness.object.request.placementBatch.ProblemExportRequest;
|
import com.ruoyi.bussiness.object.request.report.DetailExportsRequest;
|
import com.ruoyi.bussiness.object.request.report.DetailPageRequest;
|
import com.ruoyi.bussiness.object.request.report.ReportPageRequest;
|
import com.ruoyi.bussiness.object.request.report.ReportRequest;
|
import com.ruoyi.bussiness.object.response.placement.GetHouseHistoryRequest;
|
import com.ruoyi.bussiness.object.response.report.*;
|
import com.ruoyi.bussiness.object.response.screen.*;
|
import com.ruoyi.bussiness.service.PlacementBatchHouseholdService;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
|
@Service
|
public class PlacementBatchHouseholdServiceImpl extends ServiceImpl<PlacementBatchHouseholdMapper, PlacementBatchHousehold> implements PlacementBatchHouseholdService {
|
|
@Override
|
public Page<PlacementBatchHousehold> page(PlacementBatchDetailRequest request) {
|
Page<PlacementBatchHousehold> page = new Page<>(request.getPageNum(), request.getPageSize());
|
LambdaQueryWrapper<PlacementBatchHousehold> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(PlacementBatchHousehold::getPlacementBatchId,request.getPlacementBatchId());
|
if(ObjUtil.isNotEmpty(request.getStreet())){
|
queryWrapper.like(PlacementBatchHousehold::getStreet,request.getStreet());
|
}
|
if(ObjUtil.isNotEmpty(request.getCommunity())){
|
queryWrapper.like(PlacementBatchHousehold::getCommunity,request.getCommunity());
|
}
|
if(ObjUtil.isNotEmpty(request.getHouseholdHead())){
|
queryWrapper.like(PlacementBatchHousehold::getHouseholdHead,request.getHouseholdHead());
|
}
|
if(ObjUtil.isNotEmpty(request.getFamilyNames())){
|
queryWrapper.like(PlacementBatchHousehold::getWaitFamilyNames,request.getFamilyNames());
|
}
|
queryWrapper.orderByDesc(
|
PlacementBatchHousehold::getWaitFamilyNamesNoWarn,
|
PlacementBatchHousehold::getWaitFamilyAreaWarn,
|
PlacementBatchHousehold::getQuarterPayAmountWarn,
|
PlacementBatchHousehold::getAreaWarn,
|
PlacementBatchHousehold::getHouseholdHeadWarn,
|
PlacementBatchHousehold::getIdCardWarn,
|
PlacementBatchHousehold::getCompensationAmountWarn,
|
PlacementBatchHousehold::getSubsidyAmountWarn,
|
PlacementBatchHousehold::getWaitFamilyNamesWarn,
|
PlacementBatchHousehold::getDownPaymentAmountWarn,
|
PlacementBatchHousehold::getCompensationSumWarn,
|
PlacementBatchHousehold::getId
|
);
|
return this.page(page, queryWrapper);
|
}
|
|
@Override
|
public List<PlacementBatchHousehold> problemList(ProblemExportRequest request) {
|
LambdaQueryWrapper<PlacementBatchHousehold> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(PlacementBatchHousehold::getPlacementBatchId,request.getPlacementBatchId());
|
queryWrapper.and(query->query.eq(PlacementBatchHousehold::getAreaWarn,1)
|
.or().eq(PlacementBatchHousehold::getCompensationAmountWarn,1)
|
.or().eq(PlacementBatchHousehold::getHouseholdHeadWarn,1)
|
.or().eq(PlacementBatchHousehold::getIdCardWarn,1)
|
.or().eq(PlacementBatchHousehold::getCompensationSumWarn,1)
|
.or().eq(PlacementBatchHousehold::getSubsidyAmountWarn,1)
|
.or().eq(PlacementBatchHousehold::getQuarterPayAmountWarn,1)
|
.or().eq(PlacementBatchHousehold::getWaitFamilyAreaWarn,1)
|
.or().eq(PlacementBatchHousehold::getWaitFamilyNamesWarn,1));
|
|
queryWrapper.orderByDesc(PlacementBatchHousehold::getId);
|
return this.baseMapper.selectList(queryWrapper);
|
}
|
|
@Override
|
public List<PlacementBatchHousehold> allList(Long placementBatchId) {
|
LambdaQueryWrapper<PlacementBatchHousehold> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(PlacementBatchHousehold::getPlacementBatchId,placementBatchId);
|
queryWrapper.orderByDesc(PlacementBatchHousehold::getId);
|
return this.baseMapper.selectList(queryWrapper);
|
}
|
|
@Override
|
public ReportSumResponse sumHousehold(String street) {
|
ReportSumResponse reportSumResponse = this.baseMapper.reportPlacementHouseholdSum(street);
|
if(ObjUtil.isEmpty(reportSumResponse)){
|
reportSumResponse = new ReportSumResponse();
|
}
|
return reportSumResponse;
|
}
|
|
@Override
|
public ReportPageResponse reportPage(ReportPageRequest request) {
|
Page<Map<String, Object>> defaultPage = new Page<>(request.getPageNum(), request.getPageSize());
|
Page<Map<String, Object>> pageData = this.baseMapper.reportPage(defaultPage, request);
|
ReportPageResponse response = new ReportPageResponse();
|
response.setTotal(pageData.getTotal());
|
// **保证返回的 records 按 quarters 的顺序排列**
|
List<Map<String, Object>> sortedRecords = sortQuarterlyData(pageData.getRecords(), request.getQuarters());
|
response.setRecords(sortedRecords);
|
return response;
|
}
|
|
@Override
|
public List<Map<String, Object>> reportExportsList(DetailExportsRequest request) {
|
List<Map<String, Object>> dataMap = this.baseMapper.reportExportsList(request);
|
if (ObjUtil.isNotEmpty(dataMap)) {
|
return sortResultFields(dataMap);
|
}
|
return dataMap;
|
}
|
|
@Override
|
public DetailPageResponse detailPage(DetailPageRequest request) {
|
Page<DetailResponse> defaulePage = new Page<>(request.getPageNum(),request.getPageSize());
|
Page<DetailResponse> pageData = this.baseMapper.detailPage(defaulePage,request);
|
|
DetailPageResponse response = new DetailPageResponse();
|
response.setTotal(pageData.getTotal());
|
response.setRecords(pageData.getRecords());
|
return response;
|
}
|
|
@Override
|
public BigDecimal sumCurrentMonth() {
|
//本月应支付,就统计当月需要支付的 首付款、和过渡补贴支付总额。
|
String month = DateUtil.format(new Date(),"yyyy-MM");
|
return this.baseMapper.sumCurrentMonth(month);
|
}
|
|
@Override
|
public BigDecimal countCurrentPerson() {
|
//你只需要把审核通过的 购房表 的人,以及签订时间从当前日期算,不超过2个月的 合计个人数统计就行了
|
return this.baseMapper.countCurrentPerson();
|
}
|
|
@Override
|
public List<StreetResponse> getStreetResponse() {
|
return this.baseMapper.getStreetResponse();
|
}
|
|
@Override
|
public List<ImportErrorResponse> getImportErrorResponse() {
|
return this.baseMapper.getImportErrorResponse();
|
}
|
|
@Override
|
public List<MapResponse> getMapResponse() {
|
return this.baseMapper.getMapResponse();
|
}
|
|
@Override
|
public List<QuarterProcessResponse> getQuarterProcessResponse(ReportRequest request) {
|
return this.baseMapper.getQuarterProcessResponse(request);
|
}
|
|
@Override
|
public List<PlacementTypeResponse> getPlacementTypeResponse() {
|
return this.baseMapper.getPlacementTypeResponse();
|
}
|
|
@Override
|
public List<MonthCompensationResponse> getMonthCompensationResponse(String month) {
|
return this.baseMapper.getMonthCompensationResponse(month);
|
}
|
|
@Override
|
public List<Map<String, Object>> getQuarterPayResponse(List<String> quarters) {
|
return this.baseMapper.getQuarterPayResponse(quarters);
|
}
|
|
@Override
|
public List<PlacementBatchHousehold> getPlacementByCardIds(List<String> idCards) {
|
List<PlacementBatchHousehold> households = this.baseMapper.getPlacementByIdCards(idCards);
|
return households == null ? Collections.emptyList() : households;
|
}
|
|
@Override
|
public BigDecimal getPayMoneyByQuarter(String quarter) {
|
return this.baseMapper.getPayMoneyByQuarter(quarter);
|
}
|
|
@Override
|
public List<PlacementBatchHousehold> getHouseHistory(GetHouseHistoryRequest request) {
|
return this.baseMapper.getHouseHistory(request);
|
}
|
|
|
/**
|
* 索引排序
|
* @param resultList
|
* @return
|
*/
|
public static List<Map<String, Object>> sortResultFields(List<Map<String, Object>> resultList) {
|
List<Map<String, Object>> sortedList = new ArrayList<>();
|
|
for (Map<String, Object> row : resultList) {
|
// 使用 TreeMap 排序
|
Map<String, Object> sortedMap = new LinkedHashMap<>();
|
|
// 提取所有字段名
|
List<String> keys = new ArrayList<>(row.keySet());
|
|
// 按照规则排序
|
keys.sort((k1, k2) -> {
|
// 先把 "valueX" 取出来按索引排序
|
boolean isValue1 = k1.matches("value\\d+");
|
boolean isValue2 = k2.matches("value\\d+");
|
|
if (isValue1 && isValue2) {
|
// 提取 value 后的数字并比较
|
int index1 = Integer.parseInt(k1.replace("value", ""));
|
int index2 = Integer.parseInt(k2.replace("value", ""));
|
return Integer.compare(index1, index2);
|
} else if (isValue1) {
|
return 1; // valueX 在后
|
} else if (isValue2) {
|
return -1; // valueX 在后
|
} else {
|
return k1.compareTo(k2); // 其他字段按照字母顺序排序
|
}
|
});
|
|
// 按排序好的 key 顺序放入新 Map
|
for (String key : keys) {
|
sortedMap.put(key, row.get(key));
|
}
|
|
sortedList.add(sortedMap);
|
}
|
|
return sortedList;
|
}
|
|
/**
|
* 时间排序
|
* @param records
|
* @param quarters
|
* @return
|
*/
|
public List<Map<String, Object>> sortQuarterlyData(List<Map<String, Object>> records, List<String> quarters) {
|
List<Map<String, Object>> sortedRecords = new ArrayList<>();
|
|
for (Map<String, Object> record : records) {
|
// 先保留 street、downPaymentAmount、subsidyAmount 等固定字段
|
Map<String, Object> sortedMap = new LinkedHashMap<>();
|
sortedMap.put("street", record.get("street"));
|
sortedMap.put("currentCount", record.get("currentCount"));
|
sortedMap.put("downPaymentAmount", record.get("downPaymentAmount"));
|
sortedMap.put("subsidyAmount", record.get("subsidyAmount"));
|
sortedMap.put("compensationSum",record.get("compensationSum"));
|
|
// 按 quarters 的顺序加入季度数据
|
for (String quarter : quarters) {
|
sortedMap.put(quarter, record.getOrDefault(quarter, 0.00)); // 没有数据的季度填 0
|
}
|
|
sortedRecords.add(sortedMap);
|
}
|
|
return sortedRecords;
|
}
|
}
|