wangming 1 год назад
Родитель
Сommit
f442f90634

+ 8 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxItpProjectNodesService.java

@@ -35,4 +35,12 @@ public interface ZhcxItpProjectNodesService extends IService<ZhcxItpProjectNodes
 
     void erroDataUpdate();
 
+    /**
+     * 获取构件
+     *
+     * @param projectId
+     * @return
+     */
+    List<String> getStructureByProjectId(String projectId);
+
 }

+ 9 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/ZhcxProjectDeviceNumberService.java

@@ -3,6 +3,8 @@ package com.rongwei.bscommon.sys.service;
 import com.rongwei.bsentity.domain.ZhcxProjectDeviceNumberDo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 项目管理机号表 服务类
@@ -13,4 +15,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface ZhcxProjectDeviceNumberService extends IService<ZhcxProjectDeviceNumberDo> {
 
+    /**
+     * 获取机号
+     *
+     * @param projectId
+     * @return
+     */
+    List<String> getDeviceNumberByProjectId(String projectId);
 }

+ 26 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxItpProjectNodesServiceImpl.java

@@ -31,6 +31,7 @@ import org.springframework.stereotype.Service;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -621,4 +622,29 @@ public class ZhcxItpProjectNodesServiceImpl extends ServiceImpl<ZhcxItpProjectNo
 
         this.updateBatchById(projectNodesDos);
     }
+
+    /**
+     * 获取构件
+     *
+     * @param projectId
+     * @return
+     */
+    @Override
+    public List<String> getStructureByProjectId(String projectId) {
+
+        //查询大构建
+        LambdaQueryWrapper<ZhcxItpProjectNodesDo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(ZhcxItpProjectNodesDo::getProjectid, projectId)
+                .eq(ZhcxItpProjectNodesDo::getDeleted, "0")
+                .eq(ZhcxItpProjectNodesDo::getLevel, "2")
+                .isNull(ZhcxItpProjectNodesDo::getPnodeid);
+
+        List<ZhcxItpProjectNodesDo> list = list(queryWrapper);
+
+        if(ObjectUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+
+        return list.stream().map(item -> item.getNodename()).collect(Collectors.toList());
+    }
 }

+ 23 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxProjectDeviceNumberServiceImpl.java

@@ -1,11 +1,18 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.rongwei.bsentity.domain.ZhcxProjectDeviceNumberDo;
 import com.rongwei.bscommon.sys.dao.ZhcxProjectDeviceNumberDao;
 import com.rongwei.bscommon.sys.service.ZhcxProjectDeviceNumberService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 项目管理机号表 服务实现类
