Browse Source

项目信息相关接口导出

master
gjh 3 days ago
parent
commit
c9b01c5a39
  1. 31
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ExportController.java
  2. 12
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouContractinfoMapper.java
  3. 41
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectInfoTempDTO.java
  4. 17
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java
  5. 2
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java
  6. 4
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java
  7. 118
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

31
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ExportController.java

@ -7,6 +7,7 @@ import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.easy.admin.common.api.vo.Result;
import com.easy.admin.modules.huzhou.dao.ProjectScoreMapper;
import com.easy.admin.modules.huzhou.dto.ProjectInfoTempDTO;
import com.easy.admin.modules.huzhou.dto.ProjectTimeOutInfoExportDTO;
import com.easy.admin.modules.huzhou.dto.ProjectInfoExportDTO;
import com.easy.admin.modules.huzhou.dto.ProjectResultExportDTO;
@ -251,4 +252,34 @@ public class ExportController {
@GetMapping("/downloadTempInfo")
public void downloadTempInfo(HttpServletResponse response) throws IOException {
// 封装数据
List<HuzhouProjectinfo> projectInfoList = projectinfoService.queryTempInfo();
List<ProjectInfoTempDTO> dtoList = projectInfoList.stream()
.map(projectInfo -> new ProjectInfoTempDTO(projectInfo.getProjectName(),
projectInfo.getCurrentPointName(),
projectInfo.getTotalCentralMoney(),
projectInfo.getTotalProvincialMoney(),
projectInfo.getHasSub()))
.collect(Collectors.toList());
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String flag = "项目信息";
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
LocalDate currentDate = LocalDate.now();
System.out.println("当前日期: " + currentDate);
String fileName = URLEncoder.encode( flag+currentDate, "UTF-8")
.replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), ProjectInfoTempDTO.class)
.sheet("项目信息"+currentDate)
.doWrite(dtoList);
}
}

12
huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouContractinfoMapper.java

@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
import com.easy.admin.modules.huzhou.entity.HuzhouContractinfo;
import com.easy.admin.modules.huzhou.vo.HuzhouContractinfoOV;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal;
import java.util.List;
@ -30,4 +31,15 @@ public interface HuzhouContractinfoMapper extends BaseMapper<HuzhouContractinfo>
List<HuzhouContractinfo> getSortedRealContracts();
int updateSortFlag(@Param("id") String id, @Param("sortFlag") int sortFlag);
@Select("SELECT SUM(central_money) AS totalCentralMoney " +
"FROM huzhou_contractinfo " +
"WHERE project_id = #{projectId} AND flag = '实际'")
Double getTotalCentralMoneyByProjectId(@Param("projectId") String projectId);
@Select("SELECT SUM(provincial_money) AS totalProvincialMoney " +
"FROM huzhou_contractinfo " +
"WHERE project_id = #{projectId} AND flag = '实际'")
Double getTotalProvincialMoneyByProjectId(@Param("projectId") String projectId);
}

41
huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/ProjectInfoTempDTO.java

@ -0,0 +1,41 @@
package com.easy.admin.modules.huzhou.dto;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import com.easy.admin.modules.huzhou.converter.ReformNameConverter;
import com.easy.admin.modules.huzhou.converter.SuperLeaderConverter;
import lombok.Data;
@HeadStyle(fillForegroundColor = 44)
@Data
public class ProjectInfoTempDTO {
@ExcelProperty("项目名称")
private String projectName;
@ExcelProperty("项目所处节点")
private String currentPointName;
@ExcelProperty("中央资金(总)")
private Double totalCentralMoney;
@ExcelProperty("省级资金(总)")
private Double totalProvincialMoney;
@ExcelProperty("是否存在子项目")
private String hasSub;
public ProjectInfoTempDTO(String projectName,
String currentPointName,
Double totalCentralMoney,
Double totalProvincialMoney,
String hasSub
) {
this.projectName = projectName;
this.currentPointName = currentPointName;
this.totalCentralMoney = totalCentralMoney;
this.totalProvincialMoney = totalProvincialMoney;
this.hasSub = hasSub;
}
}

17
huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java

@ -279,5 +279,22 @@ public class HuzhouProjectinfo extends BaseEntity {
@TableField(exist = false)
private Double superiorFundPayRateScore;
/**
* 中央资金()
*/
@TableField(exist = false)
private Double totalCentralMoney;
/**
* 省级资金()
*/
@TableField(exist = false)
private Double totalProvincialMoney;
/**
* 是否存在子项目
*/
@TableField(exist = false)
private String hasSub;
}

