优化结构树查询和单行查询导出接口开发

This commit is contained in:
wangqiong
2024-06-24 17:56:23 +08:00
parent e13e7c0bf7
commit 62a8797e5f
11 changed files with 308 additions and 21 deletions
+5
View File
@@ -98,6 +98,11 @@
<artifactId>qomo-kn-cost-manage</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
</dependencyManagement>
+20
View File
@@ -38,6 +38,26 @@
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>4.0.1</version> <!-- 请检查并使用最新稳定版本 -->
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
</dependencies>
</project>
@@ -1,23 +1,35 @@
package com.zzsmart.qomo.kn.cost.manage.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.gson.JsonObject;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardVersion;
import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
import com.zzsmart.qomo.kn.cost.manage.service.ICostStandardVersionService;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailSearch;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static com.zzsmart.qomo.kn.cost.manage.util.EasyExcelUtil.getExcelPropertyAnnotatedFields;
import static com.zzsmart.qomo.kn.cost.manage.util.EasyExcelUtil.getIncludeFields;
/**
* <p>
@@ -58,11 +70,12 @@ public class CostStandardDetailController extends JeecgController<CostStandardDe
* 导出excel
*
* @param request
* @param costStandardDetail
* @param costStandardDetailSearch
*/
@RequestMapping(value = "/exportXls", method = RequestMethod.GET)
@ApiOperation(value = "单行查询导出", notes = "单行查询导出")
public ModelAndView exportXls(HttpServletRequest request, CostStandardDetail costStandardDetail) {
return super.exportXls(request, costStandardDetail, CostStandardDetail.class, "单行查询");
public Result exportXls(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch) throws IOException {
JSONObject result = costStandardDetailService.exportExcel(request, response, costStandardDetailSearch);
return Result.OK(result);
}
}
@@ -1,5 +1,6 @@
package com.zzsmart.qomo.kn.cost.manage.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -9,10 +10,7 @@ import java.math.BigDecimal;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.*;
import lombok.experimental.Accessors;
/**
@@ -26,6 +24,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
@TableName("cost_standard_detail")
@EqualsAndHashCode
public class CostStandardDetail implements Serializable {
private static final long serialVersionUID = 1L;
@@ -41,6 +40,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("material_number")
@ApiModelProperty(value = "物料号,关联kn_new_sap_mara表matnr字段")
@ExcelProperty("物料号")
private String materialNumber;
/**
@@ -48,6 +48,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("material_name")
@ApiModelProperty(value = "物料名称")
@ExcelProperty("物料名称")
private String materialName;
/**
@@ -55,6 +56,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("parent_material_number")
@ApiModelProperty(value = "父类物料号")
@ExcelProperty("父类物料号")
private String parentMaterialNumber;
/**
@@ -69,6 +71,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("level")
@ApiModelProperty(value = "层级")
@ExcelProperty("层级")
private Integer level;
/**
@@ -76,6 +79,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("figure_number")
@ApiModelProperty(value = "图号")
@ExcelProperty("图号")
private String figureNumber;
/**
@@ -83,6 +87,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("dosage")
@ApiModelProperty(value = "用量")
@ExcelProperty("用量")
private Double dosage;
/**
@@ -90,6 +95,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("unit")
@ApiModelProperty(value = "单位")
@ExcelProperty("单位")
private String unit;
/**
@@ -97,6 +103,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("specification")
@ApiModelProperty(value = "规格")
@ExcelProperty("规格")
private String specification;
/**
@@ -104,6 +111,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("bom_cost")
@ApiModelProperty(value = "bom材料费")
@ExcelProperty("bom材料费")
private BigDecimal bomCost;
/**
@@ -111,6 +119,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("packing_cost")
@ApiModelProperty(value = "包装费")
@ExcelProperty("包装费")
private BigDecimal packingCost;
/**
@@ -118,6 +127,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("auxiliary_cost")
@ApiModelProperty(value = "本阶辅料费")
@ExcelProperty("本阶辅料费")
private BigDecimal auxiliaryCost;
/**
@@ -125,6 +135,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("labor_cost")
@ApiModelProperty(value = "本阶人工费")
@ExcelProperty("本阶人工费")
private BigDecimal laborCost;
/**
@@ -132,6 +143,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("euip_depreciation_cost")
@ApiModelProperty(value = "机器折旧费")
@ExcelProperty("机器折旧费")
private BigDecimal euipDepreciationCost;
/**
@@ -139,6 +151,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("equip_consume_cost")
@ApiModelProperty(value = "机物料消耗费")
@ExcelProperty("机物料消耗费")
private BigDecimal equipConsumeCost;
/**
@@ -146,6 +159,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("hydroelectricity_cost")
@ApiModelProperty(value = "水电费")
@ExcelProperty("水电费")
private BigDecimal hydroelectricityCost;
/**
@@ -153,6 +167,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("other_cost")
@ApiModelProperty(value = "其他制造费")
@ExcelProperty("其他制造费")
private BigDecimal otherCost;
/**
@@ -160,6 +175,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("trail_cost")
@ApiModelProperty(value = "物流费")
@ExcelProperty("物流费")
private BigDecimal trailCost;
/**
@@ -167,6 +183,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("manufacture_cost")
@ApiModelProperty(value = "制造成本")
@ExcelProperty("制造成本")
private BigDecimal manufactureCost;
/**
@@ -174,6 +191,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("total_labor_cost")
@ApiModelProperty(value = "累计人工费")
@ExcelProperty("累计人工费")
private BigDecimal totalLaborCost;
/**
@@ -181,6 +199,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("total_equip_consume_cost")
@ApiModelProperty(value = "累计机器消耗费")
@ExcelProperty("累计机器消耗费")
private BigDecimal totalEquipConsumeCost;
/**
@@ -188,6 +207,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("total_euip_depreciation_cost")
@ApiModelProperty(value = "累计机器折旧费")
@ExcelProperty("累计机器折旧费")
private BigDecimal totalEuipDepreciationCost;
/**
@@ -195,6 +215,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("total_hydroelectricity_cost")
@ApiModelProperty(value = "累计水电费")
@ExcelProperty("累计水电费")
private BigDecimal totalHydroelectricityCost;
/**
@@ -202,6 +223,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("total_other_cost")
@ApiModelProperty(value = "累计其它费用")
@ExcelProperty("累计其它费用")
private BigDecimal totalOtherCost;
/**
@@ -244,6 +266,7 @@ public class CostStandardDetail implements Serializable {
*/
@TableField("sort")
@ApiModelProperty(value = "序号")
@ExcelProperty("序号")
private Integer sort;
}
@@ -1,11 +1,15 @@
package com.zzsmart.qomo.kn.cost.manage.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailSearch;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* <p>
@@ -18,10 +22,20 @@ import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
public interface CostStandardDetailService extends IService<CostStandardDetail> {
/**
* 分页查询
*
* @param page
* @param
* @return
*/
IPage<CostStandardDetailVO> pageList(Page<CostStandardDetailVO> page, CostStandardDetailVO costStandard);
/**
* 导出列表信息为Excel文件
*
* @param request
* @param response
* @param costStandardDetailSearch
* @return
*/
JSONObject exportExcel(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch);
}
@@ -49,6 +49,16 @@ public class BomTreeServiceImpl implements BomTreeService {
wrapper1.like("parent_material_number", materialNumber1);
}
List<CostStandardDetail> costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
//第三层叶子节点
List<CostStandardDetail> threeNodes=new ArrayList<>();
if(costStandardDetails!=null&&costStandardDetails.size()>0){
List<String> materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList());
QueryWrapper<CostStandardDetail> wrapper2 = new QueryWrapper<>();
wrapper2.in("parent_material_number", materialNoList);
threeNodes = costStandardDetailMapper.selectList(wrapper2);
}
//把第二层叶子节点转化为bomtreeinfoVO对象集合
costStandardDetailVOS=new ArrayList<>();
for (int i=0;i<costStandardDetails.size();i++){
CostStandardDetail costStandardDetail = costStandardDetails.get(i);
@@ -56,6 +66,13 @@ public class BomTreeServiceImpl implements BomTreeService {
BeanUtils.copyProperties(costStandardDetail,vo);
costStandardDetailVOS.add(vo);
}
//把第三层叶子节点转化为bomtreeinfoVO对象集合
for (int i=0;i<threeNodes.size();i++){
CostStandardDetail costStandardDetail = threeNodes.get(i);
CostStandardDetailVO vo=new CostStandardDetailVO();
BeanUtils.copyProperties(costStandardDetail,vo);
costStandardDetailVOS.add(vo);
}
}
List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
return bomTreeInfoVOS;
@@ -1,18 +1,28 @@
package com.zzsmart.qomo.kn.cost.manage.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailSearch;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
import org.jeecg.common.system.query.QueryGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Set;
import static com.zzsmart.qomo.kn.cost.manage.util.EasyExcelUtil.getIncludeFields;
/**
* <p>
* 标准成本明细表 服务实现类
@@ -26,6 +36,7 @@ public class CostStandardDetailServiceImpl extends ServiceImpl<CostStandardDetai
@Autowired
CostStandardDetailMapper costStandardDetailMapper;
/**
* 分页查询
*
@@ -38,18 +49,36 @@ public class CostStandardDetailServiceImpl extends ServiceImpl<CostStandardDetai
// 查询条件组装
QueryWrapper queryWrapper = new QueryWrapper();
if(costStandard != null){
if (costStandard != null) {
if(StrUtil.isNotEmpty(costStandard.getMaterialNumber()) ){
if (StrUtil.isNotEmpty(costStandard.getMaterialNumber())) {
// 物料号
queryWrapper.like("c1.material_number",costStandard.getMaterialNumber());
queryWrapper.like("c1.material_number", costStandard.getMaterialNumber());
}
if(StrUtil.isNotEmpty(costStandard.getVersionNumber()) ){
if (StrUtil.isNotEmpty(costStandard.getVersionNumber())) {
// 版本号
queryWrapper.like("c2.version_number",costStandard.getVersionNumber());
queryWrapper.like("c2.version_number", costStandard.getVersionNumber());
}
}
return (IPage<CostStandardDetailVO>) costStandardDetailMapper.pageList(page,queryWrapper);
return (IPage<CostStandardDetailVO>) costStandardDetailMapper.pageList(page, queryWrapper);
}
@Override
public JSONObject exportExcel(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch) {
QueryWrapper<CostStandardDetail> queryWrapper = QueryGenerator.initQueryWrapper(costStandardDetailSearch, request.getParameterMap());
if (costStandardDetailSearch != null && costStandardDetailSearch.getSelections() != null && costStandardDetailSearch.getSelections().size() > 0) {
queryWrapper.in("id", costStandardDetailSearch.getSelections());
}
List exportList = list(queryWrapper);
// EasyExcelUtil.export(response, "D:/WorkDoc/PHM/单机部署/单行查询.xls", null, exportList,CostStandardDetail.class);
// 根据用户传入字段 假设我们要忽略 date
Set<String> includeFields = getIncludeFields(CostStandardDetail.class);
EasyExcel.write("D:/WorkDoc/PHM/单机部署/单行查询.xls", CostStandardDetail.class).includeColumnFieldNames(includeFields).sheet("模板").doWrite(exportList);
// return super.exportXls(request, costStandardDetail, CostStandardDetail.class, "单行查询");
JSONObject result = new JSONObject();
result.put("filePath", "D:/WorkDoc/PHM/单机部署/单行查询.xls");
return result;
}
}
@@ -13,7 +13,7 @@ import java.util.stream.Collectors;
public class BomTreeBuilder {
public static List<BomTreeInfoVO> buildBomTree(List<CostStandardDetailVO> sourceData, Map<String, CostStandardDetailVO> parentDataMap) {
List<BomTreeInfoVO> result = new ArrayList<>();
if ((sourceData == null || (sourceData != null && sourceData.size() < 1))&& (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
if ((sourceData == null || (sourceData != null && sourceData.size() < 1)) && (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
return result;
}
//1.把BOM信息分成按照物料号分组
@@ -54,6 +54,11 @@ public class BomTreeBuilder {
if (parentBomTreeInfoVO != null) {
//4.根据物料号查找子节点
List<CostStandardDetailVO> childs = childDataMap.get(parentBomTreeInfoVO.getMaterialNumber());
if (childs != null && childs.size() > 0) {
parentBomTreeInfoVO.setHasChildren(true);
} else {
parentBomTreeInfoVO.setHasChildren(false);
}
//构造父节点下的bomtree结构数据
List<BomTreeInfoVO> children = new ArrayList<>();
for (int j = 0; childs != null && childs.size() > 0 && j < childs.size(); j++) {
@@ -0,0 +1,135 @@
package com.zzsmart.qomo.kn.cost.manage.util;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
import org.apache.poi.ss.usermodel.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class EasyExcelUtil {
/**
* 导出Excel文件到HTTP响应流,包含自定义表头。
*
* @param response HTTP响应对象
* @param fileName 导出的文件名
* @param head 表头信息列表
* @param data 需要导出的数据列表
* @param clazz 数据模型的Class类型
* @throws IOException IO异常
*/
public static <T> void export(HttpServletResponse response, String fileName, List<?> head, List<T> data, Class<T> clazz) throws IOException {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
try {
fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 自定义表头样式
HorizontalCellStyleStrategy horizontalCellStyleStrategy = getHorizontalCellStyleStrategy();
// 使用EasyExcel导出
try {
EasyExcel.write(response.getOutputStream(), clazz)
// 注册样式策略
.registerWriteHandler(horizontalCellStyleStrategy).sheet("1111").doWrite(data);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
// FileOutputStream outputStream= new FileOutputStream(fileName);
// try {
// EasyExcel.write(outputStream)
// // 设置自定义样式,可选
// .sheet("Sheet1") // 设置工作表名称
// .doWrite(data); // 将数据写入Excel
// } catch (Exception e) {
// e.printStackTrace();
// System.out.println("zheli==============");
// } finally {
//// if (excelWriter != null) {
//// excelWriter.finish();
//// }
// if (outputStream != null) {
// outputStream.close();
// }
// }
}
/**
* 创建自定义的水平单元格样式策略,用于表头样式。
*
* @return 水平单元格样式策略
*/
private static HorizontalCellStyleStrategy getHorizontalCellStyleStrategy() {
// 设置表头字体样式
WriteFont headFont = new WriteFont();
headFont.setFontHeightInPoints((short) 12);
headFont.setFontName("Arial");
headFont.setBold(true);
// 设置表头单元格样式
WriteCellStyle headCellStyle = new WriteCellStyle();
headCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
headCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
headCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
headCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
headCellStyle.setBorderLeft(BorderStyle.THIN);
headCellStyle.setBorderRight(BorderStyle.THIN);
headCellStyle.setBorderTop(BorderStyle.THIN);
headCellStyle.setBorderBottom(BorderStyle.THIN);
headCellStyle.setWriteFont(headFont);
// 创建并返回水平单元格样式策略
return new HorizontalCellStyleStrategy(headCellStyle, (List<WriteCellStyle>) null);
}
/**
* 获取带有@Excel注解的属性集合
*
* @param clazz 实体类的Class对象
* @return 带有@Excel注解的Field集合
*/
public static Field[] getExcelPropertyAnnotatedFields(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
List<Field> annotatedFields = new ArrayList<>();
for (Field field : fields) {
if (field.isAnnotationPresent(ExcelProperty.class)) {
annotatedFields.add(field);
}
}
return annotatedFields.toArray(new Field[0]);
}
/**
* 查询类需要导出的列名
*
* @param clazz
* @return
*/
public static Set<String> getIncludeFields(Class<?> clazz) {
Field[] excelPropertyAnnotatedFields = getExcelPropertyAnnotatedFields(CostStandardDetail.class);
Set<String> includeColumnFiledNames = new HashSet<String>();
for (int i = 0; i < excelPropertyAnnotatedFields.length; i++) {
includeColumnFiledNames.add(excelPropertyAnnotatedFields[i].getName());
}
return includeColumnFiledNames;
}
}
@@ -137,4 +137,9 @@ public class BomTreeInfoVO {
*/
@ApiModelProperty(value = "子节点")
private List<BomTreeInfoVO> children;
/**
* 是否有叶子节点
*/
@ApiModelProperty(value = "是否有叶子节点")
private boolean hasChildren;
}
@@ -0,0 +1,21 @@
package com.zzsmart.qomo.kn.cost.manage.vo;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value="bom结构树", description="bom结构树")
public class CostStandardDetailSearch extends CostStandardDetailVO {
/**
* 选择行的id
*/
private List<String> selections;
}