BUG修改
This commit is contained in:
		| @ -1,5 +1,6 @@ | |||||||
| package org.dromara.bidding.domain.bo; | package org.dromara.bidding.domain.bo; | ||||||
|  |  | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
| import org.dromara.bidding.domain.BusBiddingLimitList; | import org.dromara.bidding.domain.BusBiddingLimitList; | ||||||
| import org.dromara.common.mybatis.core.domain.BaseEntity; | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
| import org.dromara.common.core.validate.AddGroup; | import org.dromara.common.core.validate.AddGroup; | ||||||
| @ -91,4 +92,6 @@ public class BusBiddingLimitListBo extends BaseEntity { | |||||||
|     private String remark; |     private String remark; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     private Long type; | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -182,7 +182,7 @@ public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitL | |||||||
|     @Override |     @Override | ||||||
|     public List<BusBiddingLimitListVo> getTree(BusBiddingLimitListBo bo) { |     public List<BusBiddingLimitListVo> getTree(BusBiddingLimitListBo bo) { | ||||||
|         BusBiddingLimitVersions biddingLimitVersions =  busBiddingLimitVersionsService.queryByProjectId(bo.getVersions(),bo.getProjectId()); |         BusBiddingLimitVersions biddingLimitVersions =  busBiddingLimitVersionsService.queryByProjectId(bo.getVersions(),bo.getProjectId()); | ||||||
|         if (biddingLimitVersions == null || !BusinessStatusEnum.FINISH.getStatus().equals(biddingLimitVersions.getStatus())) { |         if (biddingLimitVersions == null || (bo.getType() == 1L && !BusinessStatusEnum.FINISH.getStatus().equals(biddingLimitVersions.getStatus()))) { | ||||||
|             return null; |             return null; | ||||||
|         } |         } | ||||||
|         //获取所有数据 |         //获取所有数据 | ||||||
| @ -248,7 +248,7 @@ public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitL | |||||||
|                 file,          // 上传的文件 |                 file,          // 上传的文件 | ||||||
|                 1,             // 跳过1行(表头) |                 1,             // 跳过1行(表头) | ||||||
|                 0,             // 从第0列开始 |                 0,             // 从第0列开始 | ||||||
|                 12,             // 到第12列结束 |                 13,             // 到第12列结束 | ||||||
|                 BusBiddingLimitListBo.class // 目标实体类 |                 BusBiddingLimitListBo.class // 目标实体类 | ||||||
|             ); |             ); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ package org.dromara.design.controller; | |||||||
| import cn.dev33.satoken.annotation.SaCheckPermission; | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
| import cn.hutool.core.bean.BeanUtil; | import cn.hutool.core.bean.BeanUtil; | ||||||
| import jakarta.annotation.Resource; | import jakarta.annotation.Resource; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
| import jakarta.validation.constraints.NotEmpty; | import jakarta.validation.constraints.NotEmpty; | ||||||
| import jakarta.validation.constraints.NotNull; | import jakarta.validation.constraints.NotNull; | ||||||
| import org.apache.poi.hssf.usermodel.HSSFWorkbook; | import org.apache.poi.hssf.usermodel.HSSFWorkbook; | ||||||
| @ -155,6 +156,17 @@ public class DesVolumeCatalogController extends BaseController { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 收资清单模板导出 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("design:collect:exportExcel") | ||||||
|  |     @Log(title = "收资清单", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/exportExcel") | ||||||
|  |     public void exportExcelByProjectId(@RequestParam("projectId") Long projectId, HttpServletResponse response){ | ||||||
|  |         desVolumeCatalogService.exportExcelByProjectId(projectId, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 导入卷册目录 |      * 导入卷册目录 | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ package org.dromara.design.service; | |||||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
| import com.baomidou.mybatisplus.extension.service.IService; | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
| import org.dromara.common.mybatis.core.page.PageQuery; | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
| import org.dromara.design.domain.DesVolumeCatalog; | import org.dromara.design.domain.DesVolumeCatalog; | ||||||
| @ -120,4 +121,5 @@ public interface IDesVolumeCatalogService extends IService<DesVolumeCatalog> { | |||||||
|      */ |      */ | ||||||
|     List<DesVolumeCatalogVo> catalogList(Long projectId); |     List<DesVolumeCatalogVo> catalogList(Long projectId); | ||||||
|  |  | ||||||
|  |     void exportExcelByProjectId(Long projectId, HttpServletResponse response); | ||||||
| } | } | ||||||
|  | |||||||
| @ -33,7 +33,6 @@ import org.dromara.common.oss.factory.OssFactory; | |||||||
| import org.dromara.common.utils.DocumentUtil; | import org.dromara.common.utils.DocumentUtil; | ||||||
| import org.dromara.design.constant.DesDesignConstant; | import org.dromara.design.constant.DesDesignConstant; | ||||||
| import org.dromara.design.domain.DesDesignChange; | import org.dromara.design.domain.DesDesignChange; | ||||||
| import org.dromara.design.domain.DesDrawing; |  | ||||||
| import org.dromara.design.domain.DesVolumeCatalog; | import org.dromara.design.domain.DesVolumeCatalog; | ||||||
| import org.dromara.design.domain.DesVolumeFile; | import org.dromara.design.domain.DesVolumeFile; | ||||||
| import org.dromara.design.domain.dto.designchange.DesDesignChangeCreateReq; | import org.dromara.design.domain.dto.designchange.DesDesignChangeCreateReq; | ||||||
| @ -42,10 +41,8 @@ import org.dromara.design.domain.dto.designchange.DesDesignChangeUpdateReq; | |||||||
| import org.dromara.design.domain.dto.designchange.DesDesignExtendDetailDto; | import org.dromara.design.domain.dto.designchange.DesDesignExtendDetailDto; | ||||||
| import org.dromara.design.domain.vo.BusDrawingreviewReceiptsVo; | import org.dromara.design.domain.vo.BusDrawingreviewReceiptsVo; | ||||||
| import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; | import org.dromara.design.domain.vo.designchange.DesDesignChangeVo; | ||||||
| import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; |  | ||||||
| import org.dromara.design.mapper.DesDesignChangeMapper; | import org.dromara.design.mapper.DesDesignChangeMapper; | ||||||
| import org.dromara.design.service.*; | import org.dromara.design.service.*; | ||||||
| import org.dromara.facility.domain.FacMatrix; |  | ||||||
| import org.dromara.project.service.IBusProjectService; | import org.dromara.project.service.IBusProjectService; | ||||||
| import org.dromara.system.domain.vo.SysOssVo; | import org.dromara.system.domain.vo.SysOssVo; | ||||||
| import org.dromara.system.service.ISysOssService; | import org.dromara.system.service.ISysOssService; | ||||||
| @ -655,10 +652,12 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe | |||||||
|                     .eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) |                     .eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT) | ||||||
|                     .orderByDesc(DesVolumeFile::getVersion) |                     .orderByDesc(DesVolumeFile::getVersion) | ||||||
|                 ); |                 ); | ||||||
|  |                 String version = "1.0"; | ||||||
|  |                 if (CollUtil.isNotEmpty(list)) { | ||||||
|                     String lastVersion = list.getFirst().getVersion(); |                     String lastVersion = list.getFirst().getVersion(); | ||||||
|                     int majorVersion = (int) Math.floor(Double.parseDouble(lastVersion)) + 1; |                     int majorVersion = (int) Math.floor(Double.parseDouble(lastVersion)) + 1; | ||||||
|                 String version = majorVersion + ".0"; |                     version = majorVersion + ".0"; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|                 for (SysOssVo ossVo : ossVoList1) { |                 for (SysOssVo ossVo : ossVoList1) { | ||||||
|                     DesVolumeFile desVolumeFile = new DesVolumeFile(); |                     DesVolumeFile desVolumeFile = new DesVolumeFile(); | ||||||
| @ -721,7 +720,6 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe | |||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) |      * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) | ||||||
|      * 正常使用只需#processEvent.flowCode=='leave1' |      * 正常使用只需#processEvent.flowCode=='leave1' | ||||||
|  | |||||||
| @ -6,7 +6,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
| import jakarta.annotation.Resource; | import jakarta.annotation.Resource; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.apache.poi.ss.usermodel.*; | ||||||
|  | import org.apache.poi.ss.util.CellRangeAddressList; | ||||||
|  | import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||||||
| import org.dromara.cailiaoshebei.domain.BusCailiaoshebeiPici; | import org.dromara.cailiaoshebei.domain.BusCailiaoshebeiPici; | ||||||
| import org.dromara.common.core.constant.HttpStatus; | import org.dromara.common.core.constant.HttpStatus; | ||||||
| import org.dromara.common.core.domain.R; | import org.dromara.common.core.domain.R; | ||||||
| @ -21,16 +25,16 @@ import org.dromara.common.mybatis.core.page.PageQuery; | |||||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
| import org.dromara.common.satoken.utils.LoginHelper; | import org.dromara.common.satoken.utils.LoginHelper; | ||||||
| import org.dromara.design.domain.*; | import org.dromara.design.domain.*; | ||||||
|  | import org.dromara.design.domain.bo.DesUserBo; | ||||||
| import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; | import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; | ||||||
| import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; | import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; | ||||||
| import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; | import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; | ||||||
|  | import org.dromara.design.domain.vo.DesUserVo; | ||||||
| import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; | import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; | ||||||
| import org.dromara.design.mapper.DesVolumeCatalogMapper; | import org.dromara.design.mapper.DesVolumeCatalogMapper; | ||||||
| import org.dromara.design.service.IDesDrawingService; | import org.dromara.design.service.*; | ||||||
| import org.dromara.design.service.IDesVolumeCatalogService; |  | ||||||
| import org.dromara.design.service.IDesVolumeFileService; |  | ||||||
| import org.dromara.design.service.IDesVolumeFileViewerService; |  | ||||||
| import org.dromara.project.service.IBusProjectService; | import org.dromara.project.service.IBusProjectService; | ||||||
|  | import org.dromara.system.domain.SysUser; | ||||||
| import org.dromara.system.domain.vo.SysUserVo; | import org.dromara.system.domain.vo.SysUserVo; | ||||||
| import org.dromara.system.service.ISysUserService; | import org.dromara.system.service.ISysUserService; | ||||||
| import org.springframework.beans.BeanUtils; | import org.springframework.beans.BeanUtils; | ||||||
| @ -39,6 +43,9 @@ import org.springframework.context.event.EventListener; | |||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.net.URLEncoder; | ||||||
|  | import java.nio.charset.StandardCharsets; | ||||||
| import java.util.*; | import java.util.*; | ||||||
| import java.util.function.Function; | import java.util.function.Function; | ||||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||||
| @ -70,6 +77,9 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMap | |||||||
|     @Resource |     @Resource | ||||||
|     protected IDesDrawingService drawingService; |     protected IDesDrawingService drawingService; | ||||||
|  |  | ||||||
|  |     @Resource | ||||||
|  |     private IDesUserService desUserService; | ||||||
|  |  | ||||||
|  |  | ||||||
|     @Lazy |     @Lazy | ||||||
|     @Resource |     @Resource | ||||||
| @ -354,6 +364,93 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMap | |||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void exportExcelByProjectId(Long projectId, HttpServletResponse response) { | ||||||
|  |         DesUserBo desUserBo = new DesUserBo(); | ||||||
|  |         desUserBo.setProjectId(projectId); | ||||||
|  |         Map<String, List<String>> majorToNames = new HashMap<>(); | ||||||
|  |         List<DesUserVo> desUserVos = desUserService.queryList(desUserBo); | ||||||
|  |         List<DesUserVo> uniqueMajors = new ArrayList<>(desUserVos.stream() | ||||||
|  |             .collect(Collectors.toMap( | ||||||
|  |                 DesUserVo::getUserMajor, | ||||||
|  |                 user -> user, | ||||||
|  |                 (existing, replacement) -> existing | ||||||
|  |             )) | ||||||
|  |             .values()); | ||||||
|  |         uniqueMajors.forEach(desUserVo -> { | ||||||
|  |             desUserBo.setUserMajor(desUserVo.getUserMajor()); | ||||||
|  |             List<DesUserVo> desUserVos1 = desUserService.queryList(desUserBo); | ||||||
|  |             List<String> names = desUserVos1.stream() | ||||||
|  |                 .map(DesUserVo::getUserName) | ||||||
|  |                 .collect(Collectors.toList()); | ||||||
|  |             majorToNames.put(desUserVo.getUserMajorName(), names); | ||||||
|  |         }); | ||||||
|  |         //TODO 数据绑定下拉 | ||||||
|  | //        String[] namesArray = names.toArray(String[]::new); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         // 2. 设置响应头 | ||||||
|  |         // 设置响应头,指定Excel格式和下载文件名 | ||||||
|  |         response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); | ||||||
|  |         response.setCharacterEncoding("utf-8"); | ||||||
|  |         response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode("收资清单模板.xlsx", StandardCharsets.UTF_8)); | ||||||
|  |  | ||||||
|  |         Workbook workbook = new XSSFWorkbook(); | ||||||
|  |         // 创建主 Sheet 和隐藏 Sheet | ||||||
|  |         Sheet mainSheet = workbook.createSheet("收资清单模板"); | ||||||
|  |         Sheet dropdownSheet = workbook.createSheet("DropdownData"); | ||||||
|  |         workbook.setSheetHidden(workbook.getSheetIndex(dropdownSheet), true); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         //设置下拉列表数据 | ||||||
|  | //        for (int i = 0; i < namesArray.length; i++) { | ||||||
|  | //            dropdownSheet.createRow(i).createCell(1).setCellValue(namesArray[i]); // 存到B列 | ||||||
|  | //        } | ||||||
|  | //        int rowIdx = 0; | ||||||
|  | //        for (Map.Entry<Long, String> entry : userIdToNameMapByDept.entrySet()) { | ||||||
|  | //            Row row = dropdownSheet.createRow(rowIdx++); | ||||||
|  | //            row.createCell(0).setCellValue(entry.getKey().toString()); | ||||||
|  | //            row.createCell(1).setCellValue(entry.getValue()); | ||||||
|  | //        } | ||||||
|  |  | ||||||
|  |         // 主 Sheet 设置表头 | ||||||
|  |         Row sheetRow = mainSheet.createRow(0); | ||||||
|  |         sheetRow.createCell(0).setCellValue("子项名称"); | ||||||
|  |         sheetRow.createCell(1).setCellValue("卷册号"); | ||||||
|  |         sheetRow.createCell(2).setCellValue("资料名称"); | ||||||
|  |         sheetRow.createCell(3).setCellValue("计划出图时间"); | ||||||
|  |         sheetRow.createCell(4).setCellValue("专业"); | ||||||
|  |         sheetRow.createCell(5).setCellValue("人员"); | ||||||
|  |  | ||||||
|  |         // 核心:锁定表头(第1行)和前1列(包含ID列) | ||||||
|  |         mainSheet.createFreezePane(0, 1, 0, 0); | ||||||
|  |  | ||||||
|  |         // 绑定下拉列表(关联隐藏 Sheet) | ||||||
|  |         DataValidationHelper helper = mainSheet.getDataValidationHelper(); //为主Sheet第二列设置下拉列表(关联隐藏Sheet的B列) | ||||||
|  | //        String range = "DropdownData!$B$1:$B$" + namesArray.length; //引用隐藏Sheet的B列数据范围:DropdownData!$B$1:$B$ | ||||||
|  | //        DataValidationConstraint constraint = helper.createFormulaListConstraint(range); //创建下拉约束 | ||||||
|  |         CellRangeAddressList addressList = new CellRangeAddressList(1, 300, 1, 1); // 支持100行数据 | ||||||
|  |         //添加验证规则 | ||||||
|  | //        DataValidation validation = helper.createValidation(constraint, addressList); | ||||||
|  | //        validation.setShowErrorBox(true); | ||||||
|  | //        mainSheet.addValidationData(validation); | ||||||
|  |  | ||||||
|  |         // 调整列宽 | ||||||
|  |         mainSheet.setColumnWidth(0, 20 * 256); | ||||||
|  |         mainSheet.setColumnWidth(1, 20 * 100); | ||||||
|  |         mainSheet.setColumnWidth(2, 20 * 200); | ||||||
|  |         mainSheet.setColumnWidth(3, 20 * 200); | ||||||
|  |  | ||||||
|  |         // 直接写入响应输出流 | ||||||
|  |         try { | ||||||
|  |             workbook.write(response.getOutputStream()); | ||||||
|  |             workbook.close(); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             throw new RuntimeException(e); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) |      * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) | ||||||
|      * 正常使用只需#processEvent.flowCode=='leave1' |      * 正常使用只需#processEvent.flowCode=='leave1' | ||||||
|  | |||||||
| @ -375,6 +375,9 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl<BusBiddingPlanMapper, | |||||||
|         // 为每个子节点递归设置其下一级子节点 |         // 为每个子节点递归设置其下一级子节点 | ||||||
|         for (BusBillofquantitiesLimitListVo child : children) { |         for (BusBillofquantitiesLimitListVo child : children) { | ||||||
|             // 递归查询当前子节点的子节点,设置为它的子树 |             // 递归查询当前子节点的子节点,设置为它的子树 | ||||||
|  |             if ("0".equals(child.getSid()) && "0".equals(child.getPid())){ | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|             List<BusBillofquantitiesLimitListVo> subChildren = buildTree(child.getSid(), parentMap); |             List<BusBillofquantitiesLimitListVo> subChildren = buildTree(child.getSid(), parentMap); | ||||||
|             // 注意:需要在Vo中添加子节点列表字段,用于存储子树 |             // 注意:需要在Vo中添加子节点列表字段,用于存储子树 | ||||||
|             child.setChildren(subChildren); |             child.setChildren(subChildren); | ||||||
|  | |||||||
| @ -245,7 +245,7 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill | |||||||
|             file,          // 上传的文件 |             file,          // 上传的文件 | ||||||
|             1,             // 跳过1行(表头) |             1,             // 跳过1行(表头) | ||||||
|             0,             // 从第0列开始 |             0,             // 从第0列开始 | ||||||
|             13,             // 到第5列结束 |             14,             // 到第5列结束 | ||||||
|             BusBillofquantitiesLimitListBo.class // 目标实体类 |             BusBillofquantitiesLimitListBo.class // 目标实体类 | ||||||
|         ); |         ); | ||||||
|         List<BusBillofquantitiesLimitList> busBillofquantities = new ArrayList<BusBillofquantitiesLimitList>(); |         List<BusBillofquantitiesLimitList> busBillofquantities = new ArrayList<BusBillofquantitiesLimitList>(); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user