Преглед изворни кода

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

wangqiong пре 2 година
родитељ
комит
62a8797e5f

+ 5
- 0
pom.xml Прегледај датотеку

@@ -98,6 +98,11 @@
98 98
                 <artifactId>qomo-kn-cost-manage</artifactId>
99 99
                 <version>${revision}</version>
100 100
             </dependency>
101
+            <dependency>
102
+                <groupId>commons-io</groupId>
103
+                <artifactId>commons-io</artifactId>
104
+                <version>2.11.0</version>
105
+            </dependency>
101 106
         </dependencies>
102 107
     </dependencyManagement>
103 108
 

+ 20
- 0
qomo-kn-cost-manage/pom.xml Прегледај датотеку

@@ -38,6 +38,26 @@
38 38
             <artifactId>mybatis-plus-generator</artifactId>
39 39
             <version>3.5.1</version>
40 40
         </dependency>
41
+        <dependency>
42
+            <groupId>com.alibaba</groupId>
43
+            <artifactId>easyexcel</artifactId>
44
+            <version>4.0.1</version> <!-- 请检查并使用最新稳定版本 -->
45
+        </dependency>
46
+        <dependency>
47
+            <groupId>commons-io</groupId>
48
+            <artifactId>commons-io</artifactId>
49
+            <version>2.11.0</version>
50
+        </dependency>
51
+        <dependency>
52
+            <groupId>org.apache.poi</groupId>
53
+            <artifactId>poi</artifactId>
54
+            <version>5.2.3</version>
55
+        </dependency>
56
+        <dependency>
57
+            <groupId>org.apache.poi</groupId>
58
+            <artifactId>poi-ooxml</artifactId>
59
+            <version>5.2.3</version>
60
+        </dependency>
41 61
     </dependencies>
42 62
 
43 63
 </project>

+ 19
- 6
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java Прегледај датотеку

@@ -1,23 +1,35 @@
1 1
 package com.zzsmart.qomo.kn.cost.manage.controller;
2 2
 
3 3
 
4
+import com.alibaba.excel.EasyExcel;
5
+import com.alibaba.fastjson.JSONObject;
6
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 7
 import com.baomidou.mybatisplus.core.metadata.IPage;
5 8
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
9
+import com.google.gson.JsonObject;
6 10
 import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
7
-import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardVersion;
8 11
 import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
9
-import com.zzsmart.qomo.kn.cost.manage.service.ICostStandardVersionService;
12
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailSearch;
10 13
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
11 14
 import io.swagger.annotations.Api;
12 15
 import io.swagger.annotations.ApiOperation;
13 16
 import lombok.extern.slf4j.Slf4j;
14 17
 import org.jeecg.common.api.vo.Result;
15 18
 import org.jeecg.common.system.base.controller.JeecgController;
19
+import org.jeecg.common.system.query.QueryGenerator;
16 20
 import org.springframework.beans.factory.annotation.Autowired;
17 21
 import org.springframework.web.bind.annotation.*;
18
-import org.springframework.web.servlet.ModelAndView;
19 22
 
20 23
 import javax.servlet.http.HttpServletRequest;
24
+import javax.servlet.http.HttpServletResponse;
25
+import java.io.IOException;
26
+import java.lang.reflect.Field;
27
+import java.util.HashSet;
28
+import java.util.List;
29
+import java.util.Set;
30
+
31
+import static com.zzsmart.qomo.kn.cost.manage.util.EasyExcelUtil.getExcelPropertyAnnotatedFields;
32
+import static com.zzsmart.qomo.kn.cost.manage.util.EasyExcelUtil.getIncludeFields;
21 33
 
22 34
 /**
23 35
  * <p>
@@ -58,11 +70,12 @@ public class CostStandardDetailController extends JeecgController<CostStandardDe
58 70
      * 导出excel
59 71
      *
60 72
      * @param request
61
-     * @param costStandardDetail
73
+     * @param costStandardDetailSearch
62 74
      */
63 75
     @RequestMapping(value = "/exportXls", method = RequestMethod.GET)
64 76
     @ApiOperation(value = "单行查询导出", notes = "单行查询导出")
