Quellcode durchsuchen

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

wangqiong vor 2 Jahren
Ursprung
Commit
62a8797e5f

+ 5
- 0
pom.xml Datei anzeigen

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

+ 20
- 0
qomo-kn-cost-manage/pom.xml Datei anzeigen

38
             <artifactId>mybatis-plus-generator</artifactId>
38
             <artifactId>mybatis-plus-generator</artifactId>
39
             <version>3.5.1</version>
39
             <version>3.5.1</version>
40
         </dependency>
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
     </dependencies>
61
     </dependencies>
42
 
62
 
43
 </project>
63
 </project>

+ 19
- 6
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/controller/CostStandardDetailController.java Datei anzeigen

1
 package com.zzsmart.qomo.kn.cost.manage.controller;
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
 import com.baomidou.mybatisplus.core.metadata.IPage;
7
 import com.baomidou.mybatisplus.core.metadata.IPage;
5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
8
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
9
+import com.google.gson.JsonObject;
6
 import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
10
 import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
7
-import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardVersion;
8
 import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
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
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
13
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
11
 import io.swagger.annotations.Api;
14
 import io.swagger.annotations.Api;
12
 import io.swagger.annotations.ApiOperation;
15
 import io.swagger.annotations.ApiOperation;
13
 import lombok.extern.slf4j.Slf4j;
16
 import lombok.extern.slf4j.Slf4j;
14
 import org.jeecg.common.api.vo.Result;
17
 import org.jeecg.common.api.vo.Result;
15
 import org.jeecg.common.system.base.controller.JeecgController;
18
 import org.jeecg.common.system.base.controller.JeecgController;
19
+import org.jeecg.common.system.query.QueryGenerator;
16
 import org.springframework.beans.factory.annotation.Autowired;
20
 import org.springframework.beans.factory.annotation.Autowired;
17
 import org.springframework.web.bind.annotation.*;
21
 import org.springframework.web.bind.annotation.*;
18
-import org.springframework.web.servlet.ModelAndView;
19
 
22
 
20
 import javax.servlet.http.HttpServletRequest;
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
  * <p>
35
  * <p>
58
      * 导出excel
70
      * 导出excel
59
      *
71
      *
60
      * @param request
72
      * @param request
61
-     * @param costStandardDetail
73
+     * @param costStandardDetailSearch
62
      */
74
      */
63
     @RequestMapping(value = "/exportXls", method = RequestMethod.GET)
75
     @RequestMapping(value = "/exportXls", method = RequestMethod.GET)
64
     @ApiOperation(value = "单行查询导出", notes = "单行查询导出")
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 Datei anzeigen

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

1
 package com.zzsmart.qomo.kn.cost.manage.service;
1
 package com.zzsmart.qomo.kn.cost.manage.service;
2
 
2
 
3
+import com.alibaba.fastjson.JSONObject;
3
 import com.baomidou.mybatisplus.core.metadata.IPage;
4
 import com.baomidou.mybatisplus.core.metadata.IPage;
4
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
-import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
6
 import com.baomidou.mybatisplus.extension.service.IService;
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
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
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
  * <p>
15
  * <p>
18
 public interface CostStandardDetailService extends IService<CostStandardDetail> {
22
 public interface CostStandardDetailService extends IService<CostStandardDetail> {
19
     /**
23
     /**
20
      * 分页查询
24
      * 分页查询
25
+     *
21
      * @param page
26
      * @param page
22
      * @param
27
      * @param
23
      * @return
28
      * @return
24
      */
29
      */
25
     IPage<CostStandardDetailVO> pageList(Page<CostStandardDetailVO> page, CostStandardDetailVO costStandard);
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 Datei anzeigen

49
                 wrapper1.like("parent_material_number", materialNumber1);
49
                 wrapper1.like("parent_material_number", materialNumber1);
50
             }
50
             }
51
             List<CostStandardDetail> costStandardDetails = costStandardDetailMapper.selectList(wrapper1);
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
             costStandardDetailVOS=new ArrayList<>();
62
             costStandardDetailVOS=new ArrayList<>();
53
             for (int i=0;i<costStandardDetails.size();i++){
63
             for (int i=0;i<costStandardDetails.size();i++){
54
                 CostStandardDetail costStandardDetail = costStandardDetails.get(i);
64
                 CostStandardDetail costStandardDetail = costStandardDetails.get(i);
56
                 BeanUtils.copyProperties(costStandardDetail,vo);
66
                 BeanUtils.copyProperties(costStandardDetail,vo);
57
                 costStandardDetailVOS.add(vo);
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
         List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
77
         List<BomTreeInfoVO> bomTreeInfoVOS = BomTreeBuilder.buildBomTree(costStandardDetailVOS, parentDataMap);
61
         return bomTreeInfoVOS;
78
         return bomTreeInfoVOS;

+ 37
- 8
qomo-kn-cost-manage/src/main/java/com/zzsmart/qomo/kn/cost/manage/service/impl/CostStandardDetailServiceImpl.java Datei anzeigen

1
 package com.zzsmart.qomo.kn.cost.manage.service.impl;
1
 package com.zzsmart.qomo.kn.cost.manage.service.impl;
2
 
2
 
3
 import cn.hutool.core.util.StrUtil;
3
 import cn.hutool.core.util.StrUtil;
4
+import com.alibaba.excel.EasyExcel;
5
+import com.alibaba.fastjson.JSONObject;
4
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
6
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5
 import com.baomidou.mybatisplus.core.metadata.IPage;
7
 import com.baomidou.mybatisplus.core.metadata.IPage;
6
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
8
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
9
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7
 import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
10
 import com.zzsmart.qomo.kn.cost.manage.entity.CostStandardDetail;
8
 import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
11
 import com.zzsmart.qomo.kn.cost.manage.mapper.CostStandardDetailMapper;
9
 import com.zzsmart.qomo.kn.cost.manage.service.CostStandardDetailService;
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
 import com.zzsmart.qomo.kn.cost.manage.vo.CostStandardDetailVO;
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
 import org.springframework.beans.factory.annotation.Autowired;
16
 import org.springframework.beans.factory.annotation.Autowired;
14
 import org.springframework.stereotype.Service;
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
  * <p>
27
  * <p>
18
  * 标准成本明细表 服务实现类
28
  * 标准成本明细表 服务实现类
26
 
36
 
27
     @Autowired
37
     @Autowired
28
     CostStandardDetailMapper costStandardDetailMapper;
38
     CostStandardDetailMapper costStandardDetailMapper;
39
+
29
     /**
40
     /**
30
      * 分页查询
41
      * 分页查询
31
      *
42
      *
38
         // 查询条件组装
49
         // 查询条件组装
39
         QueryWrapper queryWrapper = new QueryWrapper();
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 Datei anzeigen

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

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 Datei anzeigen

137
      */
137
      */
138
     @ApiModelProperty(value = "子节点")
138
     @ApiModelProperty(value = "子节点")
139
     private List<BomTreeInfoVO> children;
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 Datei anzeigen

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