diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 77bf067..5d30007 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -71,14 +71,14 @@ spring: basename: i18n/messages profiles: #@profiles.active@ - active: dev + active: test # 文件上传 servlet: multipart: # 单个文件大小 - max-file-size: 1000MB + max-file-size: 10000MB # 设置总上传的文件大小 - max-request-size: 1000MB + max-request-size: 10000MB mvc: # 设置静态资源路径 防止所有请求都去查静态资源 static-path-pattern: /static/** diff --git a/zaojiaManagement/zaojia-productManagement/pom.xml b/zaojiaManagement/zaojia-productManagement/pom.xml index 2ecd47d..dc413bc 100644 --- a/zaojiaManagement/zaojia-productManagement/pom.xml +++ b/zaojiaManagement/zaojia-productManagement/pom.xml @@ -131,6 +131,11 @@ zip4j 2.11.5 + + org.ofdrw + ofdrw-converter + 1.17.18 + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualProductInfoController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualProductInfoController.java index 760ae7d..f9dcf1a 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualProductInfoController.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualProductInfoController.java @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.productManagement.domain.ContractualUnitStatistics; +import org.dromara.productManagement.domain.ProductStatisticsData; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -102,4 +104,21 @@ public class ContractualProductInfoController extends BaseController { @PathVariable Long[] ids) { return toAjax(contractualProductInfoService.deleteWithValidByIds(List.of(ids), true)); } + /** + * 统计合同产品信息 + * + * @param ids 主键串 + */ + @Log(title = "统计合同产品信息", businessType = BusinessType.DELETE) + @GetMapping("/statistics") + public R getStatistics(@RequestParam(required = false) String unitName) { + ProductStatisticsData productStatisticsData =contractualProductInfoService.getStatistics(unitName); + return R.ok(productStatisticsData); + } + @Log(title = "统计合同产品信息", businessType = BusinessType.DELETE) + @GetMapping("/unitStatistics") + public TableDataInfo getUnitStatistics(@RequestParam(required = false) String unitName,PageQuery pageQuery) { + TableDataInfo contractualUnitStatisticsTableDataInfo =contractualProductInfoService.getUnitStatistics(unitName,pageQuery); + return contractualUnitStatisticsTableDataInfo; + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/JyjContractualTaskBatchController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/JyjContractualTaskBatchController.java index 47f3f72..a754928 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/JyjContractualTaskBatchController.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/JyjContractualTaskBatchController.java @@ -56,16 +56,16 @@ public class JyjContractualTaskBatchController extends BaseController { return jyjContractualTaskBatchService.queryPageList(bo, pageQuery); } - /** - * 导出合同批处理记录列表 - */ - @SaCheckPermission("productManagement:JyjcontractualTaskBatch:export") - @Log(title = "合同批处理记录", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(JyjContractualTaskBatchBo bo, HttpServletResponse response) { - List list = jyjContractualTaskBatchService.queryList(bo); - ExcelUtil.exportExcel(list, "合同批处理记录", JyjContractualTaskBatchVo.class, response); - } +// /** +// * 导出合同批处理记录列表 +// */ +// @SaCheckPermission("productManagement:JyjcontractualTaskBatch:export") +// @Log(title = "合同批处理记录", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(JyjContractualTaskBatchBo bo, HttpServletResponse response) { +// List list = jyjContractualTaskBatchService.queryList(bo); +// ExcelUtil.exportExcel(list, "合同批处理记录", JyjContractualTaskBatchVo.class, response); +// } /** * 获取合同批处理记录详细信息 @@ -135,4 +135,23 @@ public class JyjContractualTaskBatchController extends BaseController { public R getContractulContent(@PathVariable Long id) { return R.ok("ok",jyjContractualTaskBatchService.getContractulContent(id)); } + + /** + * 导出特定ID的合同批处理结果 + * + * @param id 主键 + * @param batchName 批次名称 + * @param resultType 结果类型 + */ + @SaCheckPermission("productManagement:JyjcontractualTaskBatch:export") + @Log(title = "合同批处理结果", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void exportResult( + @RequestParam(required = false) String documentName, + @RequestParam(required = false) String batchName, + @RequestParam(required = false) String resultType, + @RequestParam(required = false) String problemPoint, + HttpServletResponse response) { + jyjContractualTaskBatchService.exportResultById(documentName, batchName, resultType, problemPoint, response); + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualProductInfo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualProductInfo.java index 182d308..a2cdc94 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualProductInfo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualProductInfo.java @@ -56,7 +56,7 @@ public class ContractualProductInfo extends TenantEntity { * 价格单位 */ private String priceUnit; - + private String cpuModel; /** * 数量 */ @@ -77,6 +77,7 @@ public class ContractualProductInfo extends TenantEntity { */ @TableLogic private String delFlag; - + @TableField(exist = false) + public String unitName; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTaskExport.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTaskExport.java new file mode 100644 index 0000000..26f1b03 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTaskExport.java @@ -0,0 +1,42 @@ +package org.dromara.productManagement.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 合同审查结果导出对象 + * + * @author Lion Li + */ +@Data +@NoArgsConstructor +public class ContractualTaskExport { + /** + * 甲方单位 + */ + @ExcelProperty(value = "甲方单位") + private String partyAName; + + /** + * 文件名称 + */ + @ExcelProperty(value = "文件名称") + private String documentName; + @ExcelProperty(value = "批次名称") + private String batchName; + + + /** + * 问题点 + */ + @ExcelProperty(value = "问题点") + private String issuePoint; + + /** + * 问题详情 + */ + @ExcelProperty(value = "问题详情") + private String issueDetail; + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualUnitStatistics.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualUnitStatistics.java new file mode 100644 index 0000000..9af4efb --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualUnitStatistics.java @@ -0,0 +1,32 @@ +package org.dromara.productManagement.domain; + +import lombok.Data; + +/** + * 合同产品单位统计对象 + * + * @author ruoyi + */ +@Data +public class ContractualUnitStatistics { + private static final long serialVersionUID = 1L; + + /** 单位名称 */ + private String unitName; + + /** 台式电脑数量 */ + private Integer desktopCount; + + /** 便携式电脑数量 */ + private Integer laptopCount; + + /** 服务器数量 */ + private Integer serverCount; + + /** 操作系统数量 */ + private Integer osCount; + + /** 数据库数量 */ + private Integer dbCount; + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ProductStatisticsData.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ProductStatisticsData.java new file mode 100644 index 0000000..f3990ff --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ProductStatisticsData.java @@ -0,0 +1,43 @@ +package org.dromara.productManagement.domain; + +import java.util.List; +import lombok.Data; + +/** + * 合同产品统计数据 + */ +@Data +public class ProductStatisticsData { + + /** 设备统计列表 */ + private List equipmentStats; + + /** + * 设备统计项 (内部类) + */ + @Data + public static class EquipmentStat { + + /** 设备类型名称 */ + private String name; + + /** 设备总数量 */ + private Long totalCount; + + /** 品牌统计列表 */ + private List brands; + } + + /** + * 品牌统计项 (内部类) + */ + @Data + public static class BrandStat { + + /** 品牌名称 */ + private String name; + + /** 数量 */ + private Long count; + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualProductInfoBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualProductInfoBo.java index ff556c7..1123dac 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualProductInfoBo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualProductInfoBo.java @@ -49,6 +49,7 @@ public class ContractualProductInfoBo extends BaseEntity { * 单价 */ private Long unitPrice; + private String cpuModel; /** * 价格单位 @@ -69,6 +70,7 @@ public class ContractualProductInfoBo extends BaseEntity { * 类型 */ private String type; + public String unitName; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualProductInfoVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualProductInfoVo.java index 241eb9f..b41aec5 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualProductInfoVo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualProductInfoVo.java @@ -63,6 +63,7 @@ public class ContractualProductInfoVo implements Serializable { */ @ExcelProperty(value = "单价") private Long unitPrice; + private String cpuModel; /** * 价格单位 @@ -88,5 +89,6 @@ public class ContractualProductInfoVo implements Serializable { @ExcelProperty(value = "类型") private String type; + public String unitName; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualProductInfoMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualProductInfoMapper.java index de59b01..6907147 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualProductInfoMapper.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ContractualProductInfoMapper.java @@ -1,9 +1,15 @@ package org.dromara.productManagement.mapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; import org.dromara.productManagement.domain.ContractualProductInfo; +import org.dromara.productManagement.domain.ContractualUnitStatistics; +import org.dromara.productManagement.domain.bo.ContractualProductInfoBo; import org.dromara.productManagement.domain.vo.ContractualProductInfoVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.List; + /** * 合同产品信息Mapper接口 * @@ -11,5 +17,13 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; * @date 2025-03-18 */ public interface ContractualProductInfoMapper extends BaseMapperPlus { - + /** + * 查询用于统计的产品信息列表 + * + * @param queryParam 查询参数 + * @return 产品信息集合 + */ + List selectProductInfoForStatistics(@Param("unitName") String unitName); + Page selectProductInfoPage(@Param("page") Page page, @Param("queryParam") ContractualProductInfoBo queryParam); + Page getUnitStatisticsPage(@Param("page") Page page, @Param("unitName") String unitName); } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksMapper.java index 4b43a46..928e56f 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksMapper.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksMapper.java @@ -6,12 +6,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; +import org.dromara.productManagement.domain.ContractualTaskExport; import org.dromara.productManagement.domain.DocumentTaskGroup; import org.dromara.productManagement.domain.DocumentTasks; import org.dromara.productManagement.domain.vo.DocumentTasksVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysUser; +import java.util.List; + /** * 文档任务Mapper接口 * @@ -25,4 +28,17 @@ import org.dromara.system.domain.SysUser; public interface DocumentTasksMapper extends BaseMapperPlus { Page selectDocumentTaskGroups(@Param("page") Page page,@Param(Constants.WRAPPER) Wrapper wrapper); + /** + * 根据条件查询文档任务并关联相关信息 + * + * @param batchName 批次名称,可选 + * @param documentName 文档名称,可选 + * @param resultType 结果类型,可选 + * @return 合约任务导出列表 + */ + List selectContractualTaskExport(@Param("batchName") String batchName, + @Param("documentName") String documentName, + @Param("resultType") String resultType, + @Param("problemPoint") String problemPoint); } + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualProductInfoService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualProductInfoService.java index 2dbc8a1..e82af65 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualProductInfoService.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualProductInfoService.java @@ -1,5 +1,7 @@ package org.dromara.productManagement.service; +import org.dromara.productManagement.domain.ContractualUnitStatistics; +import org.dromara.productManagement.domain.ProductStatisticsData; import org.dromara.productManagement.domain.vo.ContractualProductInfoVo; import org.dromara.productManagement.domain.bo.ContractualProductInfoBo; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -65,4 +67,8 @@ public interface IContractualProductInfoService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + ProductStatisticsData getStatistics(String unitName); + + TableDataInfo getUnitStatistics(String unitName, PageQuery pageQuery); } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IJyjContractualTaskBatchService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IJyjContractualTaskBatchService.java index 747f265..f3d0597 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IJyjContractualTaskBatchService.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IJyjContractualTaskBatchService.java @@ -82,4 +82,14 @@ public interface IJyjContractualTaskBatchService { void getContractulPdf(Long id, HttpServletResponse response) throws UnsupportedEncodingException; String getContractulContent(Long id); + + /** + * 根据ID导出合同批处理结果 + * + * @param documentName 文档名称 + * @param batchName 批次名称 + * @param resultType 结果类型 + * @param response 响应对象 + */ + void exportResultById(String documentName, String batchName, String resultType,String problemPoint, HttpServletResponse response); } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualProductInfoServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualProductInfoServiceImpl.java index f6e55d2..674e57b 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualProductInfoServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualProductInfoServiceImpl.java @@ -8,6 +8,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.productManagement.domain.ContractualUnitStatistics; +import org.dromara.productManagement.domain.DocumentTaskGroup; +import org.dromara.productManagement.domain.ProductStatisticsData; import org.springframework.stereotype.Service; import org.dromara.productManagement.domain.bo.ContractualProductInfoBo; import org.dromara.productManagement.domain.vo.ContractualProductInfoVo; @@ -15,9 +18,11 @@ import org.dromara.productManagement.domain.ContractualProductInfo; import org.dromara.productManagement.mapper.ContractualProductInfoMapper; import org.dromara.productManagement.service.IContractualProductInfoService; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 合同产品信息Service业务层处理 @@ -52,8 +57,9 @@ public class ContractualProductInfoServiceImpl implements IContractualProductInf @Override public TableDataInfo queryPageList(ContractualProductInfoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); + Page contractualProductInfoPage = baseMapper.selectProductInfoPage(pageQuery.build(), bo); +// Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(contractualProductInfoPage); } /** @@ -134,4 +140,107 @@ public class ContractualProductInfoServiceImpl implements IContractualProductInf } return baseMapper.deleteByIds(ids) > 0; } + + @Override + public ProductStatisticsData getStatistics(String unitName) { + ProductStatisticsData statistics = new ProductStatisticsData(); + List equipmentStats = new ArrayList<>(); + // 查询所有符合条件的产品数据 + List productList = baseMapper.selectProductInfoForStatistics(unitName); + + // 按类型分组统计 + Map> typeMap = productList.stream() + .collect(Collectors.groupingBy(ContractualProductInfo::getType)); + + // 处理每种设备类型 + for (Map.Entry> entry : typeMap.entrySet()) { + String type = entry.getKey(); + List typeProducts = entry.getValue(); + + ProductStatisticsData.EquipmentStat equipmentStat = new ProductStatisticsData.EquipmentStat(); + equipmentStat.setName(type); + + // 计算总数量(累加quantity字段) + Long totalCount = typeProducts.stream() + .mapToLong(product -> product.getQuantity() != null ? product.getQuantity() : 0) + .sum(); + equipmentStat.setTotalCount(totalCount); + + // 按品牌分组统计 + Map> brandMap = typeProducts.stream() + .collect(Collectors.groupingBy(ContractualProductInfo::getBrand)); + + List brandStats = new ArrayList<>(); + for (Map.Entry> brandEntry : brandMap.entrySet()) { + String brand = brandEntry.getKey(); + List brandProducts = brandEntry.getValue(); + + ProductStatisticsData.BrandStat brandStat = new ProductStatisticsData.BrandStat(); + brandStat.setName(brand); + + // 计算品牌数量(累加quantity字段) + Long brandCount = brandProducts.stream() + .mapToLong(product -> product.getQuantity() != null ? product.getQuantity() : 0) + .sum(); + brandStat.setCount(brandCount); + + brandStats.add(brandStat); + } + + // 按数量降序排序 + // 按数量降序排序 + brandStats.sort((a, b) -> Long.compare(b.getCount(), a.getCount())); + equipmentStat.setBrands(brandStats); + equipmentStats.add(equipmentStat); + } + // 添加CPU型号统计 + ProductStatisticsData.EquipmentStat cpuModelStat = new ProductStatisticsData.EquipmentStat(); + cpuModelStat.setName("技术路线CPU"); + + // 按CPU型号分组统计,过滤掉空值和null + Map> cpuModelMap = productList.stream() + .filter(product -> product.getCpuModel() != null && !product.getCpuModel().isEmpty()) + .collect(Collectors.groupingBy(ContractualProductInfo::getCpuModel)); + + List cpuStats = new ArrayList<>(); + for (Map.Entry> cpuEntry : cpuModelMap.entrySet()) { + String cpuModel = cpuEntry.getKey(); + List cpuProducts = cpuEntry.getValue(); + + ProductStatisticsData.BrandStat cpuStat = new ProductStatisticsData.BrandStat(); + cpuStat.setName(cpuModel); + + // 计算该CPU型号的数量 + Long cpuCount = cpuProducts.stream() + .mapToLong(product -> product.getQuantity() != null ? product.getQuantity() : 0) + .sum(); + cpuStat.setCount(cpuCount); + + cpuStats.add(cpuStat); + } + + // CPU型号按数量降序排序 + cpuStats.sort((a, b) -> Long.compare(b.getCount(), a.getCount())); + cpuModelStat.setBrands(cpuStats); + + // 计算CPU总数(只计算有CPU型号的产品) + Long cpuTotalCount = productList.stream() + .filter(product -> product.getCpuModel() != null && !product.getCpuModel().isEmpty()) + .mapToLong(product -> product.getQuantity() != null ? product.getQuantity() : 0) + .sum(); + cpuModelStat.setTotalCount(cpuTotalCount); + + equipmentStats.add(cpuModelStat); + statistics.setEquipmentStats(equipmentStats); + return statistics; + } + + @Override + public TableDataInfo getUnitStatistics(String unitName, PageQuery pageQuery) { + Page contractualUnitStatisticsPage = baseMapper.getUnitStatisticsPage(pageQuery.build(), unitName); + return TableDataInfo.build(contractualUnitStatisticsPage); + + + + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTaskResultsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTaskResultsServiceImpl.java index 7658d68..c3e2a6b 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTaskResultsServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTaskResultsServiceImpl.java @@ -263,6 +263,7 @@ public class DocumentTaskResultsServiceImpl implements IDocumentTaskResultsServi documentTasks.setId(documentTaskId); if(size>0){ documentTasks.setResultType("reviewFail"); + documentTasks.setProblemPoint("人工干预"); }else{ documentTasks.setResultType("reviewSuccess"); documentTasks.setProblemPoint(""); diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/JyjContractualTaskBatchServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/JyjContractualTaskBatchServiceImpl.java index 4dca60f..9041c5b 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/JyjContractualTaskBatchServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/JyjContractualTaskBatchServiceImpl.java @@ -5,8 +5,11 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -14,6 +17,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.productManagement.domain.*; +import org.dromara.productManagement.domain.vo.RequirementEntityVo; import org.dromara.productManagement.mapper.ContractualInfoMapper; import org.dromara.productManagement.mapper.DocumentTaskResultsMapper; import org.dromara.productManagement.mapper.DocumentTasksMapper; @@ -22,6 +26,7 @@ import org.dromara.productManagement.utils.MyHttpUtils; import org.dromara.productManagement.utils.MyTimeUtils; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; +import org.ofdrw.converter.ConvertHelper; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.dromara.productManagement.domain.bo.JyjContractualTaskBatchBo; @@ -239,30 +244,72 @@ public class JyjContractualTaskBatchServiceImpl implements IJyjContractualTaskBa @Override public void getContractulPdf(Long id, HttpServletResponse response) throws UnsupportedEncodingException { +// // PDF文件的绝对路径 +// DocumentTasks documentTasks = documentTasksMapper.selectById(id); +// String pdfPath = documentTasks.getFilePath(); +// String fileName = documentTasks.getDocumentName(); +// +// File file = new File(pdfPath); +// if (!file.exists()) { +// throw new RuntimeException("文件不存在"); +// } +// response.setContentType("application/pdf"); +//// 正确的方式 +// String encodedFileName = URLEncoder.encode(fileName, "UTF-8") +// .replaceAll("\\+", "%20"); +// response.setHeader("Content-Disposition", "inline; filename=\"" + encodedFileName + "\""); +// response.setContentLength((int) file.length()); +// try (FileInputStream inputStream = new FileInputStream(file); +// OutputStream outputStream = response.getOutputStream()) { +// +// byte[] buffer = new byte[1024]; +// int bytesRead; +// while ((bytesRead = inputStream.read(buffer)) != -1) { +// outputStream.write(buffer, 0, bytesRead); +// } +// outputStream.flush(); +// } catch (IOException e) { +// throw new RuntimeException("文件读取失败", e); +// } + // PDF文件的绝对路径 // PDF文件的绝对路径 DocumentTasks documentTasks = documentTasksMapper.selectById(id); - String pdfPath = documentTasks.getFilePath(); + String filePath = documentTasks.getFilePath(); String fileName = documentTasks.getDocumentName(); - File file = new File(pdfPath); + File file = new File(filePath); if (!file.exists()) { throw new RuntimeException("文件不存在"); } + + // 检查文件类型 + String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); + response.setContentType("application/pdf"); -// 正确的方式 - String encodedFileName = URLEncoder.encode(fileName, "UTF-8") + String encodedFileName = URLEncoder.encode(fileName.replace(".ofd", ".pdf"), "UTF-8") .replaceAll("\\+", "%20"); response.setHeader("Content-Disposition", "inline; filename=\"" + encodedFileName + "\""); - response.setContentLength((int) file.length()); - try (FileInputStream inputStream = new FileInputStream(file); - OutputStream outputStream = response.getOutputStream()) { - byte[] buffer = new byte[1024]; - int bytesRead; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead); + try { + if ("ofd".equals(fileExtension)) { + // 直接使用流进行转换 + try (FileInputStream inputStream = new FileInputStream(file); + OutputStream outputStream = response.getOutputStream()) { + // 使用OFD转PDF工具进行转换 + ConvertHelper.toPdf(inputStream, outputStream); + } + } else { + // 如果是PDF直接输出 + try (FileInputStream inputStream = new FileInputStream(file); + OutputStream outputStream = response.getOutputStream()) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.flush(); + } } - outputStream.flush(); } catch (IOException e) { throw new RuntimeException("文件读取失败", e); } @@ -276,4 +323,46 @@ public class JyjContractualTaskBatchServiceImpl implements IJyjContractualTaskBa String text = contractualInfo.getText(); return text; } + + @Override + public void exportResultById(String documentName, String batchName, String resultType,String problemPoint, HttpServletResponse response) { + try { + // 1. 调用Mapper查询数据 + List list = documentTasksMapper.selectContractualTaskExport(batchName, documentName, resultType, problemPoint); + +// 处理每个任务的 issueDetail 字段 + for (ContractualTaskExport task : list) { + String issueDetail = task.getIssueDetail(); + if (issueDetail != null && !issueDetail.isEmpty()) { + // 将 JSON 字符串转换为 ContractualRes 对象 + ContractualRes contractualRes = JsonUtils.parseObject(issueDetail, ContractualRes.class); + if (contractualRes != null && contractualRes.getResults() != null) { + StringBuilder formattedDetail = new StringBuilder(); + + for (ContractualRes.ContractReviewResult result : contractualRes.getResults()) { + if (result.getContentList() != null && !result.getContentList().isEmpty()) { + int problemIndex = 1; + for (ContractualRes.ProblemDetail problem : result.getContentList()) { + formattedDetail.append(problemIndex).append(". ") + .append(problem.getProblemTitle()) + .append(": ") + .append(problem.getProblemDesc()) + .append("\n"); + problemIndex++; + } + } + } + + // 更新任务的 issueDetail 字段为格式化后的文本 + task.setIssueDetail(formattedDetail.toString().trim()); + } + } + } + + ExcelUtil.exportExcel(list, "合同批处理结果", ContractualTaskExport.class, response); + } catch (Exception e) { + log.error("导出失败:", e); + throw new ServiceException("导出Excel失败,请联系管理员"); + } + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualProductInfoMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualProductInfoMapper.xml index 78f51b5..4411374 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualProductInfoMapper.xml +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ContractualProductInfoMapper.xml @@ -3,5 +3,101 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksMapper.xml index b366567..eac9201 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksMapper.xml +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksMapper.xml @@ -100,5 +100,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND create_time = #{groupDate} ORDER BY create_time DESC + +