65
-    public ModelAndView exportXls(HttpServletRequest request, CostStandardDetail costStandardDetail) {
66
-        return super.exportXls(request, costStandardDetail, CostStandardDetail.class, "单行查询");
77
+    public Result exportXls(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch) throws IOException {
78
+        JSONObject result = costStandardDetailService.exportExcel(request, response, costStandardDetailSearch);
79
+        return Result.OK(result);
67 80
     }
68 81
 }

+ 27
- 4
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/entity/CostStandardDetail.java Прегледај датотеку

@@ -1,5 +1,6 @@
1 1
 package com.zzsmart.qomo.kn.cost.manage.entity;
2 2
 
3
+import com.alibaba.excel.annotation.ExcelProperty;
3 4
 import com.baomidou.mybatisplus.annotation.IdType;
4 5
 import com.baomidou.mybatisplus.annotation.TableField;
5 6
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -9,10 +10,7 @@ import java.math.BigDecimal;
9 10
 import java.time.LocalDateTime;
10 11
 
11 12
 import io.swagger.annotations.ApiModelProperty;
12
-import lombok.Builder;
13
-import lombok.Data;
14
-import lombok.Getter;
15
-import lombok.Setter;
13
+import lombok.*;
16 14
 import lombok.experimental.Accessors;
17 15
 
18 16
 /**
@@ -26,6 +24,7 @@ import lombok.experimental.Accessors;
26 24
 @Data
27 25
 @Accessors(chain = true)
28 26
 @TableName("cost_standard_detail")
27
+@EqualsAndHashCode
29 28
 public class CostStandardDetail implements Serializable {
30 29
 
31 30
     private static final long serialVersionUID = 1L;
@@ -41,6 +40,7 @@ public class CostStandardDetail implements Serializable {
41 40
      */
42 41
     @TableField("material_number")
43 42
     @ApiModelProperty(value = "物料号,关联kn_new_sap_mara表matnr字段")
43
+    @ExcelProperty("物料号")
44 44
     private String materialNumber;
45 45
 
46 46
     /**
@@ -48,6 +48,7 @@ public class CostStandardDetail implements Serializable {
48 48
      */
49 49
     @TableField("material_name")
50 50
     @ApiModelProperty(value = "物料名称")
51
+    @ExcelProperty("物料名称")
51 52
     private String materialName;
52 53
 
53 54
     /**
@@ -55,6 +56,7 @@ public class CostStandardDetail implements Serializable {
55 56
      */
56 57
     @TableField("parent_material_number")
57 58
     @ApiModelProperty(value = "父类物料号")
59
+    @ExcelProperty("父类物料号")
58 60
     private String parentMaterialNumber;
59 61
 
60 62
     /**
@@ -69,6 +71,7 @@ public class CostStandardDetail implements Serializable {
69 71
      */
70 72
     @TableField("level")
71 73
     @ApiModelProperty(value = "层级")
74
+    @ExcelProperty("层级")
72 75
     private Integer level;
73 76
 
74 77
     /**
@@ -76,6 +79,7 @@ public class CostStandardDetail implements Serializable {
76 79
      */
77 80
     @TableField("figure_number")
78 81
     @ApiModelProperty(value = "图号")
82
+    @ExcelProperty("图号")
79 83
     private String figureNumber;
80 84
 
81 85
     /**
@@ -83,6 +87,7 @@ public class CostStandardDetail implements Serializable {
83 87
      */
84 88
     @TableField("dosage")
85 89
     @ApiModelProperty(value = "用量")
90
+    @ExcelProperty("用量")
86 91
     private Double dosage;
87 92
 
88 93
     /**
@@ -90,6 +95,7 @@ public class CostStandardDetail implements Serializable {
90 95
      */
91 96
     @TableField("unit")
92 97
     @ApiModelProperty(value = "单位")
98
+    @ExcelProperty("单位")
93 99
     private String unit;
94 100
 
95 101
     /**
@@ -97,6 +103,7 @@ public class CostStandardDetail implements Serializable {
97 103
      */
98 104
     @TableField("specification")
99 105
     @ApiModelProperty(value = "规格")
106
+    @ExcelProperty("规格")
100 107
     private String specification;
101 108
 
102 109
     /**
@@ -104,6 +111,7 @@ public class CostStandardDetail implements Serializable {
104 111
      */
105 112
     @TableField("bom_cost")
106 113
     @ApiModelProperty(value = "bom材料费")
