BUG修改

This commit is contained in:
2025-09-03 20:36:55 +08:00
parent f1aed20560
commit 2f0b548f20
8 changed files with 147 additions and 32 deletions

View File

@ -1,5 +1,6 @@
package org.dromara.bidding.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.bidding.domain.BusBiddingLimitList;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
@ -91,4 +92,6 @@ public class BusBiddingLimitListBo extends BaseEntity {
private String remark;
private Long type;
}

View File

@ -182,7 +182,7 @@ public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitL
@Override
public List<BusBiddingLimitListVo> getTree(BusBiddingLimitListBo bo) {
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;
}
//获取所有数据
@ -248,7 +248,7 @@ public class BusBiddingLimitListServiceImpl extends ServiceImpl<BusBiddingLimitL
file, // 上传的文件
1, // 跳过1行表头
0, // 从第0列开始
12, // 到第12列结束
13, // 到第12列结束
BusBiddingLimitListBo.class // 目标实体类
);
} catch (Exception e) {

View File

@ -3,6 +3,7 @@ package org.dromara.design.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
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);
}
/**
* 导入卷册目录

View File

@ -3,6 +3,7 @@ package org.dromara.design.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.TableDataInfo;
import org.dromara.design.domain.DesVolumeCatalog;
@ -120,4 +121,5 @@ public interface IDesVolumeCatalogService extends IService<DesVolumeCatalog> {
*/
List<DesVolumeCatalogVo> catalogList(Long projectId);
void exportExcelByProjectId(Long projectId, HttpServletResponse response);
}

View File

