|
@@ -3,13 +3,19 @@ package com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.util;
|
|
|
import com.jeeplus.modules.cg.reservemanagementcenter.statisticalTable.entity.*;
|
|
|
import com.jeeplus.modules.sg.managementcenter.materialproject.util.ImportUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.poi.ss.usermodel.Cell;
|
|
|
import org.apache.poi.ss.usermodel.Row;
|
|
|
-
|
|
|
+import org.apache.poi.ss.usermodel.Sheet;
|
|
|
+import org.apache.poi.ss.usermodel.Workbook;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import java.io.InputStream;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* @author: 王强
|
|
@@ -109,6 +115,303 @@ public class ExcelImportUtil {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 储备项目出图进度统计表
|
|
|
+ *
|
|
|
+ * @param importUtil
|
|
|
+ * @return List<PlotProgressStats> 导入表格数据
|
|
|
+ */
|
|
|
+ public static List<PlotProgressStats> getPlotProgressUtil(ImportUtil importUtil,List<String> proIdList) throws Exception {
|
|
|
+ int lastRow = importUtil.getLastDataRowNum();
|
|
|
+ List<PlotProgressStats> list = new ArrayList<PlotProgressStats>();
|
|
|
+ PlotProgressStats budgetStats = null;
|
|
|
+
|
|
|
+ for(int i=2; i<=lastRow;i++) {
|
|
|
+ budgetStats = new PlotProgressStats();
|
|
|
+ Row row = importUtil.getRow(i);
|
|
|
+
|
|
|
+// String reserveProjectName = (String) importUtil.getCellValue(row, 1);
|
|
|
+ //获取项目储备编号
|
|
|
+ String projectReserveId = (String) importUtil.getCellValue(row, 11);
|
|
|
+ if (StringUtils.isNotBlank(projectReserveId)) {
|
|
|
+
|
|
|
+ budgetStats.setProjectReserveId((String) importUtil.getCellValue(row, 11));
|
|
|
+ budgetStats.setPaperDrawing((String) importUtil.getCellValue(row, 27));
|
|
|
+ budgetStats.setPaperDrawingTime((String) importUtil.getCellValue(row, 28));
|
|
|
+ budgetStats.setPlanAndApprovalDrawing((String) importUtil.getCellValue(row, 31));
|
|
|
+ budgetStats.setPlanAndApprovalDrawingTime((String) importUtil.getCellValue(row, 32));
|
|
|
+ budgetStats.setRemarks((String) importUtil.getCellValue(row, 33));
|
|
|
+ //和基本信息表比对,是否有对应的数据
|
|
|
+ getBmList2(proIdList,budgetStats.getProjectReserveId());
|
|
|
+
|
|
|
+ list.add(budgetStats);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 储备项目设计特殊物资参数统计表
|
|
|
+ *
|
|
|
+ * @param importUtil
|
|
|
+ * @return List<SpecialParameterStats> 导入表格数据
|
|
|
+ */
|
|
|
+ public static List<SpecialParameterStats> getSpecialParameterStatsUtil(MultipartFile file,ImportUtil importUtil, List<String> proIdList, Map<String, List<MaterialData>> materialDataMap) throws Exception {
|
|
|
+
|
|
|
+ int lastRow = importUtil.getLastDataRowNum();
|
|
|
+ List<SpecialParameterStats> list = new ArrayList<SpecialParameterStats>();
|
|
|
+ SpecialParameterStats budgetStats = null;
|
|
|
+
|
|
|
+ int bj = 0;
|
|
|
+ int bj2 = 0;
|
|
|
+ for(int i=2; i<=lastRow;i++) {
|
|
|
+ budgetStats = new SpecialParameterStats();
|
|
|
+ Row row = importUtil.getRow(i);
|
|
|
+
|
|
|
+ //获取项目储备编号
|
|
|
+ String projectReserveId = (String) importUtil.getCellValue(row, 11);
|
|
|
+ //当获取到的projectReserveId为空的时候,那么判断是否是最后一行,如果不是最后一行,那么取标记行的值
|
|
|
+ if (StringUtils.isBlank(projectReserveId)){
|
|
|
+ if (bj != 0) {
|
|
|
+ bj = i - bj2 + 1;
|
|
|
+ bj2 = i;
|
|
|
+ } else {
|
|
|
+ bj = i-1;
|
|
|
+ bj2 = i;
|
|
|
+ }
|
|
|
+ row = importUtil.getRow(bj);
|
|
|
+ Row newRow = importUtil.getRow(i);
|
|
|
+ budgetStats.setProjectReserveId((String) importUtil.getCellValue(row, 11));
|
|
|
+ budgetStats.setProjectName((String) importUtil.getCellValue(row, 12));
|
|
|
+ getBmList2(proIdList,budgetStats.getProjectReserveId());
|
|
|
+
|
|
|
+ budgetStats.setMaterialName((String) importUtil.getCellValue(newRow, 25));
|
|
|
+ budgetStats.setParameter((String) importUtil.getCellValue(newRow, 29));
|
|
|
+ budgetStats.setRemarks((String) importUtil.getCellValue(newRow, 30));
|
|
|
+ if (budgetStats.getMaterialName().equals("箱式变电站") || budgetStats.getMaterialName().equals("低压开关柜")
|
|
|
+ || budgetStats.getMaterialName().equals("低压分支箱")){
|
|
|
+ //根据项目名称去materialDataMap中查对应的甲供材数据
|
|
|
+ //将查出的甲供材信息与提供的编号进行对bi
|
|
|
+ //最后将物料编码与扩展编码相同的将值添加起来
|
|
|
+ List<SpecialParameterStats> completeInfos = getCompleteInfo(budgetStats, materialDataMap);
|
|
|
+ list.addAll(completeInfos);
|
|
|
+ } else {
|
|
|
+ budgetStats.setSpecificationAndModel((String) importUtil.getCellValue(newRow, 26));
|
|
|
+ budgetStats.setMaterialDescription((String) importUtil.getCellValue(newRow, 27));
|
|
|
+ budgetStats.setNumber((String) importUtil.getCellValue(newRow, 28));
|
|
|
+ list.add(budgetStats);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ bj = 0;
|
|
|
+ bj2 = 0;
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(projectReserveId)) {
|
|
|
+ //和基本信息表比对,是否有对应的数据
|
|
|
+ budgetStats.setProjectReserveId((String) importUtil.getCellValue(row, 11));
|
|
|
+ budgetStats.setProjectName((String) importUtil.getCellValue(row, 12));
|
|
|
+ getBmList2(proIdList,budgetStats.getProjectReserveId());
|
|
|
+
|
|
|
+ budgetStats.setMaterialName((String) importUtil.getCellValue(row, 25));
|
|
|
+ budgetStats.setParameter((String) importUtil.getCellValue(row, 29));
|
|
|
+ budgetStats.setRemarks((String) importUtil.getCellValue(row, 30));
|
|
|
+ if (budgetStats.getMaterialName().equals("箱式变电站") || budgetStats.getMaterialName().equals("低压开关柜")
|
|
|
+ || budgetStats.getMaterialName().equals("低压分支箱")){
|
|
|
+ //根据项目名称去materialDataMap中查对应的甲供材数据
|
|
|
+ //将查出的甲供材信息与提供的编号进行对bi
|
|
|
+ //最后将物料编码与扩展编码相同的将值添加起来
|
|
|
+ List<SpecialParameterStats> completeInfos = getCompleteInfo(budgetStats, materialDataMap);
|
|
|
+ list.addAll(completeInfos);
|
|
|
+ } else {
|
|
|
+ budgetStats.setSpecificationAndModel((String) importUtil.getCellValue(row, 26));
|
|
|
+ budgetStats.setMaterialDescription((String) importUtil.getCellValue(row, 27));
|
|
|
+ budgetStats.setNumber((String) importUtil.getCellValue(row, 28));
|
|
|
+ list.add(budgetStats);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ list.forEach(li->{
|
|
|
+ if (StringUtils.isBlank(li.getProjectReserveId())){
|
|
|
+ try {
|
|
|
+ throw new Exception("项目储备编号不能为空");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static List<SpecialParameterStats> getCompleteInfo(SpecialParameterStats budgetStats, Map<String, List<MaterialData>> materialDataMap){
|
|
|
+ List<SpecialParameterStats> stats = new ArrayList<>();
|
|
|
+ //根据项目名称获取对应的在线开甲供材信息
|
|
|
+ List<MaterialData> materialData = materialDataMap.get(budgetStats.getProjectName());
|
|
|
+
|
|
|
+ if (null != materialData) {
|
|
|
+ if (budgetStats.getMaterialName().equals("箱式变电站")) {
|
|
|
+
|
|
|
+ for (int i=0;i<materialData.size();i++) {
|
|
|
+ SpecialParameterStats parameterStats = new SpecialParameterStats();
|
|
|
+ BeanUtils.copyProperties(budgetStats,parameterStats);
|
|
|
+
|
|
|
+ if (materialData.get(i).getMaterialCode().equals("500061873")) {
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,紧凑型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,紧凑型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,标准型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,标准型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ } else if (materialData.get(i).getMaterialCode().equals("500061857")) {
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,紧凑型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,紧凑型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,环网型,金属外壳,低压组屏,标准型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("标准化,终端型,金属外壳,低压组屏,标准型,能效2级")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if (budgetStats.getMaterialName().equals("低压开关柜")){
|
|
|
+ for (int i=0;i<materialData.size();i++){
|
|
|
+ SpecialParameterStats parameterStats = new SpecialParameterStats();
|
|
|
+ BeanUtils.copyProperties(budgetStats,parameterStats);
|
|
|
+ if (materialData.get(i).getMaterialCode().equals("500006556")){
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("低压开关柜,AC380V,抽屉式,分段,2500A,65kA。800×1000×2200")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ } else if (materialData.get(i).getMaterialCode().equals("500006630")){
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("低压开关柜,AC380V,抽屉式,进线,2500A,65kA。800×1000×2200")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ } else if (materialData.get(i).getMaterialCode().equals("500006703")){
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("低压开关柜,AC380V,抽屉式,馈线,2500A,50kA。4×400A+1×160A,600×1000×2200")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ } else if (materialData.get(i).getMaterialCode().equals("500112470")){
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("低压电容器柜,AC380V,固定式,130kvar。2000A,智能型,1000×1000×2200")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (budgetStats.getMaterialName().equals("低压分支箱")) {
|
|
|
+ for (int i=0;i<materialData.size();i++){
|
|
|
+ SpecialParameterStats parameterStats = new SpecialParameterStats();
|
|
|
+ BeanUtils.copyProperties(budgetStats,parameterStats);
|
|
|
+ if (materialData.get(i).getMaterialCode().equals("500107555")){
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("电缆分支箱,AC400V,条形开关,四路,400A。进线隔离开关400A,出线条形开关,3×250A,304不锈钢,落地式,户外")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ } else if (materialData.get(i).getMaterialCode().equals("500107558")){
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("电缆分支箱,AC400V,塑壳断路器,五路,630A。进线隔离开关630A,出线塑壳断路器,4×250A,304不锈钢,落地式,户外")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ } else if (materialData.get(i).getMaterialCode().equals("500107562")){
|
|
|
+ if (materialData.get(i).getExtendDescription().equals("电缆分支箱,AC400V,塑壳断路器,七路,630A。进线隔离开关630A,出线塑壳断路器,2×250A+4×160A,304不锈钢,落地式,户外")) {
|
|
|
+ parameterStats.setSpecificationAndModel(materialData.get(i).getMaterialCode() + "-" + materialData.get(i).getExtendDescription());
|
|
|
+ parameterStats.setMaterialDescription(materialData.get(i).getMaterialName());
|
|
|
+ parameterStats.setNumber(materialData.get(i).getTotalCount());
|
|
|
+ stats.add(parameterStats);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<String, Double> materialNameToTotal = new HashMap<>();
|
|
|
+
|
|
|
+ // 创建一个 Map 来保存与 materialName 相关的其他数据
|
|
|
+ Map<String, SpecialParameterStats> materialNameToData = new HashMap<>();
|
|
|
+
|
|
|
+ for (SpecialParameterStats stat : stats) {
|
|
|
+ String materialName = stat.getSpecificationAndModel();
|
|
|
+ double number = Double.parseDouble(stat.getNumber());
|
|
|
+
|
|
|
+ // 如果 materialName 已经存在于 map 中,就累加它的 number
|
|
|
+ if (materialNameToTotal.containsKey(materialName)) {
|
|
|
+ double currentTotal = materialNameToTotal.get(materialName);
|
|
|
+ materialNameToTotal.put(materialName, currentTotal + number);
|
|
|
+ } else {
|
|
|
+ // 如果 materialName 不在 map 中,就添加它
|
|
|
+ materialNameToTotal.put(materialName, number);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存与 materialName 相关的其他数据
|
|
|
+ materialNameToData.put(materialName, stat);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清空原始 stats 列表
|
|
|
+ stats.clear();
|
|
|
+
|
|
|
+ // 根据 map 中的内容重新构建 stats 列表
|
|
|
+ for (Map.Entry<String, Double> entry : materialNameToTotal.entrySet()) {
|
|
|
+ String materialName = entry.getKey();
|
|
|
+ double totalNumber = entry.getValue();
|
|
|
+
|
|
|
+ // 获取与 materialName 相关的其他数据
|
|
|
+ SpecialParameterStats originalStat = materialNameToData.get(materialName);
|
|
|
+
|
|
|
+ // 设置合并后的 number
|
|
|
+ originalStat.setNumber(String.valueOf(totalNumber));
|
|
|
+
|
|
|
+ // 将原始数据添加回 stats 列表
|
|
|
+ stats.add(originalStat);
|
|
|
+ }
|
|
|
+
|
|
|
+ return stats;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取储备项目特殊物资统计表表格数据
|
|
|
*
|
|
|
* @param importUtil
|