114
+    @ExcelProperty("bom材料费")
107 115
     private BigDecimal bomCost;
108 116
 
109 117
     /**
@@ -111,6 +119,7 @@ public class CostStandardDetail implements Serializable {
111 119
      */
112 120
     @TableField("packing_cost")
113 121
     @ApiModelProperty(value = "包装费")
122
+    @ExcelProperty("包装费")
114 123
     private BigDecimal packingCost;
115 124
 
116 125
     /**
@@ -118,6 +127,7 @@ public class CostStandardDetail implements Serializable {
118 127
      */
119 128
     @TableField("auxiliary_cost")
120 129
     @ApiModelProperty(value = "本阶辅料费")
130
+    @ExcelProperty("本阶辅料费")
121 131
     private BigDecimal auxiliaryCost;
122 132
 
123 133
     /**
@@ -125,6 +135,7 @@ public class CostStandardDetail implements Serializable {
125 135
      */
126 136
     @TableField("labor_cost")
127 137
     @ApiModelProperty(value = "本阶人工费")
138
+    @ExcelProperty("本阶人工费")
128 139
     private BigDecimal laborCost;
129 140
 
130 141
     /**
@@ -132,6 +143,7 @@ public class CostStandardDetail implements Serializable {
132 143
      */
133 144
     @TableField("euip_depreciation_cost")
134 145
     @ApiModelProperty(value = "机器折旧费")
146
+    @ExcelProperty("机器折旧费")
135 147
     private BigDecimal euipDepreciationCost;
136 148
 
137 149
     /**
@@ -139,6 +151,7 @@ public class CostStandardDetail implements Serializable {
139 151
      */
140 152
     @TableField("equip_consume_cost")
141 153
     @ApiModelProperty(value = "机物料消耗费")
154
+    @ExcelProperty("机物料消耗费")
142 155
     private BigDecimal equipConsumeCost;
143 156
 
144 157
     /**
@@ -146,6 +159,7 @@ public class CostStandardDetail implements Serializable {
146 159
      */
147 160
     @TableField("hydroelectricity_cost")
148 161
     @ApiModelProperty(value = "水电费")
162
+    @ExcelProperty("水电费")
149 163
     private BigDecimal hydroelectricityCost;
150 164
 
151 165
     /**
@@ -153,6 +167,7 @@ public class CostStandardDetail implements Serializable {
153 167
      */
154 168
     @TableField("other_cost")
155 169
     @ApiModelProperty(value = "其他制造费")
170
+    @ExcelProperty("其他制造费")
156 171
     private BigDecimal otherCost;
157 172
 
158 173
     /**
@@ -160,6 +175,7 @@ public class CostStandardDetail implements Serializable {
160 175
      */
161 176
     @TableField("trail_cost")
162 177
     @ApiModelProperty(value = "物流费")
178
+    @ExcelProperty("物流费")
163 179
     private BigDecimal trailCost;
164 180
 
165 181
     /**
@@ -167,6 +183,7 @@ public class CostStandardDetail implements Serializable {
167 183
      */
168 184
     @TableField("manufacture_cost")
169 185
     @ApiModelProperty(value = "制造成本")
186
+    @ExcelProperty("制造成本")
170 187
     private BigDecimal manufactureCost;
171 188
 
172 189
     /**
@@ -174,6 +191,7 @@ public class CostStandardDetail implements Serializable {
174 191
      */
175 192
     @TableField("total_labor_cost")
176 193
     @ApiModelProperty(value = "累计人工费")
194
+    @ExcelProperty("累计人工费")
177 195
     private BigDecimal totalLaborCost;
178 196
 
179 197
     /**
@@ -181,6 +199,7 @@ public class CostStandardDetail implements Serializable {
181 199
      */
182 200
     @TableField("total_equip_consume_cost")
183 201
     @ApiModelProperty(value = "累计机器消耗费")
202
+    @ExcelProperty("累计机器消耗费")
184 203
     private BigDecimal totalEquipConsumeCost;
185 204
 
186 205
     /**
@@ -188,6 +207,7 @@ public class CostStandardDetail implements Serializable {
188 207
      */
189 208
     @TableField("total_euip_depreciation_cost")
190 209
     @ApiModelProperty(value = "累计机器折旧费")
210
+    @ExcelProperty("累计机器折旧费")
191 211
     private BigDecimal totalEuipDepreciationCost;
