Your Name 2 years ago
parent
commit
9c70de35d8

+ 1
- 1
pom.xml View File

85
 		<dependency>
85
 		<dependency>
86
 			<groupId>com.alibaba</groupId>
86
 			<groupId>com.alibaba</groupId>
87
 			<artifactId>easyexcel</artifactId>
87
 			<artifactId>easyexcel</artifactId>
88
-			<version>2.0.4</version>
88
+			<version>3.1.2</version>
89
 		</dependency>
89
 		</dependency>
90
 		<!--excel end-->
90
 		<!--excel end-->
91
 
91
 

+ 39
- 0
src/main/java/com/yunzhi/nanyang/common/ExcelUtils.java View File

1
 package com.yunzhi.nanyang.common;
1
 package com.yunzhi.nanyang.common;
2
 
2
 
3
 import com.alibaba.excel.EasyExcel;
3
 import com.alibaba.excel.EasyExcel;
4
+import com.alibaba.excel.ExcelWriter;
5
+import com.alibaba.excel.write.metadata.WriteSheet;
6
+import com.alibaba.excel.write.metadata.fill.FillConfig;
7
+import org.springframework.core.io.ClassPathResource;
4
 
8
 
5
 import javax.servlet.http.HttpServletResponse;
9
 import javax.servlet.http.HttpServletResponse;
10
+import java.io.File;
6
 import java.io.IOException;
11
 import java.io.IOException;
12
+import java.io.InputStream;
7
 import java.util.List;
13
 import java.util.List;
14
+import java.util.function.BiConsumer;
8
 
15
 
9
 public class ExcelUtils {
16
 public class ExcelUtils {
10
 
17
 
23
 
30
 
24
         EasyExcel.write(response.getOutputStream(), dataClass).sheet("sheet1").doWrite(data);
31
         EasyExcel.write(response.getOutputStream(), dataClass).sheet("sheet1").doWrite(data);
25
     }
32
     }
33
+
34
+    /**
35
+     * 模板导出
36
+     * @param response
37
+     * @param tpl
38
+     * @param data
39
+     * @param fileName
40
+     * @param callback
41
+     * @throws IOException
42
+     */
43
+    public static void tplExport(HttpServletResponse response, String tpl, List data, String fileName, BiConsumer<ExcelWriter, WriteSheet> callback) throws IOException {
44
+        response.setContentType("application/vnd.ms-excel");
45
+        response.setCharacterEncoding("utf-8");
46
+        response.setHeader("Content-disposition", "attachment;filename="+StringUtils.urlEncode(fileName)+".xlsx");
47
+
48
+        ClassPathResource tplResource = new ClassPathResource(tpl);
49
+        InputStream tplResourceInputStream = tplResource.getInputStream();
50
+
51
+        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(tplResourceInputStream).build();
52
+        WriteSheet writeSheet = EasyExcel.writerSheet().build();
53
+        // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
54
+        // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
55
+        // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
56
+        // 如果数据量大 list不是最后一行 参照下一个
57
+        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
58
+        excelWriter.fill(data, fillConfig, writeSheet);
59
+
60
+        // 回填部分数据
61
+        callback.accept(excelWriter, writeSheet);
62
+
63
+        excelWriter.finish();
64
+    }
26
 }
65
 }

+ 63
- 5
src/main/java/com/yunzhi/nanyang/controller/TaDeviceJobController.java View File

4
 import com.baomidou.mybatisplus.core.metadata.IPage;
4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
 import com.yunzhi.nanyang.common.BaseController;
6
 import com.yunzhi.nanyang.common.BaseController;
7
+import com.yunzhi.nanyang.common.ExcelUtils;
7
 import com.yunzhi.nanyang.common.ResponseBean;
8
 import com.yunzhi.nanyang.common.ResponseBean;
8
 
9
 
9
 import java.util.HashMap;
10
 import java.util.HashMap;
10
 import java.util.List;
11
 import java.util.List;
12
+import java.util.Map;
11
 
13
 
12
 import com.yunzhi.nanyang.common.StringUtils;
14
 import com.yunzhi.nanyang.common.StringUtils;
13
 import io.swagger.annotations.Api;
15
 import io.swagger.annotations.Api;
18
 import com.yunzhi.nanyang.entity.TaDeviceJob;
20
 import com.yunzhi.nanyang.entity.TaDeviceJob;
19
 import com.yunzhi.nanyang.service.TaDeviceJobService;
21
 import com.yunzhi.nanyang.service.TaDeviceJobService;
20
 
22
 
23
+import javax.servlet.http.HttpServletResponse;
24
+
21
 /**
25
 /**
22
  * 设备作业表;(ta_device_job)表控制层
26
  * 设备作业表;(ta_device_job)表控制层
23
  *
27
  *
45
 //    }
49
 //    }
46
 
50
 
47
     /**
51
     /**
48
-     * 分页查询
52
+     * 设备作业列表
49
      *
53
      *
50
      * @param pageNum  当前页码
54
      * @param pageNum  当前页码
51
      * @param pageSize 每页条数
55
      * @param pageSize 每页条数
70
 
74
 
71
 
75
 
72
     /**
76
     /**
73
-     * 分页查询
77
+     * 设备作业统计
74
      *
78
      *
75
      * @param pageNum  当前页码
79
      * @param pageNum  当前页码
76
      * @param pageSize 每页条数
80
      * @param pageSize 每页条数
77
      * @return 查询结果
81
      * @return 查询结果
78
      */
