|
|
@ -3,6 +3,7 @@ package com.easy.admin.modules.huzhou.service.impl; |
|
|
|
import cn.afterturn.easypoi.excel.ExcelImportUtil; |
|
|
|
import cn.afterturn.easypoi.excel.entity.ImportParams; |
|
|
|
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; |
|
|
|
import cn.hutool.core.collection.CollectionUtil; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
@ -20,6 +21,7 @@ import com.easy.admin.common.util.CommonUtils; |
|
|
|
import com.easy.admin.modules.huzhou.common.HuzhouCommonUtils; |
|
|
|
import com.easy.admin.modules.huzhou.common.TemplateExcelUtils; |
|
|
|
import com.easy.admin.modules.huzhou.dao.*; |
|
|
|
import com.easy.admin.modules.huzhou.dto.HuzhouProjectinfoExportDTO; |
|
|
|
import com.easy.admin.modules.huzhou.entity.*; |
|
|
|
import com.easy.admin.modules.huzhou.service.*; |
|
|
|
import com.easy.admin.modules.huzhou.vo.*; |
|
|
@ -2642,4 +2644,114 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public HuzhouProjectinfoOV queryProjectFundPayRateById(String projectId) { |
|
|
|
// 初始化输出对象
|
|
|
|
HuzhouProjectinfoOV projectInfoOV = new HuzhouProjectinfoOV(); |
|
|
|
|
|
|
|
// 获取项目基本信息
|
|
|
|
HuzhouProjectinfo projectInfo = projectinfoMapper.selectById(projectId); |
|
|
|
if (projectInfo == null) { |
|
|
|
return projectInfoOV; // 如果项目不存在,直接返回空对象
|
|
|
|
} |
|
|
|
BeanUtils.copyProperties(projectInfo, projectInfoOV); |
|
|
|
|
|
|
|
// 获取资金信息
|
|
|
|
HuzhouProjectinfoMoney huzhouProjectinfoMoney = projectinfoMoneyMapper.selectById(projectId); |
|
|
|
if (huzhouProjectinfoMoney == null || !hasActualContracts(projectId)) { |
|
|
|
projectInfoOV.setSuperiorFundPayRate("0%"); |
|
|
|
return projectInfoOV; |
|
|
|
} |
|
|
|
|
|
|
|
// 计算实际支付的资金总额
|
|
|
|
Map<String, Double> actualFunds = calculateActualFunds(projectId); |
|
|
|
Double centralMoney = actualFunds.get("centralMoney"); |
|
|
|
Double provincialMoney = actualFunds.get("provincialMoney"); |
|
|
|
|
|
|
|
// 获取合同中的资金总额
|
|
|
|
Double contractCentralMoney = huzhouProjectinfoMoney.getContractCentralMoney(); |
|
|
|
Double contractProvincialMoney = huzhouProjectinfoMoney.getContractProvincialMoney(); |
|
|
|
|
|
|
|
log.info("查询到合同签订阶段:中央资金{},省级资金{}", contractCentralMoney, contractProvincialMoney); |
|
|
|
log.info("总计实际支付资金为:中央资金{},省级资金{}", centralMoney, provincialMoney); |
|
|
|
|
|
|
|
// 计算并设置上级资金支付率
|
|
|
|
if (contractCentralMoney != null && contractProvincialMoney != null) { |
|
|
|
Double rate = (centralMoney + provincialMoney) / (contractCentralMoney + contractProvincialMoney); |
|
|
|
String percentRate = String.format("%.0f%%", rate * 100); |
|
|
|
log.info("上级资金支付率为:{}", percentRate); |
|
|
|
projectInfoOV.setSuperiorFundPayRate(percentRate); |
|
|
|
} else { |
|
|
|
projectInfoOV.setSuperiorFundPayRate("0%"); |
|
|
|
} |
|
|
|
|
|
|
|
return projectInfoOV; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public List<HuzhouProjectinfo> queryProjectWithFundPay() { |
|
|
|
List<HuzhouProjectinfo> projectInfoList = this.list(); |
|
|
|
for (HuzhouProjectinfo projectInfo : projectInfoList) { |
|
|
|
// 填充上级资金支付率
|
|
|
|
fillSuperiorFundPayRate(projectInfo); |
|
|
|
} |
|
|
|
List<HuzhouProjectinfoExportDTO> dtoList = projectInfoList.stream() |
|
|
|
.map(projectInfo -> new HuzhouProjectinfoExportDTO(projectInfo.getProjectName(), projectInfo.getSuperiorFundPayRate() )) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
for (HuzhouProjectinfoExportDTO huzhouProjectinfoExportDTO : dtoList) { |
|
|
|
log.info("项目名称:{}--->上级资金执行率为:{}", huzhouProjectinfoExportDTO.getProjectName(),huzhouProjectinfoExportDTO.getSuperiorFundPayRate()); |
|
|
|
} |
|
|
|
return projectInfoList; |
|
|
|
} |
|
|
|
|
|
|
|
private void fillSuperiorFundPayRate(HuzhouProjectinfo projectInfo) { |
|
|
|
String projectId = projectInfo.getId(); |
|
|
|
HuzhouProjectinfoMoney huzhouProjectinfoMoney = projectinfoMoneyMapper.selectById(projectId); |
|
|
|
if (huzhouProjectinfoMoney == null || !hasActualContracts(projectId)) { |
|
|
|
projectInfo.setSuperiorFundPayRate("0%"); |
|
|
|
}else { |
|
|
|
// 获取合同签订阶段填写的资金
|
|
|
|
Double contractCentralMoney = projectinfoMoneyMapper.selectById(projectId).getContractCentralMoney(); |
|
|
|
Double contractProvincialMoney = projectinfoMoneyMapper.selectById(projectId).getContractProvincialMoney(); |
|
|
|
// 计算实际支付的资金总额
|
|
|
|
Map<String, Double> actualFunds = calculateActualFunds(projectId); |
|
|
|
Double centralMoney = actualFunds.get("centralMoney"); |
|
|
|
Double provincialMoney = actualFunds.get("provincialMoney"); |
|
|
|
// 计算并设置上级资金支付率
|
|
|
|
Double rate = (centralMoney + provincialMoney) / (contractCentralMoney + contractProvincialMoney); |
|
|
|
String percentRate = String.format("%.0f%%", rate * 100); |
|
|
|
log.info("项目名称:{}----上级资金支付率为:{}", projectInfo.getProjectName(), percentRate); |
|
|
|
projectInfo.setSuperiorFundPayRate(percentRate); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private boolean hasActualContracts(String projectId) { |
|
|
|
LambdaQueryWrapper<HuzhouContractinfo> qw = new LambdaQueryWrapper<>(); |
|
|
|
qw.eq(HuzhouContractinfo::getProjectId, projectId).eq(HuzhouContractinfo::getFlag, "实际"); |
|
|
|
List<HuzhouContractinfo> contractInfoList = contractinfoMapper.selectList(qw); |
|
|
|
return contractInfoList != null && !contractInfoList.isEmpty(); |
|
|
|
} |
|
|
|
|
|
|
|
private Map<String, Double> calculateActualFunds(String projectId) { |
|
|
|
Double centralMoney = 0.0; |
|
|
|
Double provincialMoney = 0.0; |
|
|
|
|
|
|
|
LambdaQueryWrapper<HuzhouContractinfo> qw = new LambdaQueryWrapper<>(); |
|
|
|
qw.eq(HuzhouContractinfo::getProjectId, projectId).eq(HuzhouContractinfo::getFlag, "实际"); |
|
|
|
List<HuzhouContractinfo> contractInfoList = contractinfoMapper.selectList(qw); |
|
|
|
|
|
|
|
for (HuzhouContractinfo huzhouContractinfo : contractInfoList) { |
|
|
|
Double currentCentralMoney = huzhouContractinfo.getCentralMoney(); |
|
|
|
Double currentProvincialMoney = huzhouContractinfo.getProvincialMoney(); |
|
|
|
centralMoney += (currentCentralMoney != null) ? currentCentralMoney : 0.0; |
|
|
|
provincialMoney += (currentProvincialMoney != null) ? currentProvincialMoney : 0.0; |
|
|
|
log.info("查询到{}:中央资金{},省级资金{}", huzhouContractinfo.getTaskName(), currentCentralMoney, currentProvincialMoney); |
|
|
|
} |
|
|
|
|
|
|
|
Map<String, Double> result = new HashMap<>(); |
|
|
|
result.put("centralMoney", centralMoney); |
|
|
|
result.put("provincialMoney", provincialMoney); |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|