192 212
 
193 213
     /**
@@ -195,6 +215,7 @@ public class CostStandardDetail implements Serializable {
195 215
      */
196 216
     @TableField("total_hydroelectricity_cost")
197 217
     @ApiModelProperty(value = "累计水电费")
218
+    @ExcelProperty("累计水电费")
198 219
     private BigDecimal totalHydroelectricityCost;
199 220
 
200 221
     /**
@@ -202,6 +223,7 @@ public class CostStandardDetail implements Serializable {
202 223
      */
203 224
     @TableField("total_other_cost")
204 225
     @ApiModelProperty(value = "累计其它费用")
226
+    @ExcelProperty("累计其它费用")
205 227
     private BigDecimal totalOtherCost;
206 228
 
207 229
     /**
@@ -244,6 +266,7 @@ public class CostStandardDetail implements Serializable {
244 266
      */
245 267
     @TableField("sort")
246 268
     @ApiModelProperty(value = "序号")
269
+    @ExcelProperty("序号")
247 270
     private Integer sort;
248 271
 
249 272
 }

+ 16
- 2
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/CostStandardDetailService.java Прегледај датотеку

@@ -1,11 +1,15 @@
1 1
 package com.zzsmart.qomo.kn.cost.manage.service;
2 2
 
3
+import com.alibaba.fastjson.JSONObject;
3 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
4 5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
-import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
6 6
 import com.baomidou.mybatisplus.extension.service.IService;
7
+import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
8
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailSearch;
7 9
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
8
-import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
10
+
11
+import javax.servlet.http.HttpServletRequest;
12
+import javax.servlet.http.HttpServletResponse;
9 13
 
10 14
 /**
11 15
  * <p>
@@ -18,10 +22,20 @@ import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
18 22
 public interface CostStandardDetailService extends IService<CostStandardDetail> {
19 23
     /**
20 24
      * 分页查询
25
+     *
21 26
      * @param page
22 27
      * @param
23 28
      * @return
24 29
      */
25 30
     IPage<CostStandardDetailVO> pageList(Page<CostStandardDetailVO> page, CostStandardDetailVO costStandard);
26 31
 
32
+    /**
33
+     * 导出列表信息为Excel文件
34
+     *
35
+     * @param request
36
+     * @param response
37
+     * @param costStandardDetailSearch
38
+     * @return
39
+     */
40
+    JSONObject exportExcel(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch);
27 41
 }

+ 17
- 0
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 {
49 49
                 wrapper1.like("parent_material_number", materialNumber1);
50 50
             }
51 51
             List<CostStandardDetail> costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
52
+            //第三层叶子节点
53
+            List<CostStandardDetail> threeNodes=new ArrayList<>();
54
+            if(costStandardDetails!=null&&costStandardDetails.size()>0){
55
+               List<String> materialNoList = costStandardDetails.stream().map(CostStandardDetail::getMaterialNumber).collect(Collectors.toList());
56
+               QueryWrapper<CostStandardDetail> wrapper2 = new QueryWrapper<>();
57
+                   wrapper2.in("parent_material_number", materialNoList);
58
+
59
+               threeNodes = costStandardDetailMapper.selectList(wrapper2);
60
+           }
61
+            //把第二层叶子节点转化为bomtreeinfoVO对象集合
52 62
             costStandardDetailVOS=new ArrayList<>();
53 63
             for (int i=0;i<costStandardDetails.size();i++){
54 64
                 CostStandardDetail costStandardDetail = costStandardDetails.get(i);
@@ -56,6 +66,13 @@ public class BomTreeServiceImpl implements BomTreeService {
56 66
                 BeanUtils.copyProperties(costStandardDetail,vo);
57 67
                 costStandardDetailVOS.add(vo);
58 68
             }
69
+            //把第三层叶子节点转化为bomtreeinfoVO对象集合
70
+            for (int i=0;i<threeNodes.size();i++){
71
+                CostStandardDetail costStandardDetail = threeNodes.get(i);
72
+                CostStandardDetailVO vo=new CostStandardDetailVO();
73
+                BeanUtils.copyProperties(costStandardDetail,vo);
74
+                costStandardDetailVOS.add(vo);
75
+            }
59 76
         }
60 77
         List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
61 78
         return bomTreeInfoVOS;