@@ -17,4 +24,20 @@ import org.springframework.stereotype.Service;
 @Service
 public class ZhcxProjectDeviceNumberServiceImpl extends ServiceImpl<ZhcxProjectDeviceNumberDao, ZhcxProjectDeviceNumberDo> implements ZhcxProjectDeviceNumberService {
 
+    /**
+     * 获取机号
+     *
+     * @param projectId
+     * @return
+     */
+    @Override
+    public List<String> getDeviceNumberByProjectId(String projectId) {
+        LambdaQueryWrapper<ZhcxProjectDeviceNumberDo> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(ZhcxProjectDeviceNumberDo::getPid, projectId).eq(ZhcxProjectDeviceNumberDo::getDeleted, "0");
+        List<ZhcxProjectDeviceNumberDo> list = list(queryWrapper);
+        if(ObjectUtil.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        return list.stream().map(item -> item.getDeviceNumber()).collect(Collectors.toList());
+    }
 }

+ 242 - 6
business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ZhcxProjectManageServiceImpl.java

@@ -1,15 +1,27 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import com.aspose.cells.*;
+import com.rongwei.bscommon.sys.service.ZhcxItpProjectNodesService;
+import com.rongwei.bscommon.sys.service.ZhcxProjectDeviceNumberService;
+import com.rongwei.bscommon.sys.utils.ProjectSummaryExcelHelp;
 import com.rongwei.bsentity.domain.ZhcxProjectManageDo;
 import com.rongwei.bscommon.sys.dao.ZhcxProjectManageDao;
 import com.rongwei.bscommon.sys.service.ZhcxProjectManageService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.rongwei.rwcommoncomponent.file.dto.NewFileDto;
+import com.rongwei.bsentity.dto.project.CellChangeInfoDto;
+import com.rongwei.bsentity.dto.project.ProjectSummaryParamExcelDto;
+import com.rongwei.bsentity.dto.project.WorksheetSummaryDto;
+import com.rongwei.rwcommon.base.exception.CustomException;
+import com.rongwei.rwcommoncomponent.excel.aspose.ExcelUtils;
+import com.rongwei.rwcommoncomponent.file.dto.SysFileItemParamDto;
 import com.rongwei.rwcommoncomponent.file.service.SysFileItemService;
 import com.rongwei.rwcommonentity.commonservers.domain.SysFileItemDo;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 项目管理表 服务实现类
@@ -22,8 +34,15 @@ import org.springframework.stereotype.Service;
 public class ZhcxProjectManageServiceImpl extends ServiceImpl<ZhcxProjectManageDao, ZhcxProjectManageDo> implements ZhcxProjectManageService {
 
     @Autowired
+    @Lazy
     private SysFileItemService fileItemService;
 
+    @Autowired
+    private ZhcxProjectDeviceNumberService projectDeviceNumberService;
+
+    @Autowired
+    private ZhcxItpProjectNodesService itpProjectNodesService;
+
     /**
      * 生成汇总文件
      *
@@ -32,13 +51,230 @@ public class ZhcxProjectManageServiceImpl extends ServiceImpl<ZhcxProjectManageD
     @Override
     public SysFileItemDo genSummaryFiles(String projectId) {
 
+        //项目信息
         ZhcxProjectManageDo manageDo = getById(projectId);
+        //组装请求参数
+        ProjectSummaryParamExcelDto excelDto = assembleProjectSummaryParam(manageDo);
+        //组装文件实体
+        SysFileItemDo fileItemDo = assembleFileItem(manageDo, excelDto.getFileName());
+        excelDto.setFullPathFile(fileItemDo.getFullpath());
 
-        NewFileDto newFileDto = NewFileDto.builder()
-                .fileName(manageDo.getProjectCode().concat(manageDo.getProjectEname()))
-                .suffix("xlsx")
-                .build();
-        SysFileItemDo fileItemDo = fileItemService.newBlankFile(newFileDto);
+        //生成文件
+        genSummaryExcel(excelDto);
+
+        fileItemService.save(fileItemDo);
         return fileItemDo;
     }
+
+    /**
+     * 组装整改汇总文件参数
+     *
+     * @param manageDo
+     * @return
+     */
+    private ProjectSummaryParamExcelDto assembleProjectSummaryParam(ZhcxProjectManageDo manageDo) {
+        // 文件名
+        String fileName = manageDo.getProjectCode().concat(manageDo.getProjectEname());
+
+        //获取项目机号
+        List<String> deviceNumberList = projectDeviceNumberService.getDeviceNumberByProjectId(manageDo.getId());
+
+        //构件
+        List<String> structureList = itpProjectNodesService.getStructureByProjectId(manageDo.getId());
+
+        ProjectSummaryParamExcelDto excelDto = ProjectSummaryParamExcelDto.builder()
+                .deviceNumberList(deviceNumberList)
+                .fileName(fileName)
+                .structureList(structureList)
+                .build();
+        return excelDto;
+    }
+
+    /**
+     * 组装文件
+     *
+     * @param manageDo
+     * @param fileName
+     * @return
+     */
+    private SysFileItemDo assembleFileItem(ZhcxProjectManageDo manageDo, String fileName) {
+        String fileNameTemp = fileName.concat(".xlsx");
+        SysFileItemParamDto itemParamDto = SysFileItemParamDto.builder()
+                .fileName(fileNameTemp)
+                .build();
+        return fileItemService.assembleItem(itemParamDto,  null);
+    }
+
+    /**
+     * 生成汇总文件
+     *
+     * @param excelDto
+     */
+    private void genSummaryExcel(ProjectSummaryParamExcelDto excelDto) {
+        ExcelUtils excelUtils = new ExcelUtils();
+        if(!excelUtils.GetLicense()) {
+            throw new CustomException("license验证失败,请联系管理员!");
+        }
+        // 创建Workbook对象
+        Workbook workbook = new Workbook();
+
+        WorksheetSummaryDto summaryDto = getWorksheet0Param(workbook);
+        int totalColumns = 0;
+
+        //普通标题
+        totalColumns = addNormalTitle(summaryDto, excelDto, totalColumns);
+        //添加机号标题
+        totalColumns = addMachineTitle(summaryDto, excelDto, totalColumns);
+        //添加主标题
+        addMainTitle(summaryDto, excelDto, totalColumns);
+
+        try {
+            workbook.save(excelDto.getFullPathFile());
+        } catch (Exception e) {
+            log.error("文件保存失败,{}", e);
+            throw new CustomException("文件保存失败");
+        }
+    }
+
+    /**
+     * 获取第一个工作簿参数
+     *
+     * @param workbook
+     * @return
+     */
+    private WorksheetSummaryDto getWorksheet0Param(Workbook workbook) {
+        //公共样式
+        Style commonStyle = createCommonStyle(workbook);
+
+        Worksheet worksheet = workbook.getWorksheets().get(0);
+
+        // 访问第一个工作表
+        Cells cells = worksheet.getCells();
+
+        return WorksheetSummaryDto.builder()
+                .worksheet(worksheet)
+                .cells(cells)
+                .commonStyle(commonStyle)
+                .build();
+    }
+
+    /**
+     * 添加主标题
+     *
+     * @param summaryDto
+     * @param excelDto
+     * @param totalColumns
+     * @return
+     */
+    private int addMainTitle(WorksheetSummaryDto summaryDto, ProjectSummaryParamExcelDto excelDto, int totalColumns) {
+        Range range = summaryDto.getCells().createRange(0, 0, 1, totalColumns);
+        range.setStyle(summaryDto.getCommonStyle());
+        range.merge();
+        Cell cell = summaryDto.getCells().get(0, 0);
+        cell.setValue(excelDto.getFileName());
+
+        return totalColumns;
+    }
+
+    /**
+     * 添加正常标题
+     *
+     * @param summaryDto
+     * @param excelDto
+     * @param totalColumns
+     * @return
+     */
+    private int addNormalTitle(WorksheetSummaryDto summaryDto, ProjectSummaryParamExcelDto excelDto, int totalColumns) {
+        List<CellChangeInfoDto> normalTitleCellList = ProjectSummaryExcelHelp.getNormalTitleCellList();
+        for (CellChangeInfoDto normal : normalTitleCellList) {
+            //单元格合并
+            Range range = summaryDto.getCells().createRange(normal.getRangeCellName());
+            range.setStyle(summaryDto.getCommonStyle());
+            range.merge();
+
+            Cell cell10 = summaryDto.getCells().get(normal.getCellName());
+            cell10.setValue(normal.getValue());
+            totalColumns++;
+        }
+
+        //部位添加下拉框
+        CellArea area = new CellArea();
+        area.StartRow = 3;
+        area.EndRow = 1000;
+        area.StartColumn = 2;
+        area.EndColumn = 1;
+        int validations = summaryDto.getWorksheet().getValidations().add(area);
+        Validation validation = summaryDto.getWorksheet().getValidations().get(validations);
+        // 创建一个Validation对象
+        // 设置Validation的类型为下拉列表
+        validation.setType(ValidationType.LIST);
+        // 设置Validation的输入消息和错误消息
+        // 设置Validation的有效条件,即下拉列表的选项
+        validation.setFormula1(String.join(",", excelDto.getStructureList()));
+
+        return totalColumns;
+    }
+
+    /**
+     * 添加机号标题
+     *
+     * @param summaryDto
+     * @param excelDto
+     * @param totalColumns
+     * @return
+     */
+    private int addMachineTitle(WorksheetSummaryDto summaryDto, ProjectSummaryParamExcelDto excelDto, int totalColumns) {
+        //机号
+        for(String deviceNumber : excelDto.getDeviceNumberList()) {
+            Range range = summaryDto.getCells().createRange(1, totalColumns, 1, 4);
+            range.setStyle(summaryDto.getCommonStyle());
+            range.merge();
+
+            Cell macchineCell = summaryDto.getCells().get(1, totalColumns);
+            macchineCell.setValue(deviceNumber);
+
+            //机号下标题
+            for(String title : ProjectSummaryExcelHelp.getMachineTitles()) {
+                Cell macchineTitleCell = summaryDto.getCells().get(2, totalColumns);
+                macchineTitleCell.setStyle(summaryDto.getCommonStyle());
+                macchineTitleCell.setValue(title);
+                totalColumns++;
+            }
+
+        }
+
+        return totalColumns;
+    }
+
+    /**
+     * 创建公共样式
+     *
+     * @param workbook
+     * @return
+     */
+    private Style createCommonStyle(Workbook workbook) {
+        Style style1 = workbook.createStyle();
+        style1.setHorizontalAlignment(TextAlignmentType.CENTER);
+        style1.setVerticalAlignment(TextAlignmentType.CENTER);
+        style1.setLocked(true);
+        //上边线
+        Border topBorder = style1.getBorders().getByBorderType(BorderType.TOP_BORDER);
+        topBorder.setColor(Color.getBlack());
+        topBorder.setLineStyle(CellBorderType.THIN);
+        //下边线
+        Border bottomBorder = style1.getBorders().getByBorderType(BorderType.BOTTOM_BORDER);
+        bottomBorder.setColor(Color.getBlack());
+        bottomBorder.setLineStyle(CellBorderType.THIN);
+
+        //左边线
+        Border leftBorder = style1.getBorders().getByBorderType(BorderType.LEFT_BORDER);
+        leftBorder.setColor(Color.getBlack());
+        leftBorder.setLineStyle(CellBorderType.THIN);
+
+        //右边线
+        Border rightBorder = style1.getBorders().getByBorderType(BorderType.RIGHT_BORDER);
+        rightBorder.setColor(Color.getBlack());
+        rightBorder.setLineStyle(CellBorderType.THIN);
+        return style1;
+    }
 }

+ 63 - 0
business-common/src/main/java/com/rongwei/bscommon/sys/utils/ProjectSummaryExcelHelp.java

@@ -0,0 +1,63 @@
+package com.rongwei.bscommon.sys.utils;
+
+import com.rongwei.bsentity.dto.project.CellChangeInfoDto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ProjectSummaryExcelHelp {
+
+    /**
+     * 普通标题
+     */
+    private static final List<CellChangeInfoDto> normalTitleCellList = new ArrayList<>();
+
+    /**
+     * 机号标题
+     */
+    private static final String[] machineTitles = {"状态", "施工部门", "责任部门", "完成日期"};
+
+    static {
+        normalTitleCellList.add(CellChangeInfoDto.builder()
+                .cellName("A2")
+                .value("总序号")
+                .rangeCellName("A2:A3")
+                .build());
+
+        normalTitleCellList.add(CellChangeInfoDto.builder()
+                .cellName("B2")
+                .value("监理编号")
+                .rangeCellName("B2:B3")
+                .build());
+
+        normalTitleCellList.add(CellChangeInfoDto.builder()
+                .cellName("C2")
+                .value("部位")
+                .rangeCellName("C2:C3")
+                .build());
+
+        normalTitleCellList.add(CellChangeInfoDto.builder()
+                .cellName("D2")
+                .value("内容")
+                .rangeCellName("D2:D3")
+                .build());
+    }
+
+    /**
+     * 获取普通标题
+     *
+     * @return
+     */
+    public static List<CellChangeInfoDto> getNormalTitleCellList() {
+        return normalTitleCellList;
+    }
+
+    /**
+     * 获取机号标题
+     *
+     * @return
+     */
+    public static String[] getMachineTitles() {
+        return machineTitles;
+    }
+}

+ 27 - 0
business-entity/src/main/java/com/rongwei/bsentity/dto/project/CellChangeInfoDto.java

@@ -0,0 +1,27 @@
+package com.rongwei.bsentity.dto.project;
+
+import com.aspose.cells.Style;
+import lombok.*;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class CellChangeInfoDto {
+
+    /**
+     * 单元格名,如:A1
+     */
+    private String cellName;
+
+    /**
+     * 合并单元格名称,如:A2:B3
+     */
+    private String rangeCellName;
+
+    /**
+     * 单元格值
+     */
+    private String value;
+}

+ 33 - 0
business-entity/src/main/java/com/rongwei/bsentity/dto/project/ProjectSummaryParamExcelDto.java

@@ -0,0 +1,33 @@
+package com.rongwei.bsentity.dto.project;
+
+import lombok.*;
+
+import java.util.List;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class ProjectSummaryParamExcelDto {
+
+    /**
+     * 文件名,不带后缀名
+     */
+    private String fileName;
+
+    /**
+     * 完整文件路径
+     */
+    private String fullPathFile;
+
+    /**
+     * 机号列表
+     */
+    private List<String> deviceNumberList;
+
+    /**
+     * 构件名称
+     */
+    private List<String> structureList;
+}

+ 29 - 0
business-entity/src/main/java/com/rongwei/bsentity/dto/project/WorksheetSummaryDto.java

@@ -0,0 +1,29 @@
+package com.rongwei.bsentity.dto.project;
+
+import com.aspose.cells.Cells;
+import com.aspose.cells.Style;
+import com.aspose.cells.Worksheet;
+import lombok.*;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class WorksheetSummaryDto {
+
+    /**
+     * 工作簿sheet
+     */
+    private Worksheet worksheet;
+
+    /**
+     * 单元格
+     */
+    private Cells cells;
+
+    /**
+     * 公共样式
+     */
+    private Style commonStyle;
+}