2
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java

@ -252,5 +252,7 @@ public interface IHuzhouProjectinfoService extends IService<HuzhouProjectinfo> {
List<ContractPayInfoDTO> querySubContractPaySituation();
List<ContractPayInfoDTO> queryContractPaySituation();
List<HuzhouProjectinfo> queryTempInfo();
}

4
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java

@ -682,8 +682,8 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
// 2.封装条件
LambdaQueryWrapper<HuzhouContractinfo> qw = new LambdaQueryWrapper<>();
qw.eq(HuzhouContractinfo::getProjectId, contractList.get(0).getProjectId())
.eq(HuzhouContractinfo::getFlag, taskName.equals("合同签订") ? "计划" : "实际");
.eq(HuzhouContractinfo::getFlag, taskName.equals("合同签订") ? "计划" : "实际")
.eq(HuzhouContractinfo::getTaskName, taskName);
// 3.查询数据库中符合条件的合同信息
List<HuzhouContractinfo> dbList = contractinfoService.list(qw);

118
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java

@ -3093,6 +3093,69 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
return addList;
}
@Override
public List<HuzhouProjectinfo> queryTempInfo() {
// 获取所有项目信息
List<HuzhouProjectinfo> projectInfoList = this.list();
// 根据用户角色权限过滤项目
Page page = new Page(1, projectInfoList.size());
HuzhouProjectinfo projectinfo = new HuzhouProjectinfo();
projectinfo.setStage("4");
ProjectInfoAuthSelect projectInfoAuthSelect = CommonUtils.setGetProjectInfoAuth(projectinfo);
Page<HuzhouProjectinfoOV> projectAndChildInfoPageList;
projectAndChildInfoPageList = projectinfoMapper.getProjectAndChildInfoPageList(page, projectInfoAuthSelect);
List<HuzhouProjectinfoOV> records = projectAndChildInfoPageList.getRecords();
List<String> ids = records.stream()
.map(HuzhouProjectinfoOV::getId)
.collect(Collectors.toList());
projectInfoList= projectInfoList.stream()
.filter(project -> !"-1".equals(project.getStage()))
.filter(project -> ids.contains(project.getId()))
.filter(project -> !"湖州市长兴县浙里健康e生省级试点应用建设项目".equals(project.getProjectName()))
.collect(Collectors.toList());
double totalCentralMoney = 0.0;
double totalProvincialMoney = 0.0;
for (HuzhouProjectinfo projectInfo : projectInfoList) {
String projectId = projectInfo.getId();
// 1.获取当且任务所处的节点名称
String currentPointName = planinfoMapper.getCurrentPointName(projectId);
projectInfo.setCurrentPointName(currentPointName);
Double centralMoney = contractinfoMapper.getTotalCentralMoneyByProjectId(projectId);
totalCentralMoney = (centralMoney != null ? centralMoney : 0.0);;
Double provincialMoney = contractinfoMapper.getTotalProvincialMoneyByProjectId(projectId);
totalProvincialMoney = (provincialMoney != null ? provincialMoney : 0.0);
Boolean flag = this.queryHasSubProject(projectId);
if (flag) {
projectInfo.setHasSub("是");
LambdaQueryWrapper<HuzhouSubProjectinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouSubProjectinfo::getProjectId, projectId);
List<HuzhouSubProjectinfo> subProjects = subProjectinfoMapper.selectList(queryWrapper);
List<String> subIds = subProjects.stream().map(HuzhouSubProjectinfo::getId).distinct().collect(Collectors.toList());
for (String subId : subIds) {
Double subCentral = contractinfoMapper.getTotalCentralMoneyByProjectId(subId);
Double subProvincial = contractinfoMapper.getTotalProvincialMoneyByProjectId(subId);
totalCentralMoney += (subCentral != null ? subCentral : 0.0);
totalProvincialMoney += (subProvincial != null ? subProvincial : 0.0);
}
}
// 设置最终金额
projectInfo.setTotalCentralMoney(totalCentralMoney);
projectInfo.setTotalProvincialMoney(totalProvincialMoney);
}
return projectInfoList;
}
private void processProjectFundingRate(HuzhouProjectinfo projectInfo) {
String projectId = projectInfo.getId();
@ -3193,37 +3256,33 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
}
private void fillSuperiorFundPayRate(HuzhouProjectinfo projectInfo) {
String projectName = projectInfo.getProjectName();
String projectId = projectInfo.getId();
HuzhouProjectinfoMoney huzhouProjectinfoMoney = projectinfoMoneyMapper.selectById(projectId);
if (huzhouProjectinfoMoney == null || !hasActualContracts(projectId)) {
Double rate = 0.0;
projectInfo.setSuperiorFundPayRate(rate);
HuzhouProjectinfoMoney projectInfoMoney = projectinfoMoneyMapper.selectById(projectId);
if (projectInfoMoney == null || !hasActualContracts(projectId)) {
// 如果没有资金信息或没有实际合同,则支付率设为 0.0
projectInfo.setSuperiorFundPayRate(0.0);
} else {
// 获取合同签订阶段填写的资
// HuzhouProjectinfoMoney
HuzhouProjectinfoMoney projectinfoMoney = projectinfoMoneyMapper.selectById(projectId);
// 获取合同金
Double contractCentralMoney = Optional.ofNullable(projectInfoMoney.getContractCentralMoney()).orElse(0.0);
Double contractProvincialMoney = Optional.ofNullable(projectInfoMoney.getContractProvincialMoney()).orElse(0.0);
// 获取合同金额,并设置默认值 0.0
Double contractCentralMoney = Optional.ofNullable(projectinfoMoney)
.map(HuzhouProjectinfoMoney::getContractCentralMoney)
// 获取实际支付资金 为 null 时默认 0.0
Map<String, Double> actualFunds = calculateActualFunds(projectId);
Double centralMoney = Optional
.ofNullable(actualFunds.get("centralMoney"))
.orElse(0.0);
Double contractProvincialMoney = Optional.ofNullable(projectinfoMoney)
.map(HuzhouProjectinfoMoney::getContractProvincialMoney)
Double provincialMoney = Optional
.ofNullable(actualFunds.get("provincialMoney"))
.orElse(0.0);
// 计算实际支付的资金总额
Map<String, Double> actualFunds = calculateActualFunds(projectId);
// 安全获取实际资金,为 null 时默认 0.0
Double centralMoney = Optional.ofNullable(actualFunds.get("centralMoney")).orElse(0.0);
Double provincialMoney = Optional.ofNullable(actualFunds.get("provincialMoney")).orElse(0.0);
// 合同总金额 和 实际支付总金额
BigDecimal totalContractAmount = new BigDecimal(Double.toString(contractCentralMoney + contractProvincialMoney));
BigDecimal totalActualPayment = new BigDecimal(Double.toString(centralMoney + provincialMoney));
// 支付率初始化0.0
// 初始支付率为 0
BigDecimal rate = BigDecimal.ZERO;
// 只有在合同金额大于 0 的情况下才计算并设置上级资金支付率
@ -3231,17 +3290,18 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
rate = totalActualPayment.divide(totalContractAmount, 4, RoundingMode.HALF_UP); // 保留4位小数
}
// 格式化为百分比:保留两位小数的 double 类型
double formattedRate = rate.doubleValue(); // 如 0.8756
int percentageRate = (int) Math.round(formattedRate * 100); // 四舍五入为整数百分比,如 88
// 转换为百分比数值(保留两位小数)
//double percentValue = rate.doubleValue() * 100;
// 四舍五入取整数部分
double percentValue = Math.round(rate.doubleValue() * 100);
String percentRateStr = String.format("%.2f%%", percentValue);
// 日志记录:显示两位小数的百分比,如 "87.56%"
String percentRate = String.format("%.2f%%", formattedRate * 100);
log.info("合同签订阶段填写的上级资金为: {}", totalContractAmount.doubleValue());
log.info("项目名称: {} ---- 上级资金支付率为: {}", projectInfo.getProjectName(), percentRate);
// 设置到实体类中(保留两位小数的 double 值)
projectInfo.setSuperiorFundPayRate(percentValue);
// 设置到实体类中(存储整数百分比)
projectInfo.setSuperiorFundPayRate((double) percentageRate);
// 日志输出
log.info("合同签订阶段填写的上级资金为: {}", totalContractAmount);
log.info("项目名称: {} ----> 上级资金支付率为: {}", projectName, percentRateStr);
}
}

Loading…
Cancel
Save