+ 37
- 8
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java Прегледај датотеку

@@ -1,18 +1,28 @@
1 1
 package com.zzsmart.qomo.kn.cost.manage.service.impl;
2 2
 
3 3
 import cn.hutool.core.util.StrUtil;
4
+import com.alibaba.excel.EasyExcel;
5
+import com.alibaba.fastjson.JSONObject;
4 6
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5 7
 import com.baomidou.mybatisplus.core.metadata.IPage;
6 8
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
9
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 10
 import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
8 11
 import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
9 12
 import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
10
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
13
+import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailSearch;
11 14
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
12
-import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardVO;
15
+import org.jeecg.common.system.query.QueryGenerator;
13 16
 import org.springframework.beans.factory.annotation.Autowired;
14 17
 import org.springframework.stereotype.Service;
15 18
 
19
+import javax.servlet.http.HttpServletRequest;
20
+import javax.servlet.http.HttpServletResponse;
21
+import java.util.List;
22
+import java.util.Set;
23
+
24
+import static com.zzsmart.qomo.kn.cost.manage.util.EasyExcelUtil.getIncludeFields;
25
+
16 26
 /**
17 27
  * <p>
18 28
  * 标准成本明细表 服务实现类
@@ -26,6 +36,7 @@ public class CostStandardDetailServiceImpl extends ServiceImpl<CostStandardDetai
26 36
 
27 37
     @Autowired
28 38
     CostStandardDetailMapper costStandardDetailMapper;
39
+
29 40
     /**
30 41
      * 分页查询
31 42
      *
@@ -38,18 +49,36 @@ public class CostStandardDetailServiceImpl extends ServiceImpl<CostStandardDetai
38 49
         // 查询条件组装
39 50
         QueryWrapper queryWrapper = new QueryWrapper();
40 51
 
41
-        if(costStandard != null){
52
+        if (costStandard != null) {
42 53
 
43
-            if(StrUtil.isNotEmpty(costStandard.getMaterialNumber()) ){
54
+            if (StrUtil.isNotEmpty(costStandard.getMaterialNumber())) {
44 55
                 // 物料号
45
-                queryWrapper.like("c1.material_number",costStandard.getMaterialNumber());
56
+                queryWrapper.like("c1.material_number", costStandard.getMaterialNumber());
46 57
             }
47
-            if(StrUtil.isNotEmpty(costStandard.getVersionNumber()) ){
58
+            if (StrUtil.isNotEmpty(costStandard.getVersionNumber())) {
48 59
                 // 版本号
49
-                queryWrapper.like("c2.version_number",costStandard.getVersionNumber());
60
+                queryWrapper.like("c2.version_number", costStandard.getVersionNumber());
50 61
             }
51 62
 
52 63
         }
53
-        return (IPage<CostStandardDetailVO>) costStandardDetailMapper.pageList(page,queryWrapper);
64
+        return (IPage<CostStandardDetailVO>) costStandardDetailMapper.pageList(page, queryWrapper);
54 65
     }
66
+
67
+    @Override
68
+    public JSONObject exportExcel(HttpServletRequest request, HttpServletResponse response, CostStandardDetailSearch costStandardDetailSearch) {
69
+        QueryWrapper<CostStandardDetail> queryWrapper = QueryGenerator.initQueryWrapper(costStandardDetailSearch, request.getParameterMap());
70
+        if (costStandardDetailSearch != null && costStandardDetailSearch.getSelections() != null && costStandardDetailSearch.getSelections().size() > 0) {
71
+            queryWrapper.in("id", costStandardDetailSearch.getSelections());
72
+        }
73
+        List exportList = list(queryWrapper);
74
+//        EasyExcelUtil.export(response, "D:/WorkDoc/PHM/单机部署/单行查询.xls", null, exportList,CostStandardDetail.class);
75
+        // 根据用户传入字段 假设我们要忽略 date
76
+        Set<String> includeFields = getIncludeFields(CostStandardDetail.class);
77
+        EasyExcel.write("D:/WorkDoc/PHM/单机部署/单行查询.xls", CostStandardDetail.class).includeColumnFieldNames(includeFields).sheet("模板").doWrite(exportList);
78
+        // return super.exportXls(request, costStandardDetail, CostStandardDetail.class, "单行查询");
79
+        JSONObject result = new JSONObject();
80
+        result.put("filePath", "D:/WorkDoc/PHM/单机部署/单行查询.xls");
81
+        return result;
82
+    }
83
+
55 84
 }

+ 6
- 1
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;
13 13
 public class BomTreeBuilder {
14 14
     public static List<BomTreeInfoVO> buildBomTree(List<CostStandardDetailVO> sourceData, Map<String, CostStandardDetailVO> parentDataMap) {
15 15
         List<BomTreeInfoVO> result = new ArrayList<>();
16
-        if ((sourceData == null || (sourceData != null && sourceData.size() < 1))&& (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
16
+        if ((sourceData == null || (sourceData != null && sourceData.size() < 1)) && (parentDataMap == null || (parentDataMap != null && parentDataMap.size() < 1))) {
17 17
             return result;
18 18
         }
19 19
         //1.把BOM信息分成按照物料号分组
@@ -54,6 +54,11 @@ public class BomTreeBuilder {
54 54
         if (parentBomTreeInfoVO != null) {
55 55
             //4.根据物料号查找子节点
56 56
             List<CostStandardDetailVO> childs = childDataMap.get(parentBomTreeInfoVO.getMaterialNumber());
57
+            if (childs != null && childs.size() > 0) {
58
+                parentBomTreeInfoVO.setHasChildren(true);
59
+            } else {
60
+                parentBomTreeInfoVO.setHasChildren(false);
61
+            }
57 62
             //构造父节点下的bomtree结构数据
58 63
             List<BomTreeInfoVO> children = new ArrayList<>();
59 64
             for (int j = 0; childs != null && childs.size() > 0 && j < childs.size(); j++) {

+ 135
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/util/EasyExcelUtil.java Прегледај датотеку

@@ -0,0 +1,135 @@
1
+package com.zzsmart.qomo.kn.cost.manage.util;
2
+
3
+import com.alibaba.excel.EasyExcel;
4
+import com.alibaba.excel.annotation.ExcelProperty;
5
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
6
+import com.alibaba.excel.write.metadata.style.WriteFont;
7
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
8
+import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
9
+import org.apache.poi.ss.usermodel.*;
10
+
11
+import javax.servlet.http.HttpServletResponse;
12
+import java.io.IOException;
13
+import java.io.UnsupportedEncodingException;
14
+import java.lang.reflect.Field;
15
+import java.net.URLEncoder;
16
+import java.nio.charset.StandardCharsets;
17
+import java.util.ArrayList;
18
+import java.util.HashSet;
19
+import java.util.List;
20
+import java.util.Set;
21
+
22
+public class EasyExcelUtil {
23
+    /**
24
+     * 导出Excel文件到HTTP响应流,包含自定义表头。
25
+     *
26
+     * @param response HTTP响应对象
27
+     * @param fileName 导出的文件名
28
+     * @param head     表头信息列表
29
+     * @param data     需要导出的数据列表
30
+     * @param clazz    数据模型的Class类型
31
+     * @throws IOException IO异常
32
+     */
33
+    public static <T> void export(HttpServletResponse response, String fileName, List<?> head, List<T> data, Class<T> clazz) throws IOException {
34
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
35
+        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
36
+        try {
37
+            fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");
38
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
39
+        } catch (UnsupportedEncodingException e) {
40
+            e.printStackTrace();
41
+        }
42
+
43
+        // 自定义表头样式
44
+        HorizontalCellStyleStrategy horizontalCellStyleStrategy = getHorizontalCellStyleStrategy();
45
+
46
+        // 使用EasyExcel导出
47
+        try {
48
+            EasyExcel.write(response.getOutputStream(), clazz)
49
+                    // 注册样式策略
50
+                    .registerWriteHandler(horizontalCellStyleStrategy).sheet("1111").doWrite(data);
51
+        } catch (IOException e) {
52
+            e.printStackTrace();
53
+            throw new RuntimeException(e);
54
+        }
55
+//        FileOutputStream outputStream=  new FileOutputStream(fileName);
56
+//        try {
57
+//            EasyExcel.write(outputStream)
58
+//                    // 设置自定义样式,可选
59
+//                    .sheet("Sheet1") // 设置工作表名称
60
+//                    .doWrite(data); // 将数据写入Excel
61
+//        } catch (Exception e) {
62
+//            e.printStackTrace();
63
+//            System.out.println("zheli==============");
64
+//        } finally {
65
+////            if (excelWriter != null) {
66
+////                excelWriter.finish();
67
+////            }
68
+//            if (outputStream != null) {
69
+//                outputStream.close();
70
+//            }
71
+
72
+//        }
73
+    }
74
+
75
+    /**
76
+     * 创建自定义的水平单元格样式策略,用于表头样式。
77
+     *
78
+     * @return 水平单元格样式策略
79
+     */
80
+    private static HorizontalCellStyleStrategy getHorizontalCellStyleStrategy() {
81
+        // 设置表头字体样式
82
+        WriteFont headFont = new WriteFont();
83
+        headFont.setFontHeightInPoints((short) 12);
84
+        headFont.setFontName("Arial");
85
+        headFont.setBold(true);
86
+
87
+        // 设置表头单元格样式
88
+        WriteCellStyle headCellStyle = new WriteCellStyle();
89
+        headCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
90
+        headCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
91
+        headCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
92
+        headCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
93
+        headCellStyle.setBorderLeft(BorderStyle.THIN);
94
+        headCellStyle.setBorderRight(BorderStyle.THIN);
95
+        headCellStyle.setBorderTop(BorderStyle.THIN);
96
+        headCellStyle.setBorderBottom(BorderStyle.THIN);
97
+        headCellStyle.setWriteFont(headFont);
98
+
99
+        // 创建并返回水平单元格样式策略
100
+        return new HorizontalCellStyleStrategy(headCellStyle, (List<WriteCellStyle>) null);
101
+    }
102
+
103
+    /**
104
+     * 获取带有@Excel注解的属性集合
105
+     *
106
+     * @param clazz 实体类的Class对象
107
+     * @return 带有@Excel注解的Field集合
108
+     */
109
+    public static Field[] getExcelPropertyAnnotatedFields(Class<?> clazz) {
110
+        Field[] fields = clazz.getDeclaredFields();
111
+        List<Field> annotatedFields = new ArrayList<>();
112
+
113
+        for (Field field : fields) {
114
+            if (field.isAnnotationPresent(ExcelProperty.class)) {
115
+                annotatedFields.add(field);
116
+            }
117
+        }
118
+        return annotatedFields.toArray(new Field[0]);
119
+    }
120
+
121
+    /**
122
+     * 查询类需要导出的列名
123
+     *
124
+     * @param clazz
125
+     * @return
126
+     */
127
+    public static Set<String> getIncludeFields(Class<?> clazz) {
128
+        Field[] excelPropertyAnnotatedFields = getExcelPropertyAnnotatedFields(CostStandardDetail.class);
129
+        Set<String> includeColumnFiledNames = new HashSet<String>();
130
+        for (int i = 0; i < excelPropertyAnnotatedFields.length; i++) {
131
+            includeColumnFiledNames.add(excelPropertyAnnotatedFields[i].getName());
132
+        }
133
+        return includeColumnFiledNames;
134
+    }
135
+}