@ -33,7 +33,6 @@ import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.utils.DocumentUtil;
import org.dromara.design.constant.DesDesignConstant;
import org.dromara.design.domain.DesDesignChange;
import org.dromara.design.domain.DesDrawing;
import org.dromara.design.domain.DesVolumeCatalog;
import org.dromara.design.domain.DesVolumeFile;
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.vo.BusDrawingreviewReceiptsVo;
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.service.*;
import org.dromara.facility.domain.FacMatrix;
import org.dromara.project.service.IBusProjectService;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysOssService;
@ -117,7 +114,7 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe
vo.setExtendDetail(JSONUtil.toBean(designChange.getDetail(), DesDesignExtendDetailDto.class));
BusDrawingreviewReceiptsVo infoByReviewId = drawingreviewReceiptsService.getInfoByReviewId(designChange.getId());
if(infoByReviewId != null && infoByReviewId.getApproveId()!=null){
if (infoByReviewId != null && infoByReviewId.getApproveId() != null) {
vo.setIsWindow(false);
}
@ -475,15 +472,15 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe
List<DesDesignChangeVo> designChangeVoList = designChangeList.stream().map(designChange -> {
DesDesignChangeVo designChangeVo = new DesDesignChangeVo();
BeanUtils.copyProperties(designChange, designChangeVo);
String fileId = designChangeVo.getFileId();
if (fileId != null) {
String[] split = fileId.split(",");
List<Long> fileIds = Arrays.stream(split)
.map(Long::valueOf)
.collect(Collectors.toList());
List<SysOssVo> ossVoList1 = ossService.listByIds(fileIds);
designChangeVo.setOssVoList(ossVoList1);
}
String fileId = designChangeVo.getFileId();
if (fileId != null) {
String[] split = fileId.split(",");
List<Long> fileIds = Arrays.stream(split)
.map(Long::valueOf)
.collect(Collectors.toList());
List<SysOssVo> ossVoList1 = ossService.listByIds(fileIds);
designChangeVo.setOssVoList(ossVoList1);
}
return designChangeVo;
}).toList();
designChangeVoPage.setRecords(designChangeVoList);
@ -615,25 +612,25 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe
if (processEvent.getSubmit()) {
designChange.setAuditStatus(BusinessStatusEnum.WAITING.getStatus());
}
if(BusinessStatusEnum.FINISH.getStatus().equals(processEvent.getStatus())){
if (BusinessStatusEnum.FINISH.getStatus().equals(processEvent.getStatus())) {
DesDesignExtendDetailDto bean = JSONUtil.toBean(designChange.getDetail(), DesDesignExtendDetailDto.class);
DesVolumeCatalog volumeCatalog = volumeCatalogService.getOne(Wrappers.<DesVolumeCatalog>lambdaQuery()
.eq(DesVolumeCatalog::getVolumeNumber, designChange.getVolumeNo())
.eq(DesVolumeCatalog::getProjectId, designChange.getProjectId())
.last("limit 1"));
if("1".equals(bean.getDesignDisposal())){
if ("1".equals(bean.getDesignDisposal())) {
volumeFileService.lambdaUpdate()
.set(DesVolumeFile::getType, DesVolumeFile.WASTE)
.eq(DesVolumeFile::getType,DesVolumeFile.BLUEPRINT)
.eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT)
.eq(DesVolumeFile::getVolumeCatalogId, volumeCatalog.getDesign())
.update();
}else if("2".equals(bean.getDesignDisposal())){
LambdaUpdateWrapper<DesVolumeFile> wrapper = new LambdaUpdateWrapper<>();
} else if ("2".equals(bean.getDesignDisposal())) {
LambdaUpdateWrapper<DesVolumeFile> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(DesVolumeFile::getType, DesVolumeFile.WASTE)
.eq(DesVolumeFile::getVolumeCatalogId, volumeCatalog.getDesign());
String saveFile = designChange.getSaveFile();
if(StringUtils.isNotBlank(saveFile)){
if (StringUtils.isNotBlank(saveFile)) {
String[] split = saveFile.split(",");
List<Long> fileIds = Arrays.stream(split)
.map(Long::valueOf)
@ -655,10 +652,12 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe
.eq(DesVolumeFile::getType, DesVolumeFile.BLUEPRINT)
.orderByDesc(DesVolumeFile::getVersion)
);
String lastVersion = list.getFirst().getVersion();
int majorVersion = (int) Math.floor(Double.parseDouble(lastVersion)) + 1;
String version = majorVersion + ".0";
String version = "1.0";
if (CollUtil.isNotEmpty(list)) {
String lastVersion = list.getFirst().getVersion();
int majorVersion = (int) Math.floor(Double.parseDouble(lastVersion)) + 1;
version = majorVersion + ".0";
}
for (SysOssVo ossVo : ossVoList1) {
DesVolumeFile desVolumeFile = new DesVolumeFile();
@ -673,7 +672,7 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe
volumeFileService.save(desVolumeFile);
//异步处理二维码
self.addQRCodeToPDF(desVolumeFile.getId(),true)
self.addQRCodeToPDF(desVolumeFile.getId(), true)
.thenAccept(result -> log.info("图纸[{}-{} ]添加二维码成功", desVolumeFile.getFileName(), desVolumeFile.getId()))
.exceptionally(ex -> {
log.error("图纸[{}-{}]添加二维码失败", desVolumeFile.getFileName(), desVolumeFile.getId(), ex);
@ -721,7 +720,6 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe
}
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
* 正常使用只需#processEvent.flowCode=='leave1'

View File

@ -6,7 +6,11 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
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.common.core.constant.HttpStatus;
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.satoken.utils.LoginHelper;
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.DesVolumeCatalogQueryReq;
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.mapper.DesVolumeCatalogMapper;
import org.dromara.design.service.IDesDrawingService;
import org.dromara.design.service.IDesVolumeCatalogService;
import org.dromara.design.service.IDesVolumeFileService;
import org.dromara.design.service.IDesVolumeFileViewerService;
import org.dromara.design.service.*;
import org.dromara.project.service.IBusProjectService;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.service.ISysUserService;
import org.springframework.beans.BeanUtils;
@ -39,6 +43,9 @@ import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
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.function.Function;
import java.util.stream.Collectors;
@ -70,6 +77,9 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMap
@Resource
protected IDesDrawingService drawingService;
@Resource
private IDesUserService desUserService;
@Lazy
@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'

View File

@ -375,6 +375,9 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl<BusBiddingPlanMapper,
// 为每个子节点递归设置其下一级子节点
for (BusBillofquantitiesLimitListVo child : children) {
// 递归查询当前子节点的子节点,设置为它的子树
if ("0".equals(child.getSid()) && "0".equals(child.getPid())){
continue;
}
List<BusBillofquantitiesLimitListVo> subChildren = buildTree(child.getSid(), parentMap);
// 注意需要在Vo中添加子节点列表字段用于存储子树
child.setChildren(subChildren);

View File

@ -245,7 +245,7 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl<BusBill
file, // 上传的文件
1, // 跳过1行表头
0, // 从第0列开始
13, // 到第5列结束
14, // 到第5列结束
BusBillofquantitiesLimitListBo.class // 目标实体类
);
List<BusBillofquantitiesLimitList> busBillofquantities = new ArrayList<BusBillofquantitiesLimitList>();