From 62a8797e5f6302d043987384e9c25b0d2adc404f Mon Sep 17 00:00:00 2001
From: wangqiong <1322446236@qq.com>
Date: Mon, 24 Jun 2024 17:56:23 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E6=9E=84=E6=A0=91?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=92=8C=E5=8D=95=E8=A1=8C=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 5 +
qomo-kn-cost-manage/pom.xml | 20 +++
.../CostStandardDetailController.java | 25 +++-
.../manage/entity/CostStandardDetail.java | 31 +++-
.../service/CostStandardDetailService.java | 18 ++-
.../service/impl/BomTreeServiceImpl.java | 17 +++
.../impl/CostStandardDetailServiceImpl.java | 45 ++++--
.../kn/cost/manage/util/BomTreeBuilder.java | 7 +-
.../kn/cost/manage/util/EasyExcelUtil.java | 135 ++++++++++++++++++
.../qomo/kn/cost/manage/vo/BomTreeInfoVO.java | 5 +
.../manage/vo/CostStandardDetailSearch.java | 21 +++
11 files changed, 308 insertions(+), 21 deletions(-)
create mode 100644 qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/EasyExcelUtil.java
create mode 100644 qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java
diff --git a/pom.xml b/pom.xml
index 7de4a6d..239a588 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,6 +98,11 @@
qomo-kn-cost-manage
${revision}
+
+ commons-io
+ commons-io
+ 2.11.0
+
diff --git a/qomo-kn-cost-manage/pom.xml b/qomo-kn-cost-manage/pom.xml
index 63c79a0..47dba37 100644
--- a/qomo-kn-cost-manage/pom.xml
+++ b/qomo-kn-cost-manage/pom.xml
@@ -38,6 +38,26 @@
mybatis-plus-generator
3.5.1
+
+ com.alibaba
+ easyexcel
+ 4.0.1
+
+
+ commons-io
+ commons-io
+ 2.11.0
+
+
+ org.apache.poi
+ poi
+ 5.2.3
+
+
+ org.apache.poi
+ poi-ooxml
+ 5.2.3
+
\ No newline at end of file
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java
index 9d5afd6..a973e45 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java
@@ -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;
/**
*
@@ -58,11 +70,12 @@ public class CostStandardDetailController extends JeecgController
@@ -18,10 +22,20 @@ import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
public interface CostStandardDetailService extends IService {
/**
* 分页查询
+ *
* @param page
* @param
* @return
*/
IPage pageList(Page page, CostStandardDetailVO costStandard);
+ /**
+ * 导出列表信息为Excel文件
+ *
+ * @param request
+ * @param response
+ * @param costStandardDetailSearch
+ * @return
+ */
+ JSONObject exportExcel(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch);
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java
index 13fe9f5..cfabdeb 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/BomTreeServiceImpl.java
@@ -49,6 +49,16 @@ public class BomTreeServiceImpl implements BomTreeService {
wrapper1.like("parent_material_number", materialNumber1);
}
List costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
+ //第三层叶子节点
+ List threeNodes=new ArrayList<>();
+ if(costStandardDetails!=null&&costStandardDetails.size()>0){
+ List materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList());
+ QueryWrapper wrapper2 = new QueryWrapper<>();
+ wrapper2.in("parent_material_number", materialNoList);
+
+ threeNodes = costStandardDetailMapper.selectList(wrapper2);
+ }
+ //把第二层叶子节点转化为bomtreeinfoVO对象集合
costStandardDetailVOS=new ArrayList<>();
for (int i=0;i bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
return bomTreeInfoVOS;
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java
index f1e3403..84eb888 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java
@@ -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;
+
/**
*
* 标准成本明细表 服务实现类
@@ -26,6 +36,7 @@ public class CostStandardDetailServiceImpl extends ServiceImpl) costStandardDetailMapper.pageList(page,queryWrapper);
+ return (IPage) costStandardDetailMapper.pageList(page, queryWrapper);
}
+
+ @Override
+ public JSONObject exportExcel(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch) {
+ QueryWrapper 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 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;
+ }
+
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java
index 1d20494..fad41e6 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/BomTreeBuilder.java
@@ -13,7 +13,7 @@ import java.util.stream.Collectors;
public class BomTreeBuilder {
public static List buildBomTree(List sourceData, Map parentDataMap) {
List 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 childs = childDataMap.get(parentBomTreeInfoVO.getMaterialNumber());
+ if (childs != null && childs.size() > 0) {
+ parentBomTreeInfoVO.setHasChildren(true);
+ } else {
+ parentBomTreeInfoVO.setHasChildren(false);
+ }
//构造父节点下的bomtree结构数据
List children = new ArrayList<>();
for (int j = 0; childs != null && childs.size() > 0 && j < childs.size(); j++) {
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/EasyExcelUtil.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/EasyExcelUtil.java
new file mode 100644
index 0000000..f774a26
--- /dev/null
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/EasyExcelUtil.java
@@ -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 void export(HttpServletResponse response, String fileName, List> head, List data, Class 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) null);
+ }
+
+ /**
+ * 获取带有@Excel注解的属性集合
+ *
+ * @param clazz 实体类的Class对象
+ * @return 带有@Excel注解的Field集合
+ */
+ public static Field[] getExcelPropertyAnnotatedFields(Class> clazz) {
+ Field[] fields = clazz.getDeclaredFields();
+ List 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 getIncludeFields(Class> clazz) {
+ Field[] excelPropertyAnnotatedFields = getExcelPropertyAnnotatedFields(CostStandardDetail.class);
+ Set includeColumnFiledNames = new HashSet();
+ for (int i = 0; i < excelPropertyAnnotatedFields.length; i++) {
+ includeColumnFiledNames.add(excelPropertyAnnotatedFields[i].getName());
+ }
+ return includeColumnFiledNames;
+ }
+}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java
index 56d8741..3356e57 100644
--- a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java
@@ -137,4 +137,9 @@ public class BomTreeInfoVO {
*/
@ApiModelProperty(value = "子节点")
private List children;
+ /**
+ * 是否有叶子节点
+ */
+ @ApiModelProperty(value = "是否有叶子节点")
+ private boolean hasChildren;
}
diff --git a/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java
new file mode 100644
index 0000000..01c8565
--- /dev/null
+++ b/qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java
@@ -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 selections;
+}