82
      */
79
-    @ApiOperation("设备作业列表")
83
+    @ApiOperation("设备作业统计")
80
     @GetMapping("/device-job/by-org")
84
     @GetMapping("/device-job/by-org")
81
     public ResponseBean statis(@ApiParam("页码") @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
85
     public ResponseBean statis(@ApiParam("页码") @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
82
                                @ApiParam("单页数据量") @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
86
                                @ApiParam("单页数据量") @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
83
                                @ApiParam("合作社名称") @RequestParam(value = "orgName", required = false) String orgName,
87
                                @ApiParam("合作社名称") @RequestParam(value = "orgName", required = false) String orgName,
84
                                @ApiParam("设备分类") @RequestParam(value = "deviceKind", required = false) String deviceKind,
88
                                @ApiParam("设备分类") @RequestParam(value = "deviceKind", required = false) String deviceKind,
85
                                @ApiParam("设备编号") @RequestParam(value = "deviceNo", required = false) String deviceNo,
89
                                @ApiParam("设备编号") @RequestParam(value = "deviceNo", required = false) String deviceNo,
86
-                               @ApiParam(value = "开始时间", example = "2022-10-01") @RequestParam(value = "startDate", required = false) String startDate,
87
-                               @ApiParam(value = "结束时间", example = "2022-10-31") @RequestParam(value = "endDate", required = false) String endDate) throws Exception {
90
+                               @ApiParam(value = "开始时间", example = "2022-10-01") @RequestParam(value = "startDate") String startDate,
91
+                               @ApiParam(value = "结束时间", example = "2022-10-31") @RequestParam(value = "endDate") String endDate) throws Exception {
88
 
92
 
89
         IPage<TaDeviceJob> pg = new Page<>(pageNum, pageSize);
93
         IPage<TaDeviceJob> pg = new Page<>(pageNum, pageSize);
90
         IPage<TaDeviceJob> list = taDeviceJobService.statisOrgBy(pg, orgName, deviceKind, deviceNo, startDate, endDate);
94
         IPage<TaDeviceJob> list = taDeviceJobService.statisOrgBy(pg, orgName, deviceKind, deviceNo, startDate, endDate);
96
         }});
100
         }});
97
     }
101
     }
98
 
102
 
103
+    /**
104
+     * 设备作业统计-导出
105
+     * @param orgName
106
+     * @param deviceKind
107
+     * @param deviceNo
108
+     * @param startDate
109
+     * @param endDate
110
+     * @param response
111
+     * @return
112
+     * @throws Exception
113
+     */
114
+    @ApiOperation("设备作业统计-导出")
115
+    @GetMapping("/device-job/by-org/export")
116
+    public ResponseBean export(@ApiParam("合作社名称") @RequestParam(value = "orgName", required = false) String orgName,
117
+                               @ApiParam("设备分类") @RequestParam(value = "deviceKind", required = false) String deviceKind,
118
+                               @ApiParam("设备编号") @RequestParam(value = "deviceNo", required = false) String deviceNo,
119
+                               @ApiParam(value = "开始时间", example = "2022-10-01") @RequestParam(value = "startDate") String startDate,
120
+                               @ApiParam(value = "结束时间", example = "2022-10-31") @RequestParam(value = "endDate") String endDate,
121
+                               HttpServletResponse response) throws Exception {
122
+
123
+        List<TaDeviceJob> list = taDeviceJobService.listOrgBy(orgName, deviceKind, deviceNo, startDate, endDate);
124
+
125
+        Double total = 0.0;
126
+        if (list != null || list.size() > 0) {
127
+            for (TaDeviceJob item : list) {
128
+                if ("shensong".equals(item.getDeviceKind())) {
129
+                    item.setDeviceKind("深松机");
130
+                } else {
131
+                    item.setDeviceKind("无人机");
132
+                }
133
+
134
+                if (null != item.getJobArea()) {
135
+                    total += item.getJobArea();
136
+                }
137
+            }
138
+        }
139
+
140
+        try {
141
+            String date = String.format("%s 至 %s", startDate, endDate);
142
+            Double finalTotal = total;
143
+            ExcelUtils.tplExport(response, "job.xlsx", list, "作业统计", (excelWriter, writeSheet) -> {
144
+                Map<String, Object> map = new HashMap<>();
145
+                map.put("date", date);
146
+                map.put("total", finalTotal);
147
+                excelWriter.fill(map, writeSheet);
148
+            });
149
+
150
+            return null;
151
+        } catch (Exception e) {
152
+            e.printStackTrace();
153
+        }
154
+        return ResponseBean.error("导出失败, 请重试");
155
+    }
156
+
99
 //    /**
157
 //    /**
100
 //     * 新增数据
158
 //     * 新增数据
101
 //     *
159
 //     *

