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
+
+