Browse Source

上级资金执行率

master
gjh 4 days ago
parent
commit
1a0ed1144c
  1. 22
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java
  2. 49
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java
  3. 19
      huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/HuzhouProjectinfoExportDTO.java
  4. 12
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java
  5. 1
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouSubProjectinfo.java
  6. 4
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java
  7. 112
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java
  8. 4
      huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouProjectinfoOV.java

22
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java

@ -114,6 +114,28 @@ public class HuzhouProjectController {
return pageList; return pageList;
} }
/**
* 根据项目id获取项目信息+上级资金使用率
* @param projectId 项目id
* @return 返回值
*/
@GetMapping("/queryProjectFundPayRateById")
public Result<?> queryProjectFundPayRateById(String projectId){
//获取项目入库数据
HuzhouProjectinfoOV projectInfo = projectinfoService.queryProjectFundPayRateById(projectId);
return Result.OK(projectInfo);
}
@GetMapping("/queryProjectWithFundPay")
public Result<?> queryProjectWithFundPay(){
//获取项目入库数据
List<HuzhouProjectinfo> rs = projectinfoService.queryProjectWithFundPay();
return Result.OK(rs);
}
/** /**
* 根据项目id获取项目信息 * 根据项目id获取项目信息
* @param projectid 项目id * @param projectid 项目id

49
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java

@ -2,13 +2,21 @@ package com.easy.admin.modules.huzhou.controller;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
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.common.api.vo.Result;
import com.easy.admin.modules.huzhou.dto.HuzhouProjectinfoExportDTO;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfoMoney; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfoMoney;
import com.easy.admin.modules.huzhou.entity.HuzhouSubProjectinfo; import com.easy.admin.modules.huzhou.entity.HuzhouSubProjectinfo;
import com.easy.admin.modules.huzhou.entity.ProjectManager; import com.easy.admin.modules.huzhou.entity.ProjectManager;
import com.easy.admin.modules.huzhou.listener.ProjectManagerListener; import com.easy.admin.modules.huzhou.listener.ProjectManagerListener;
import com.easy.admin.modules.huzhou.service.IHuzhouProjectinfoService;
import com.easy.admin.modules.huzhou.service.ProjectManagerService; import com.easy.admin.modules.huzhou.service.ProjectManagerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -17,6 +25,8 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @Author gejunhao * @Author gejunhao
@ -29,6 +39,10 @@ import java.time.LocalDate;
public class ProjectManagerController { public class ProjectManagerController {
@Resource @Resource
private ProjectManagerService projectManagerService; private ProjectManagerService projectManagerService;
@Resource
private IHuzhouProjectinfoService projectinfoService;
@PostMapping("/upload") @PostMapping("/upload")
public void upload(MultipartFile file, HttpServletResponse response) throws IOException { public void upload(MultipartFile file, HttpServletResponse response) throws IOException {
long t1 = System.currentTimeMillis(); long t1 = System.currentTimeMillis();
@ -70,4 +84,39 @@ public class ProjectManagerController {
projectManagerService.save(projectManager); projectManagerService.save(projectManager);
return Result.OK("增加项目联系人成功!"); return Result.OK("增加项目联系人成功!");
} }
@GetMapping("/downloadRate")
public void downloadRate(HttpServletResponse response) throws IOException {
// 设置表头样式
WriteCellStyle headStyle = new WriteCellStyle();
headStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置表格内容
WriteCellStyle bodyStyle = new WriteCellStyle();
bodyStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); ;
bodyStyle.setVerticalAlignment(VerticalAlignment.CENTER);
List<HuzhouProjectinfo> projectInfoList = projectinfoService.queryProjectWithFundPay();
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());
}
// 这里注意 有同学反应使用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(), HuzhouProjectinfoExportDTO.class)
.registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, bodyStyle))
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet("上级资金执行率汇总"+currentDate)
.doWrite(dtoList);
}
} }

19
huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/HuzhouProjectinfoExportDTO.java

@ -0,0 +1,19 @@
package com.easy.admin.modules.huzhou.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadStyle;
import lombok.Data;
@HeadStyle(fillForegroundColor = 44)
@Data
public class HuzhouProjectinfoExportDTO {
@ExcelProperty("项目名称")
private String projectName;
@ExcelProperty("上级资金执行率")
private String superiorFundPayRate;
public HuzhouProjectinfoExportDTO(String projectName, String superiorFundPayRate) {
this.projectName = projectName;
this.superiorFundPayRate = superiorFundPayRate;
}
}

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

@ -2,6 +2,7 @@ package com.easy.admin.modules.huzhou.entity;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.easy.admin.modules.huzhou.dto.HuzhouProjectinfoExportDTO;
import lombok.Data; import lombok.Data;
/** /**
@ -175,9 +176,20 @@ public class HuzhouProjectinfo extends BaseEntity {
private String managerPhone; private String managerPhone;
/**
* 上级资金中央资金+省级资金使用率
*/
@TableField(exist = false)
String superiorFundPayRate;
/** /**
* 项目计划修改表示: 只允许修改一次 * 项目计划修改表示: 只允许修改一次
*/ */
private String updatePlanFlag; private String updatePlanFlag;
public HuzhouProjectinfoExportDTO toDTO() {
return new HuzhouProjectinfoExportDTO(this.projectName, this.superiorFundPayRate);
}
} }

1
huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouSubProjectinfo.java

@ -27,6 +27,7 @@ public class HuzhouSubProjectinfo extends HuzhouProjectinfo implements Serializa
@TableField(exist = false) @TableField(exist = false)
String contractStatus; String contractStatus;
} }

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

@ -234,5 +234,9 @@ public interface IHuzhouProjectinfoService extends IService<HuzhouProjectinfo> {
Boolean queryUpdatePlanFlagById(String projectId); Boolean queryUpdatePlanFlagById(String projectId);
HuzhouProjectinfoOV queryProjectFundPayRateById(String projectId);
List<HuzhouProjectinfo> queryProjectWithFundPay();
} }

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

@ -3,6 +3,7 @@ package com.easy.admin.modules.huzhou.service.impl;
import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.HuzhouCommonUtils;
import com.easy.admin.modules.huzhou.common.TemplateExcelUtils; import com.easy.admin.modules.huzhou.common.TemplateExcelUtils;
import com.easy.admin.modules.huzhou.dao.*; 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.entity.*;
import com.easy.admin.modules.huzhou.service.*; import com.easy.admin.modules.huzhou.service.*;
import com.easy.admin.modules.huzhou.vo.*; import com.easy.admin.modules.huzhou.vo.*;
@ -2642,4 +2644,114 @@ public class HuzhouProjectinfoServiceImpl extends ServiceImpl<HuzhouProjectinfoM
return true; 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;
}
} }

4
huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouProjectinfoOV.java

@ -1,5 +1,6 @@
package com.easy.admin.modules.huzhou.vo; package com.easy.admin.modules.huzhou.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo; import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo;
import com.easy.admin.modules.huzhou.entity.HuzhouSubProjectinfo; import com.easy.admin.modules.huzhou.entity.HuzhouSubProjectinfo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@ -23,5 +24,6 @@ public class HuzhouProjectinfoOV extends HuzhouProjectinfo {
*/ */
String contractStatus; String contractStatus;
String utrIsfinish; String utrIsfinish;
// String isSubProject;
} }

Loading…
Cancel
Save