+ 9
- 1
src/main/java/com/yunzhi/nanyang/mapper/TaDeviceJobMapper.java View File

6
 import org.apache.ibatis.annotations.Param;
6
 import org.apache.ibatis.annotations.Param;
7
 import com.yunzhi.nanyang.entity.TaDeviceJob;
7
 import com.yunzhi.nanyang.entity.TaDeviceJob;
8
 
8
 
9
- /**
9
+import java.util.List;
10
+
11
+/**
10
  * 设备作业表;(ta_device_job)表数据库访问层
12
  * 设备作业表;(ta_device_job)表数据库访问层
11
  * @author : http://njyunzhi.com
13
  * @author : http://njyunzhi.com
12
  * @date : 2022-11-3
14
  * @date : 2022-11-3
26
                             @Param("deviceNo") String deviceNo,
28
                             @Param("deviceNo") String deviceNo,
27
                             @Param("startDate") String startDate,
29
                             @Param("startDate") String startDate,
28
                             @Param("endDate") String endDate);
30
                             @Param("endDate") String endDate);
31
+
32
+     List<TaDeviceJob> listOrgBy(@Param("orgName") String orgName,
33
+                                 @Param("deviceKind") String deviceKind,
34
+                                 @Param("deviceNo") String deviceNo,
35
+                                 @Param("startDate") String startDate,
36
+                                 @Param("endDate") String endDate);
29
  }
37
  }

+ 5
- 1
src/main/java/com/yunzhi/nanyang/service/TaDeviceJobService.java View File

4
 import com.baomidou.mybatisplus.extension.service.IService;
4
 import com.baomidou.mybatisplus.extension.service.IService;
5
 import com.yunzhi.nanyang.entity.TaDeviceJob;
5
 import com.yunzhi.nanyang.entity.TaDeviceJob;
6
 
6
 
7
- /**
7
+import java.util.List;
8
+
9
+/**
8
  * 设备作业表;(ta_device_job)表服务接口
10
  * 设备作业表;(ta_device_job)表服务接口
9
  * @author : http://njyunzhi.com
11
  * @author : http://njyunzhi.com
10
  * @date : 2022-11-3
12
  * @date : 2022-11-3
14
      IPage<TaDeviceJob> statisOrgBy(IPage<TaDeviceJob> pg, String orgName, String deviceKind, String deviceNo, String startDate, String endDate);
16
      IPage<TaDeviceJob> statisOrgBy(IPage<TaDeviceJob> pg, String orgName, String deviceKind, String deviceNo, String startDate, String endDate);
15
 
17
 
16
      Double statisTotalArea(String orgName, String deviceKind, String deviceNo, String startDate, String endDate);
18
      Double statisTotalArea(String orgName, String deviceKind, String deviceNo, String startDate, String endDate);
19
+
20
+     List<TaDeviceJob> listOrgBy(String orgName, String deviceKind, String deviceNo, String startDate, String endDate);
17
  }
21
  }

+ 7
- 0
src/main/java/com/yunzhi/nanyang/service/impl/TaDeviceJobServiceImpl.java View File

7
 import com.yunzhi.nanyang.mapper.TaDeviceJobMapper;
7
 import com.yunzhi.nanyang.mapper.TaDeviceJobMapper;
8
 import com.yunzhi.nanyang.service.TaDeviceJobService;
8
 import com.yunzhi.nanyang.service.TaDeviceJobService;
9
 
9
 
10
+import java.util.List;
11
+
10
 /**
12
 /**
11
  * 设备作业表;(ta_device_job)表服务实现类
13
  * 设备作业表;(ta_device_job)表服务实现类
12
  *
14
  *
25
     public Double statisTotalArea(String orgName, String deviceKind, String deviceNo, String startDate, String endDate) {
27
     public Double statisTotalArea(String orgName, String deviceKind, String deviceNo, String startDate, String endDate) {
26
         return baseMapper.statisTotalArea(orgName, deviceKind, deviceNo, startDate, endDate);
28
         return baseMapper.statisTotalArea(orgName, deviceKind, deviceNo, startDate, endDate);
27
     }
29
     }
30
+
31
+    @Override
32
+    public List<TaDeviceJob> listOrgBy(String orgName, String deviceKind, String deviceNo, String startDate, String endDate) {
33
+        return baseMapper.listOrgBy(orgName, deviceKind, deviceNo, startDate, endDate);
34
+    }
28
 }
35
 }

BIN
src/main/resources/job.xlsx View File


+ 7
- 0
src/main/resources/mapper/TaDeviceJobMapper.xml View File

37
         SELECT SUM(t.job_area)
37
         SELECT SUM(t.job_area)
38
         <include refid="statisOrg"></include>
38
         <include refid="statisOrg"></include>
39
     </select>
39
     </select>
40
+    <select id="listOrgBy" resultType="com.yunzhi.nanyang.entity.TaDeviceJob">
41
+        SELECT
42
+            m.`name` AS org_name,
43
+            s.`name` AS machinery_name,
44
+            t.*
45
+        <include refid="statisOrg"></include>
46
+    </select>
40
 </mapper>
47
 </mapper>