diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java index c2ec7c3..4e5c171 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouProjectController.java @@ -114,6 +114,28 @@ public class HuzhouProjectController { 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 rs = projectinfoService.queryProjectWithFundPay(); + return Result.OK(rs); + } + + + /** * 根据项目id获取项目信息 * @param projectid 项目id diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java index f513333..90b59bf 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/ProjectManagerController.java +++ b/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.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.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.HuzhouSubProjectinfo; import com.easy.admin.modules.huzhou.entity.ProjectManager; 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 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.multipart.MultipartFile; @@ -17,6 +25,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; /** * @Author gejunhao @@ -29,6 +39,10 @@ import java.time.LocalDate; public class ProjectManagerController { @Resource private ProjectManagerService projectManagerService; + + @Resource + private IHuzhouProjectinfoService projectinfoService; + @PostMapping("/upload") public void upload(MultipartFile file, HttpServletResponse response) throws IOException { long t1 = System.currentTimeMillis(); @@ -70,4 +84,39 @@ public class ProjectManagerController { projectManagerService.save(projectManager); 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 projectInfoList = projectinfoService.queryProjectWithFundPay(); + List 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); + } + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/HuzhouProjectinfoExportDTO.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dto/HuzhouProjectinfoExportDTO.java new file mode 100644 index 0000000..8a46a47 --- /dev/null +++ b/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; + } +} \ No newline at end of file diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java index 06fc8e8..4404948 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouProjectinfo.java +++ b/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.baomidou.mybatisplus.annotation.TableField; +import com.easy.admin.modules.huzhou.dto.HuzhouProjectinfoExportDTO; import lombok.Data; /** @@ -175,9 +176,20 @@ public class HuzhouProjectinfo extends BaseEntity { private String managerPhone; + /** + * 上级资金(中央资金+省级资金)使用率 + */ + @TableField(exist = false) + String superiorFundPayRate; + /** * 项目计划修改表示: 只允许修改一次 */ private String updatePlanFlag; + + + public HuzhouProjectinfoExportDTO toDTO() { + return new HuzhouProjectinfoExportDTO(this.projectName, this.superiorFundPayRate); + } } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouSubProjectinfo.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouSubProjectinfo.java index a92ec08..47ff780 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouSubProjectinfo.java +++ b/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) String contractStatus; + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java index 8283418..3b75e23 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouProjectinfoService.java @@ -234,5 +234,9 @@ public interface IHuzhouProjectinfoService extends IService { Boolean queryUpdatePlanFlagById(String projectId); + + HuzhouProjectinfoOV queryProjectFundPayRateById(String projectId); + + List queryProjectWithFundPay(); } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java index be88667..b93240d 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouProjectinfoServiceImpl.java +++ b/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.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 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 queryProjectWithFundPay() { + List projectInfoList = this.list(); + for (HuzhouProjectinfo projectInfo : projectInfoList) { + // 填充上级资金支付率 + fillSuperiorFundPayRate(projectInfo); + } + List 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 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 qw = new LambdaQueryWrapper<>(); + qw.eq(HuzhouContractinfo::getProjectId, projectId).eq(HuzhouContractinfo::getFlag, "实际"); + List contractInfoList = contractinfoMapper.selectList(qw); + return contractInfoList != null && !contractInfoList.isEmpty(); + } + + private Map calculateActualFunds(String projectId) { + Double centralMoney = 0.0; + Double provincialMoney = 0.0; + + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(HuzhouContractinfo::getProjectId, projectId).eq(HuzhouContractinfo::getFlag, "实际"); + List 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 result = new HashMap<>(); + result.put("centralMoney", centralMoney); + result.put("provincialMoney", provincialMoney); + return result; + } + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouProjectinfoOV.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouProjectinfoOV.java index 2d41876..4cee09d 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouProjectinfoOV.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/vo/HuzhouProjectinfoOV.java @@ -1,5 +1,6 @@ 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.HuzhouSubProjectinfo; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -23,5 +24,6 @@ public class HuzhouProjectinfoOV extends HuzhouProjectinfo { */ String contractStatus; String utrIsfinish; -// String isSubProject; + + }