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; 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;
} }

View File

@ -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) {

View File

@ -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);
}
/** /**
* 导入卷册目录 * 导入卷册目录

View File

@ -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);
} }

View File

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

View File

@ -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);

View File

@ -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>();