@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray; | |||||
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; | import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; | ||||
import com.ningdatech.basic.util.StrPool; | import com.ningdatech.basic.util.StrPool; | ||||
import com.ningdatech.file.entity.vo.result.FileResultVO; | import com.ningdatech.file.entity.vo.result.FileResultVO; | ||||
import liquibase.pro.packaged.O; | |||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.springframework.util.NumberUtils; | import org.springframework.util.NumberUtils; | ||||
@@ -0,0 +1,81 @@ | |||||
package com.hz.pm.api.common.util; | |||||
import cn.hutool.core.collection.CollUtil; | |||||
import cn.hutool.core.util.ArrayUtil; | |||||
import java.math.BigDecimal; | |||||
import java.math.RoundingMode; | |||||
import java.util.Arrays; | |||||
import java.util.Collection; | |||||
import java.util.Comparator; | |||||
import java.util.function.Function; | |||||
/** | |||||
* <p> | |||||
* DecimalUtil | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 18:53 2024/2/21 | |||||
*/ | |||||
public class DecimalUtil { | |||||
private DecimalUtil() { | |||||
} | |||||
@SafeVarargs | |||||
public static <T> BigDecimal sum(Collection<T> objs, Function<T, BigDecimal>... functions) { | |||||
if (CollUtil.isEmpty(objs) || ArrayUtil.isEmpty(functions)) { | |||||
return BigDecimal.ZERO; | |||||
} | |||||
return objs.stream() | |||||
.map(w -> Arrays.stream(functions) | |||||
.map(f -> f.apply(w)) | |||||
.reduce(BigDecimal::add) | |||||
.orElse(BigDecimal.ZERO)) | |||||
.reduce(BigDecimal::add) | |||||
.orElse(BigDecimal.ZERO); | |||||
} | |||||
public static <T> BigDecimal avg(Collection<T> objs, Function<T, BigDecimal> function) { | |||||
if (CollUtil.isEmpty(objs)) { | |||||
return BigDecimal.ZERO; | |||||
} | |||||
BigDecimal size = BigDecimal.valueOf(objs.size()); | |||||
return objs.stream() | |||||
.map(function) | |||||
.reduce(BigDecimal::add) | |||||
.orElse(BigDecimal.ZERO) | |||||
.divide(size, RoundingMode.HALF_UP); | |||||
} | |||||
public static <T> BigDecimal max(Collection<T> objs, Function<T, BigDecimal> function) { | |||||
if (CollUtil.isEmpty(objs)) { | |||||
return BigDecimal.ZERO; | |||||
} | |||||
return objs.stream().map(function).max(BigDecimal::compareTo).orElse(BigDecimal.ZERO); | |||||
} | |||||
public static <T> BigDecimal min(Collection<T> objs, Function<T, BigDecimal> function) { | |||||
if (CollUtil.isEmpty(objs)) { | |||||
return BigDecimal.ZERO; | |||||
} | |||||
return objs.stream().map(function).min(BigDecimal::compareTo).orElse(BigDecimal.ZERO); | |||||
} | |||||
public static <T> T objByMax(Collection<T> objs, Function<T, BigDecimal> function) { | |||||
if (CollUtil.isEmpty(objs)) { | |||||
return null; | |||||
} | |||||
return objs.stream().max(Comparator.comparing(function)).orElse(null); | |||||
} | |||||
public static <T> T objByMin(Collection<T> objs, Function<T, BigDecimal> function) { | |||||
if (CollUtil.isEmpty(objs)) { | |||||
return null; | |||||
} | |||||
return objs.stream().min(Comparator.comparing(function)).orElse(null); | |||||
} | |||||
} |
@@ -43,7 +43,8 @@ public class ApplicationConverter { | |||||
.projectId(projectInfo.getProjectCode()) | .projectId(projectInfo.getProjectCode()) | ||||
.projectType(convertProjectType(projectInfo.getProjectType())) | .projectType(convertProjectType(projectInfo.getProjectType())) | ||||
.totalMoney(projectInfo.getDeclareAmount()) | .totalMoney(projectInfo.getDeclareAmount()) | ||||
.yearBudget(projectInfo.getAnnualPlanAmount()) | |||||
// TODO | |||||
.yearBudget(BigDecimal.ZERO) | |||||
.budgetFrom(checkAddBudget(projectInfo.getDeclareHaveAmount() | .budgetFrom(checkAddBudget(projectInfo.getDeclareHaveAmount() | ||||
, projectInfo.getDeclareGovOwnFinanceAmount(), | , projectInfo.getDeclareGovOwnFinanceAmount(), | ||||
projectInfo.getDeclareGovSuperiorFinanceAmount(), | projectInfo.getDeclareGovSuperiorFinanceAmount(), | ||||
@@ -27,10 +27,12 @@ import com.hz.pm.api.projectdeclared.service.IPreInsAcceptancePersonService; | |||||
import com.hz.pm.api.projectdeclared.service.IPurchaseService; | import com.hz.pm.api.projectdeclared.service.IPurchaseService; | ||||
import com.hz.pm.api.projectlib.helper.ProjectHelper; | import com.hz.pm.api.projectlib.helper.ProjectHelper; | ||||
import com.hz.pm.api.projectlib.model.entity.Project; | import com.hz.pm.api.projectlib.model.entity.Project; | ||||
import com.hz.pm.api.projectlib.model.entity.ProjectPaymentPlan; | |||||
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum; | import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum; | ||||
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; | import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum; | ||||
import com.hz.pm.api.projectlib.model.req.ProjectListReq; | import com.hz.pm.api.projectlib.model.req.ProjectListReq; | ||||
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO; | import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO; | ||||
import com.hz.pm.api.projectlib.service.IProjectPaymentPlanService; | |||||
import com.hz.pm.api.projectlib.service.IProjectService; | import com.hz.pm.api.projectlib.service.IProjectService; | ||||
import com.hz.pm.api.user.security.model.UserFullInfoDTO; | import com.hz.pm.api.user.security.model.UserFullInfoDTO; | ||||
import com.hz.pm.api.user.security.model.UserInfoDetails; | import com.hz.pm.api.user.security.model.UserInfoDetails; | ||||
@@ -51,10 +53,7 @@ import java.math.BigDecimal; | |||||
import java.math.RoundingMode; | import java.math.RoundingMode; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.time.format.DateTimeFormatter; | import java.time.format.DateTimeFormatter; | ||||
import java.util.Collections; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.Objects; | |||||
import java.util.*; | |||||
import java.util.concurrent.atomic.AtomicInteger; | import java.util.concurrent.atomic.AtomicInteger; | ||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
@@ -81,6 +80,7 @@ public class ConstructionManage { | |||||
private final IPreInsAcceptancePersonService acceptancePersonService; | private final IPreInsAcceptancePersonService acceptancePersonService; | ||||
private final StateMachineUtil stateMachineUtil; | private final StateMachineUtil stateMachineUtil; | ||||
private final IProjectPaymentPlanService projectPaymentPlanService; | |||||
/** | /** | ||||
* 待采购的-项目列表 | * 待采购的-项目列表 | ||||
@@ -381,6 +381,16 @@ public class ConstructionManage { | |||||
if ((total = page.getTotal()) == 0) { | if ((total = page.getTotal()) == 0) { | ||||
return PageVo.empty(); | return PageVo.empty(); | ||||
} | } | ||||
Set<String> projectCodes = new HashSet<>(); | |||||
List<Long> projectIds = new ArrayList<>(); | |||||
for (Project project : page.getRecords()) { | |||||
projectIds.add(project.getId()); | |||||
projectCodes.add(project.getProjectCode()); | |||||
} | |||||
Map<Long, List<ProjectPaymentPlan>> paymentPlansMap = projectPaymentPlanService.listByProjectIds(projectIds); | |||||
List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | ||||
ProjectLibListItemVO item = new ProjectLibListItemVO(); | ProjectLibListItemVO item = new ProjectLibListItemVO(); | ||||
item.setId(w.getId()); | item.setId(w.getId()); | ||||
@@ -400,7 +410,11 @@ public class ConstructionManage { | |||||
item.setApprovalDate(w.getApprovalDate()); | item.setApprovalDate(w.getApprovalDate()); | ||||
item.setDeliveryTime(w.getDeliveryTime()); | item.setDeliveryTime(w.getDeliveryTime()); | ||||
item.setContractAmount(w.getContractAmount()); | item.setContractAmount(w.getContractAmount()); | ||||
item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
List<ProjectPaymentPlan> paymentPlans = paymentPlansMap.getOrDefault(w.getId(), Collections.emptyList()); | |||||
BigDecimal totalAnnualAmount = paymentPlans.stream() | |||||
.map(ProjectPaymentPlan::getAnnualPlanAmount) | |||||
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO); | |||||
item.setAnnualPlanAmount(totalAnnualAmount); | |||||
item.setTransactionTime(w.getTransactionTime()); | item.setTransactionTime(w.getTransactionTime()); | ||||
item.setTransactionAmount(w.getTransactionAmount()); | item.setTransactionAmount(w.getTransactionAmount()); | ||||
return item; | return item; | ||||
@@ -425,6 +439,13 @@ public class ConstructionManage { | |||||
List<DeclaredProjectExportDTO> collect = Lists.newArrayList(); | List<DeclaredProjectExportDTO> collect = Lists.newArrayList(); | ||||
if (CollUtil.isNotEmpty(records)) { | if (CollUtil.isNotEmpty(records)) { | ||||
List<Long> projectIds = new ArrayList<>(); | |||||
for (Project project : records) { | |||||
projectIds.add(project.getId()); | |||||
} | |||||
Map<Long, List<ProjectPaymentPlan>> paymentPlansMap = projectPaymentPlanService.listByProjectIds(projectIds); | |||||
AtomicInteger serialNumber = new AtomicInteger(0); | AtomicInteger serialNumber = new AtomicInteger(0); | ||||
collect = records.stream().map(r -> { | collect = records.stream().map(r -> { | ||||
DeclaredProjectExportDTO exportDTO = new DeclaredProjectExportDTO(); | DeclaredProjectExportDTO exportDTO = new DeclaredProjectExportDTO(); | ||||
@@ -436,7 +457,13 @@ public class ConstructionManage { | |||||
exportDTO.setSerialNumber(serialNumber.incrementAndGet()); | exportDTO.setSerialNumber(serialNumber.incrementAndGet()); | ||||
exportDTO.setDeliveryTime(r.getDeliveryTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); | exportDTO.setDeliveryTime(r.getDeliveryTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); | ||||
exportDTO.setContractAmount(r.getContractAmount()); | exportDTO.setContractAmount(r.getContractAmount()); | ||||
exportDTO.setAnnualPlanAmount(r.getAnnualPlanAmount()); | |||||
List<ProjectPaymentPlan> paymentPlans = paymentPlansMap.getOrDefault(r.getId(), Collections.emptyList()); | |||||
BigDecimal totalAnnualAmount = paymentPlans.stream() | |||||
.map(ProjectPaymentPlan::getAnnualPlanAmount) | |||||
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO); | |||||
exportDTO.setAnnualPlanAmount(totalAnnualAmount); | |||||
if (Objects.nonNull(r.getTransactionTime())) { | if (Objects.nonNull(r.getTransactionTime())) { | ||||
exportDTO.setTransactionTime(r.getTransactionTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); | exportDTO.setTransactionTime(r.getTransactionTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); | ||||
} | } | ||||
@@ -445,7 +472,7 @@ public class ConstructionManage { | |||||
}).collect(Collectors.toList()); | }).collect(Collectors.toList()); | ||||
} | } | ||||
String fileName = "合同备案项目列表"; | |||||
final String fileName = "合同备案项目列表"; | |||||
ExcelDownUtil.setFileName(fileName, response); | ExcelDownUtil.setFileName(fileName, response); | ||||
//数据导出处理函数 | //数据导出处理函数 | ||||
try { | try { | ||||
@@ -121,7 +121,7 @@ public class ReviewChecklistManage { | |||||
item.setProcessStatus(w.getProcessStatus()); | item.setProcessStatus(w.getProcessStatus()); | ||||
item.setInstCode(w.getInstCode()); | item.setInstCode(w.getInstCode()); | ||||
item.setApprovedAmount(w.getApprovalAmount()); | item.setApprovedAmount(w.getApprovalAmount()); | ||||
item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
// item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
// 审查人员情况 | // 审查人员情况 | ||||
item.setVerifiedHumans(computeVerify(item, approveMap.get(w.getProjectCode()), userMap, user)); | item.setVerifiedHumans(computeVerify(item, approveMap.get(w.getProjectCode()), userMap, user)); | ||||
item.setReviewCheckFinish(w.getReviewCheckFinish()); | item.setReviewCheckFinish(w.getReviewCheckFinish()); | ||||
@@ -21,7 +21,7 @@ import javax.validation.Valid; | |||||
* @author WendyYang | * @author WendyYang | ||||
* @since 2024-01-30 | * @since 2024-01-30 | ||||
*/ | */ | ||||
@Api(tags = "信产项目(立项备案)列表") | |||||
@Api(tags = "信产项目(立项备案)相关接口") | |||||
@RestController | @RestController | ||||
@RequiredArgsConstructor | @RequiredArgsConstructor | ||||
@RequestMapping("/api/v1/declared/record") | @RequestMapping("/api/v1/declared/record") | ||||
@@ -344,7 +344,8 @@ public class AnnualPlanLibManage { | |||||
project.setBeginTime(dataArr[0].trim()); | project.setBeginTime(dataArr[0].trim()); | ||||
project.setEndTime(dataArr[1].trim()); | project.setEndTime(dataArr[1].trim()); | ||||
project.setDeclareAmount(data.getDeclaredAmount()); | project.setDeclareAmount(data.getDeclaredAmount()); | ||||
project.setAnnualPlanAmount(data.getAnnualPlanAmount()); | |||||
// TODO 年度计划 | |||||
// project.setAnnualPlanAmount(data.getAnnualPlanAmount()); | |||||
project.setDeclareHaveAmount(data.getDeclareHaveAmount()); | project.setDeclareHaveAmount(data.getDeclareHaveAmount()); | ||||
project.setDeclareGovOwnFinanceAmount(data.getDeclareGovOwnFinanceAmount()); | project.setDeclareGovOwnFinanceAmount(data.getDeclareGovOwnFinanceAmount()); | ||||
project.setDeclareGovSuperiorFinanceAmount(data.getDeclareGovSuperiorFinanceAmount()); | project.setDeclareGovSuperiorFinanceAmount(data.getDeclareGovSuperiorFinanceAmount()); | ||||
@@ -5,6 +5,7 @@ import cn.hutool.core.bean.copier.CopyOptions; | |||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import cn.hutool.core.lang.Assert; | import cn.hutool.core.lang.Assert; | ||||
import cn.hutool.core.util.NumberUtil; | import cn.hutool.core.util.NumberUtil; | ||||
import cn.hutool.json.JSONUtil; | |||||
import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||||
@@ -93,6 +94,7 @@ import org.springframework.stereotype.Component; | |||||
import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
import java.math.RoundingMode; | import java.math.RoundingMode; | ||||
import java.sql.Array; | |||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.util.*; | import java.util.*; | ||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
@@ -146,10 +148,14 @@ public class ProjectLibManage { | |||||
if (CollUtil.isEmpty(page.getRecords())) { | if (CollUtil.isEmpty(page.getRecords())) { | ||||
return PageVo.empty(); | return PageVo.empty(); | ||||
} | } | ||||
List<String> projectCodes = page.getRecords().stream() | |||||
.map(Project::getProjectCode).collect(Collectors.toList()); | |||||
Set<String> projectCodes = new HashSet<>(); | |||||
List<Long> projectIds = new ArrayList<>(); | |||||
for (Project project : page.getRecords()) { | |||||
projectIds.add(project.getId()); | |||||
projectCodes.add(project.getProjectCode()); | |||||
} | |||||
Map<Long, List<ProjectRenewalFundDeclaration>> renewalMap = listRenewDeclarations(projectCodes); | Map<Long, List<ProjectRenewalFundDeclaration>> renewalMap = listRenewDeclarations(projectCodes); | ||||
Map<Long, List<ProjectPaymentPlan>> paymentPlansMap = projectPaymentPlanService.listByProjectIds(projectIds); | |||||
List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | ||||
ProjectLibListItemVO item = new ProjectLibListItemVO(); | ProjectLibListItemVO item = new ProjectLibListItemVO(); | ||||
@@ -169,13 +175,18 @@ public class ProjectLibManage { | |||||
item.setProcessStatus(w.getProcessStatus()); | item.setProcessStatus(w.getProcessStatus()); | ||||
item.setInstCode(w.getInstCode()); | item.setInstCode(w.getInstCode()); | ||||
item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); | item.setIsHigherSuperOrg(w.getIsHigherSuperOrg()); | ||||
List<ProjectPaymentPlan> paymentPlans = paymentPlansMap.getOrDefault(w.getId(), Collections.emptyList()); | |||||
BigDecimal totalAnnualPaymentAmount = paymentPlans.stream() | |||||
.map(ProjectPaymentPlan::getAnnualPlanAmount) | |||||
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO); | |||||
List<ProjectRenewalFundDeclaration> fundDeclarations = renewalMap.get(w.getId()); | List<ProjectRenewalFundDeclaration> fundDeclarations = renewalMap.get(w.getId()); | ||||
if (fundDeclarations != null) { | if (fundDeclarations != null) { | ||||
item.setAnnualAccumulateAmount(computeAmount(w.getAnnualPlanAmount(), fundDeclarations)); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, fundDeclarations)); | |||||
item.setAnnualAccumulateAmount(computeAmount(totalAnnualPaymentAmount, fundDeclarations)); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, totalAnnualPaymentAmount, fundDeclarations)); | |||||
} else { | } else { | ||||
item.setAnnualAccumulateAmount(w.getAnnualPlanAmount()); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, Collections.emptyList())); | |||||
item.setAnnualAccumulateAmount(totalAnnualPaymentAmount); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, totalAnnualPaymentAmount, Collections.emptyList())); | |||||
} | } | ||||
return item; | return item; | ||||
}); | }); | ||||
@@ -193,10 +204,14 @@ public class ProjectLibManage { | |||||
return PageVo.empty(); | return PageVo.empty(); | ||||
} | } | ||||
UserFullInfoDTO finalUser = user; | UserFullInfoDTO finalUser = user; | ||||
Set<String> projectCodes = page.getRecords().stream() | |||||
.map(Project::getProjectCode).collect(Collectors.toSet()); | |||||
Set<String> projectCodes = new HashSet<>(); | |||||
List<Long> projectIds = new ArrayList<>(); | |||||
for (Project project : page.getRecords()) { | |||||
projectIds.add(project.getId()); | |||||
projectCodes.add(project.getProjectCode()); | |||||
} | |||||
Map<String, List<TagVO>> projectTagMap = getProjectTags(projectCodes); | Map<String, List<TagVO>> projectTagMap = getProjectTags(projectCodes); | ||||
Map<Long, List<ProjectPaymentPlan>> paymentPlansMap = projectPaymentPlanService.listByProjectIds(projectIds); | |||||
Map<Long, List<ProjectRenewalFundDeclaration>> renewalMap = listRenewDeclarations(projectCodes); | Map<Long, List<ProjectRenewalFundDeclaration>> renewalMap = listRenewDeclarations(projectCodes); | ||||
List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | List<ProjectLibListItemVO> records = CollUtils.convert(page.getRecords(), w -> { | ||||
@@ -223,16 +238,20 @@ public class ProjectLibManage { | |||||
item.setCanPreDeclared(Boolean.TRUE); | item.setCanPreDeclared(Boolean.TRUE); | ||||
} | } | ||||
item.setApprovedAmount(w.getApprovalAmount()); | item.setApprovedAmount(w.getApprovalAmount()); | ||||
item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
List<ProjectPaymentPlan> paymentPlans = paymentPlansMap.getOrDefault(w.getId(), Collections.emptyList()); | |||||
BigDecimal totalAnnualPaymentAmount = paymentPlans.stream() | |||||
.map(ProjectPaymentPlan::getAnnualPlanAmount) | |||||
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO); | |||||
item.setAnnualPlanAmount(totalAnnualPaymentAmount); | |||||
item.setPrePlanProjectId(w.getPrePlanProjectId()); | item.setPrePlanProjectId(w.getPrePlanProjectId()); | ||||
item.setTags(projectTagMap.get(w.getProjectCode())); | item.setTags(projectTagMap.get(w.getProjectCode())); | ||||
List<ProjectRenewalFundDeclaration> fundDeclarations = renewalMap.get(w.getId()); | List<ProjectRenewalFundDeclaration> fundDeclarations = renewalMap.get(w.getId()); | ||||
if (fundDeclarations != null) { | if (fundDeclarations != null) { | ||||
item.setAnnualAccumulateAmount(computeAmount(w.getAnnualPlanAmount(), fundDeclarations)); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, fundDeclarations)); | |||||
item.setAnnualAccumulateAmount(computeAmount(totalAnnualPaymentAmount, fundDeclarations)); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, totalAnnualPaymentAmount, fundDeclarations)); | |||||
} else { | } else { | ||||
item.setAnnualAccumulateAmount(w.getAnnualPlanAmount()); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, Collections.emptyList())); | |||||
item.setAnnualAccumulateAmount(totalAnnualPaymentAmount); | |||||
item.setAnnualAccumulateAmountList(convertAccmulate(w, totalAnnualPaymentAmount, Collections.emptyList())); | |||||
} | } | ||||
return item; | return item; | ||||
}); | }); | ||||
@@ -298,7 +317,7 @@ public class ProjectLibManage { | |||||
item.setCanPreDeclared(Boolean.TRUE); | item.setCanPreDeclared(Boolean.TRUE); | ||||
} | } | ||||
item.setApprovedAmount(w.getApprovalAmount()); | item.setApprovedAmount(w.getApprovalAmount()); | ||||
item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
// item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
item.setPrePlanProjectId(w.getPrePlanProjectId()); | item.setPrePlanProjectId(w.getPrePlanProjectId()); | ||||
records.add(item); | records.add(item); | ||||
} | } | ||||
@@ -572,12 +591,12 @@ public class ProjectLibManage { | |||||
return annualAmounts; | return annualAmounts; | ||||
} | } | ||||
public static List<AnnualAmountVO> convertAccmulate(Project project, List<ProjectRenewalFundDeclaration> prfs) { | |||||
public static List<AnnualAmountVO> convertAccmulate(Project project, BigDecimal totalAnnualPlanAmount, List<ProjectRenewalFundDeclaration> prfs) { | |||||
List<AnnualAmountVO> annualAmounts = Lists.newArrayList(); | List<AnnualAmountVO> annualAmounts = Lists.newArrayList(); | ||||
annualAmounts.add(AnnualAmountVO.builder() | annualAmounts.add(AnnualAmountVO.builder() | ||||
.projectId(project.getId()) | .projectId(project.getId()) | ||||
.projectYear(project.getProjectYear()) | .projectYear(project.getProjectYear()) | ||||
.annualAmount(project.getAnnualPlanAmount()) | |||||
.annualAmount(totalAnnualPlanAmount) | |||||
.build()); | .build()); | ||||
for (ProjectRenewalFundDeclaration prf : prfs) { | for (ProjectRenewalFundDeclaration prf : prfs) { | ||||
annualAmounts.add(AnnualAmountVO.builder() | annualAmounts.add(AnnualAmountVO.builder() | ||||
@@ -719,11 +738,15 @@ public class ProjectLibManage { | |||||
//查询年度投资金额 要是已验收的项目 | //查询年度投资金额 要是已验收的项目 | ||||
if (ProjectStatusEnum.ACCEPTED.getCode().equals(projectInfo.getStatus())) { | if (ProjectStatusEnum.ACCEPTED.getCode().equals(projectInfo.getStatus())) { | ||||
List<ProjectPaymentPlan> paymentPlans = projectPaymentPlanService.listByProjectId(projectInfo.getId()); | |||||
BigDecimal totalAnnualAmount = paymentPlans.stream() | |||||
.map(ProjectPaymentPlan::getAnnualPlanAmount) | |||||
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO); | |||||
List<AnnualAmountVO> annualAmounts = Lists.newArrayList(); | List<AnnualAmountVO> annualAmounts = Lists.newArrayList(); | ||||
annualAmounts.add(AnnualAmountVO.builder() | annualAmounts.add(AnnualAmountVO.builder() | ||||
.projectId(projectInfo.getId()) | .projectId(projectInfo.getId()) | ||||
.projectYear(projectInfo.getProjectYear()) | .projectYear(projectInfo.getProjectYear()) | ||||
.annualAmount(projectInfo.getAnnualPlanAmount()) | |||||
.annualAmount(totalAnnualAmount) | |||||
.build()); | .build()); | ||||
List<ProjectRenewalFundDeclaration> renewalDeclarations = renewalFundDeclarationService.list(Wrappers.lambdaQuery(ProjectRenewalFundDeclaration.class) | List<ProjectRenewalFundDeclaration> renewalDeclarations = renewalFundDeclarationService.list(Wrappers.lambdaQuery(ProjectRenewalFundDeclaration.class) | ||||
.eq(ProjectRenewalFundDeclaration::getProjectId, vo.getId()) | .eq(ProjectRenewalFundDeclaration::getProjectId, vo.getId()) | ||||
@@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.google.common.collect.Maps; | import com.google.common.collect.Maps; | ||||
import com.hz.pm.api.projectlib.model.entity.ProjectPaymentPlan; | |||||
import com.hz.pm.api.projectlib.service.IProjectPaymentPlanService; | |||||
import com.hz.pm.api.user.security.model.UserInfoDetails; | import com.hz.pm.api.user.security.model.UserInfoDetails; | ||||
import com.hz.pm.api.user.util.LoginUserUtil; | import com.hz.pm.api.user.util.LoginUserUtil; | ||||
import com.ningdatech.basic.exception.BizException; | import com.ningdatech.basic.exception.BizException; | ||||
@@ -91,9 +93,8 @@ public class ProjectRenewalFundManage { | |||||
private final IGovBizProjectApproveService approveService; | private final IGovBizProjectApproveService approveService; | ||||
private final RegionCacheHelper regionCacheHelper; | |||||
private final IPaymentPlanService paymentPlanService; | private final IPaymentPlanService paymentPlanService; | ||||
private final IProjectPaymentPlanService projectPaymentPlanService; | |||||
/** | /** | ||||
* 项目续建资金库列表 分页 | * 项目续建资金库列表 分页 | ||||
@@ -131,7 +132,14 @@ public class ProjectRenewalFundManage { | |||||
return PageVo.empty(); | return PageVo.empty(); | ||||
} | } | ||||
List<String> projectCodes = CollUtils.fieldList(page.getRecords(), Project::getProjectCode); | |||||
Set<String> projectCodes = new HashSet<>(); | |||||
List<Long> projectIds = new ArrayList<>(); | |||||
for (Project project : page.getRecords()) { | |||||
projectIds.add(project.getId()); | |||||
projectCodes.add(project.getProjectCode()); | |||||
} | |||||
Map<Long, List<ProjectPaymentPlan>> paymentPlansMap = projectPaymentPlanService.listByProjectIds(projectIds); | |||||
Map<Long, List<ProjectRenewalFundDeclaration>> renewalMap; | Map<Long, List<ProjectRenewalFundDeclaration>> renewalMap; | ||||
if (CollUtil.isNotEmpty(projectCodes)) { | if (CollUtil.isNotEmpty(projectCodes)) { | ||||
@@ -172,15 +180,20 @@ public class ProjectRenewalFundManage { | |||||
item.setCanPreDeclared(Boolean.TRUE); | item.setCanPreDeclared(Boolean.TRUE); | ||||
} | } | ||||
item.setApprovedAmount(w.getApprovalAmount()); | item.setApprovedAmount(w.getApprovalAmount()); | ||||
item.setAnnualPlanAmount(w.getAnnualPlanAmount()); | |||||
List<ProjectPaymentPlan> paymentPlans = paymentPlansMap.getOrDefault(w.getId(), Collections.emptyList()); | |||||
BigDecimal totalAnnualPaymentAmount = paymentPlans.stream() | |||||
.map(ProjectPaymentPlan::getAnnualPlanAmount) | |||||
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO); | |||||
item.setAnnualPlanAmount(totalAnnualPaymentAmount); | |||||
item.setPrePlanProjectId(w.getPrePlanProjectId()); | item.setPrePlanProjectId(w.getPrePlanProjectId()); | ||||
if (finalRenewalMap.containsKey(item.getId())) { | if (finalRenewalMap.containsKey(item.getId())) { | ||||
List<ProjectRenewalFundDeclaration> prfs = finalRenewalMap.get(item.getId()); | List<ProjectRenewalFundDeclaration> prfs = finalRenewalMap.get(item.getId()); | ||||
item.setAnnualAccumulateAmount(ProjectLibManage.computeAmount(w.getAnnualPlanAmount(), prfs)); | |||||
item.setAnnualAccumulateAmountList(ProjectLibManage.convertAccmulate(w, prfs)); | |||||
item.setAnnualAccumulateAmount(ProjectLibManage.computeAmount(totalAnnualPaymentAmount, prfs)); | |||||
item.setAnnualAccumulateAmountList(ProjectLibManage.convertAccmulate(w, totalAnnualPaymentAmount, prfs)); | |||||
} else { | } else { | ||||
item.setAnnualAccumulateAmount(w.getAnnualPlanAmount()); | |||||
item.setAnnualAccumulateAmountList(ProjectLibManage.convertAccmulate(w, Collections.emptyList())); | |||||
item.setAnnualAccumulateAmount(totalAnnualPaymentAmount); | |||||
item.setAnnualAccumulateAmountList(ProjectLibManage.convertAccmulate(w, totalAnnualPaymentAmount, Collections.emptyList())); | |||||
} | } | ||||
return item; | return item; | ||||
}); | }); | ||||
@@ -223,11 +236,18 @@ public class ProjectRenewalFundManage { | |||||
vo.setBuildOrgName(project.getBuildOrgName()); | vo.setBuildOrgName(project.getBuildOrgName()); | ||||
vo.setAnnualPaymentAmount(renewal.getAnnualPaymentAmount()); | vo.setAnnualPaymentAmount(renewal.getAnnualPaymentAmount()); | ||||
List<AnnualAmountVO> annualAmounts = Lists.newArrayList(); | List<AnnualAmountVO> annualAmounts = Lists.newArrayList(); | ||||
List<ProjectPaymentPlan> paymentPlans = projectPaymentPlanService.listByProjectId(project.getId()); | |||||
BigDecimal totalAnnualPaymentAmount = paymentPlans.stream() | |||||
.map(ProjectPaymentPlan::getAnnualPlanAmount) | |||||
.reduce(BigDecimal::add).orElse(BigDecimal.ZERO); | |||||
annualAmounts.add(AnnualAmountVO.builder() | annualAmounts.add(AnnualAmountVO.builder() | ||||
.projectId(project.getId()) | .projectId(project.getId()) | ||||
.projectCode(project.getProjectCode()) | .projectCode(project.getProjectCode()) | ||||
.projectYear(project.getProjectYear()) | .projectYear(project.getProjectYear()) | ||||
.annualAmount(project.getAnnualPlanAmount()) | |||||
.annualAmount(totalAnnualPaymentAmount) | |||||
.build()); | .build()); | ||||
List<ProjectRenewalFundDeclaration> renewalDeclarations = projectRenewalFundDeclarationService.list(Wrappers.lambdaQuery(ProjectRenewalFundDeclaration.class) | List<ProjectRenewalFundDeclaration> renewalDeclarations = projectRenewalFundDeclarationService.list(Wrappers.lambdaQuery(ProjectRenewalFundDeclaration.class) | ||||
.eq(ProjectRenewalFundDeclaration::getProjectId, vo.getProjectId()) | .eq(ProjectRenewalFundDeclaration::getProjectId, vo.getProjectId()) | ||||
@@ -18,7 +18,6 @@ | |||||
approval_amount, | approval_amount, | ||||
stage, | stage, | ||||
status, | status, | ||||
annual_plan_amount, | |||||
biz_domain, | biz_domain, | ||||
inst_code, | inst_code, | ||||
is_higher_super_org, | is_higher_super_org, | ||||
@@ -41,7 +40,6 @@ | |||||
approval_amount, | approval_amount, | ||||
stage, | stage, | ||||
status, | status, | ||||
annual_plan_amount, | |||||
biz_domain, | biz_domain, | ||||
inst_code, | inst_code, | ||||
is_higher_super_org, | is_higher_super_org, | ||||
@@ -297,7 +295,6 @@ | |||||
approval_amount, | approval_amount, | ||||
stage, | stage, | ||||
status, | status, | ||||
annual_plan_amount, | |||||
biz_domain, | biz_domain, | ||||
inst_code, | inst_code, | ||||
is_higher_super_org, | is_higher_super_org, | ||||
@@ -320,7 +317,6 @@ | |||||
approval_amount, | approval_amount, | ||||
stage, | stage, | ||||
status, | status, | ||||
annual_plan_amount, | |||||
biz_domain, | biz_domain, | ||||
inst_code, | inst_code, | ||||
is_higher_super_org, | is_higher_super_org, | ||||
@@ -334,6 +334,9 @@ public class ProjectDTO implements Serializable { | |||||
@ApiModelProperty("可研报告") | @ApiModelProperty("可研报告") | ||||
private String baseResearchReportFile; | private String baseResearchReportFile; | ||||
@ApiModelProperty("可研批复文件") | |||||
private String baseResearchReportApprovalFile; | |||||
@ApiModelProperty("其他附件") | @ApiModelProperty("其他附件") | ||||
private String baseProjOtherFile; | private String baseProjOtherFile; | ||||
@@ -209,30 +209,6 @@ public class Project implements Serializable { | |||||
@Compare("资金分配情况-第三方服务") | @Compare("资金分配情况-第三方服务") | ||||
private BigDecimal thirdPartyAmount; | private BigDecimal thirdPartyAmount; | ||||
@ApiModelProperty("年度支付计划-年度支付计划(万元)") | |||||
@Compare("年度支付计划-年度支付计划") | |||||
private BigDecimal annualPlanAmount; | |||||
@ApiModelProperty("年度支付计划-自有金额(万元)") | |||||
@Compare("年度支付计划-自有金额") | |||||
private BigDecimal annualPlanHaveAmount; | |||||
@ApiModelProperty("年度支付计划-政府投资-本级财政资金(万元)") | |||||
@Compare("年度支付计划-政府投资-本级财政资金") | |||||
private BigDecimal annualPlanGovOwnFinanceAmount; | |||||
@ApiModelProperty("年度支付计划-政府投资-上级补助资金(万元)") | |||||
@Compare("年度支付计划-政府投资-上级补助资金") | |||||
private BigDecimal annualPlanGovSuperiorFinanceAmount; | |||||
@ApiModelProperty("年度支付计划-银行贷款(万元)") | |||||
@Compare("年度支付计划-银行贷款") | |||||
private BigDecimal annualPlanBankLendingAmount; | |||||
@ApiModelProperty("年度支付计划-其它资金(万元)") | |||||
@Compare("年度支付计划-其它资金") | |||||
private BigDecimal annualPlanOtherAmount; | |||||
@ApiModelProperty("立项批复总投资(万元)") | @ApiModelProperty("立项批复总投资(万元)") | ||||
@Compare("立项批复总投资") | @Compare("立项批复总投资") | ||||
private BigDecimal approvalAmount; | private BigDecimal approvalAmount; | ||||
@@ -535,6 +511,9 @@ public class Project implements Serializable { | |||||
@ApiModelProperty("可研报告") | @ApiModelProperty("可研报告") | ||||
private String baseResearchReportFile; | private String baseResearchReportFile; | ||||
@ApiModelProperty("可研批复文件") | |||||
private String baseResearchReportApprovalFile; | |||||
@ApiModelProperty("其他附件") | @ApiModelProperty("其他附件") | ||||
private String baseProjOtherFile; | private String baseProjOtherFile; | ||||
@@ -39,6 +39,8 @@ public class ProjectPaymentPlan implements Serializable { | |||||
private BigDecimal annualPlanGovSuperiorFinanceAmount; | private BigDecimal annualPlanGovSuperiorFinanceAmount; | ||||
private Long projectId; | |||||
@ApiModelProperty("项目编码") | @ApiModelProperty("项目编码") | ||||
private String projectCode; | private String projectCode; | ||||
@@ -1,13 +1,19 @@ | |||||
package com.hz.pm.api.projectlib.service; | package com.hz.pm.api.projectlib.service; | ||||
import cn.hutool.core.collection.CollUtil; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.hz.pm.api.projectlib.model.entity.ProjectApplication; | |||||
import com.hz.pm.api.projectlib.model.entity.ProjectPaymentPlan; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | import com.baomidou.mybatisplus.extension.service.IService; | ||||
import com.hz.pm.api.projectlib.model.entity.ProjectPaymentPlan; | |||||
import com.ningdatech.basic.util.CollUtils; | |||||
import java.util.Collection; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* 服务类 | |||||
* 服务类 | |||||
* </p> | * </p> | ||||
* | * | ||||
* @author WendyYang | * @author WendyYang | ||||
@@ -21,4 +27,18 @@ public interface IProjectPaymentPlanService extends IService<ProjectPaymentPlan> | |||||
.eq(ProjectPaymentPlan::getProjectVersion, projectVersion)); | .eq(ProjectPaymentPlan::getProjectVersion, projectVersion)); | ||||
} | } | ||||
default Map<Long, List<ProjectPaymentPlan>> listByProjectIds(Collection<Long> projectIds) { | |||||
LambdaQueryWrapper<ProjectPaymentPlan> query = Wrappers.lambdaQuery(ProjectPaymentPlan.class) | |||||
.in(ProjectPaymentPlan::getProjectId, projectIds) | |||||
.orderByAsc(ProjectPaymentPlan::getPaymentYear); | |||||
return CollUtils.group(list(query), ProjectPaymentPlan::getProjectId); | |||||
} | |||||
default List<ProjectPaymentPlan> listByProjectId(Long projectId) { | |||||
LambdaQueryWrapper<ProjectPaymentPlan> query = Wrappers.lambdaQuery(ProjectPaymentPlan.class) | |||||
.eq(ProjectPaymentPlan::getProjectId, projectId) | |||||
.orderByAsc(ProjectPaymentPlan::getPaymentYear); | |||||
return list(query); | |||||
} | |||||
} | } |
@@ -1414,8 +1414,8 @@ public class TodoCenterManage { | |||||
paramsMap.put("cloudType", cloudTypeName); | paramsMap.put("cloudType", cloudTypeName); | ||||
} | } | ||||
// 获取本年计划投资金额 | // 获取本年计划投资金额 | ||||
BigDecimal yearPlanInvest = project.getAnnualPlanAmount(); | |||||
paramsMap.put("yearPlanInvest", yearPlanInvest); | |||||
// BigDecimal yearPlanInvest = project.getAnnualPlanAmount(); | |||||
paramsMap.put("yearPlanInvest", BigDecimal.ZERO); | |||||
// 根据地区编码获取当地大数据局(中心)的名称 | // 根据地区编码获取当地大数据局(中心)的名称 | ||||
paramsMap.put("bigDataBureauName", null); | paramsMap.put("bigDataBureauName", null); | ||||
// 备注模块如果为空 | // 备注模块如果为空 | ||||