+ 5
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/BomTreeInfoVO.java Прегледај датотеку

@@ -137,4 +137,9 @@ public class BomTreeInfoVO {
137 137
      */
138 138
     @ApiModelProperty(value = "子节点")
139 139
     private List<BomTreeInfoVO> children;
140
+    /**
141
+     * 是否有叶子节点
142
+     */
143
+    @ApiModelProperty(value = "是否有叶子节点")
144
+    private boolean hasChildren;
140 145
 }

+ 21
- 0
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/vo/CostStandardDetailSearch.java Прегледај датотеку

@@ -0,0 +1,21 @@
1
+package com.zzsmart.qomo.kn.cost.manage.vo;
2
+
3
+import io.swagger.annotations.ApiModel;
4
+import lombok.AllArgsConstructor;
5
+import lombok.Builder;
6
+import lombok.Data;
7
+import lombok.NoArgsConstructor;
8
+
9
+import java.util.List;
10
+
11
+@Data
12
+@Builder
13
+@NoArgsConstructor
14
+@AllArgsConstructor
15
+@ApiModel(value="bom结构树", description="bom结构树")
16
+public class CostStandardDetailSearch extends CostStandardDetailVO {
17
+    /**
18
+     * 选择行的id
19
+     */
20
+    private List<String> selections;
21
+}