Commit d32e6a32b58f2d674b867f87008a605c7dd2e6a4
1 parent
21ea0459
点播审核添加 ‘导出excel’ 功能。(根据当前查询条件,导出查询出的内容)
Showing
4 changed files
with
252 additions
and
6 deletions
pom.xml
| @@ -116,6 +116,17 @@ | @@ -116,6 +116,17 @@ | ||
| 116 | <artifactId>nekohtml</artifactId> | 116 | <artifactId>nekohtml</artifactId> |
| 117 | <version>1.9.22</version> | 117 | <version>1.9.22</version> |
| 118 | </dependency> | 118 | </dependency> |
| 119 | + | ||
| 120 | + <dependency> | ||
| 121 | + <groupId>org.apache.poi</groupId> | ||
| 122 | + <artifactId>poi-scratchpad</artifactId> | ||
| 123 | + <version>3.16</version> | ||
| 124 | + </dependency> | ||
| 125 | + <dependency> | ||
| 126 | + <groupId>org.apache.poi</groupId> | ||
| 127 | + <artifactId>poi-ooxml</artifactId> | ||
| 128 | + <version>3.16</version> | ||
| 129 | + </dependency> | ||
| 119 | </dependencies> | 130 | </dependencies> |
| 120 | 131 | ||
| 121 | <build> | 132 | <build> |
src/main/java/com/cnlive/shenhe/controller/VideosController.java
| 1 | package com.cnlive.shenhe.controller; | 1 | package com.cnlive.shenhe.controller; |
| 2 | 2 | ||
| 3 | +import org.apache.poi.xssf.usermodel.XSSFCell; | ||
| 4 | +import org.apache.poi.xssf.usermodel.XSSFRow; | ||
| 5 | +import org.apache.poi.xssf.usermodel.XSSFSheet; | ||
| 6 | +import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||
| 3 | import com.alibaba.fastjson.JSON; | 7 | import com.alibaba.fastjson.JSON; |
| 4 | import com.alibaba.fastjson.JSONObject; | 8 | import com.alibaba.fastjson.JSONObject; |
| 5 | import com.cnlive.shenhe.bean.ErrorEnum; | 9 | import com.cnlive.shenhe.bean.ErrorEnum; |
| @@ -26,7 +30,10 @@ import org.springframework.web.bind.annotation.PostMapping; | @@ -26,7 +30,10 @@ import org.springframework.web.bind.annotation.PostMapping; | ||
| 26 | import org.springframework.web.bind.annotation.RequestMapping; | 30 | import org.springframework.web.bind.annotation.RequestMapping; |
| 27 | import org.springframework.web.bind.annotation.ResponseBody; | 31 | import org.springframework.web.bind.annotation.ResponseBody; |
| 28 | 32 | ||
| 33 | +import javax.servlet.ServletOutputStream; | ||
| 34 | +import javax.servlet.http.HttpServletResponse; | ||
| 29 | import javax.servlet.http.HttpSession; | 35 | import javax.servlet.http.HttpSession; |
| 36 | +import java.io.*; | ||
| 30 | import java.util.List; | 37 | import java.util.List; |
| 31 | 38 | ||
| 32 | @Controller | 39 | @Controller |
| @@ -227,4 +234,157 @@ public class VideosController { | @@ -227,4 +234,157 @@ public class VideosController { | ||
| 227 | } | 234 | } |
| 228 | return videosService.retReceive(ids, userId); | 235 | return videosService.retReceive(ids, userId); |
| 229 | } | 236 | } |
| 237 | + | ||
| 238 | + /** | ||
| 239 | + * 根据条件导出excel | ||
| 240 | + * | ||
| 241 | + * @param video_title | ||
| 242 | + * @param start_date | ||
| 243 | + * @param end_date | ||
| 244 | + * @param state | ||
| 245 | + * @param receive | ||
| 246 | + * @param video_priority | ||
| 247 | + * @param orderByClause | ||
| 248 | + * @param session | ||
| 249 | + * @param response | ||
| 250 | + */ | ||
| 251 | + @GetMapping("excel") | ||
| 252 | + public void getExcel(String video_title, String start_date, String end_date, Integer state, Boolean receive, String video_priority, String orderByClause, HttpSession session, HttpServletResponse response) { | ||
| 253 | + SessionUser sessionUser = (SessionUser) session.getAttribute(SessionUser.getSessionKey()); | ||
| 254 | + Integer spid = sessionUser.getSpid(); | ||
| 255 | + String userId = sessionUser.getUserId(); | ||
| 256 | + if (spid == 0) spid = null; | ||
| 257 | + List<ShyVideos> shyVideosList = videosService.findByCondition(video_title, start_date, end_date, state, receive, video_priority, orderByClause, spid, userId); | ||
| 258 | + String fileName = "点播数据"; | ||
| 259 | + String auditor = "";//审核员名字 | ||
| 260 | + String state1 = "";//审核状态 1已审核 2审核拒绝 0未审核 | ||
| 261 | + XSSFWorkbook wb = new XSSFWorkbook(); | ||
| 262 | + ServletOutputStream out = null; | ||
| 263 | + BufferedInputStream bis = null; | ||
| 264 | + BufferedOutputStream bos = null; | ||
| 265 | + try { | ||
| 266 | + XSSFSheet sheetlist = wb.createSheet(fileName); | ||
| 267 | + XSSFRow row = sheetlist.createRow(0);//行 | ||
| 268 | + XSSFCell cell = row.createCell(0);//列 | ||
| 269 | + cell.setCellValue("id"); | ||
| 270 | + cell = row.createCell(1);//列 | ||
| 271 | + cell.setCellValue("标题"); | ||
| 272 | + cell = row.createCell(2);//列 | ||
| 273 | + cell.setCellValue("视频地址"); | ||
| 274 | + cell = row.createCell(3);//列 | ||
| 275 | + cell.setCellValue("标题图"); | ||
| 276 | + cell = row.createCell(4);//列 | ||
| 277 | + cell.setCellValue("视频标签"); | ||
| 278 | + cell = row.createCell(5);//列 | ||
| 279 | + cell.setCellValue("审核员"); | ||
| 280 | + cell = row.createCell(6);//列 | ||
| 281 | + cell.setCellValue("审核意见"); | ||
| 282 | + cell = row.createCell(7);//列 | ||
| 283 | + cell.setCellValue("状态"); | ||
| 284 | + cell = row.createCell(8);//列 | ||
| 285 | + cell.setCellValue("视频关键字"); | ||
| 286 | + cell = row.createCell(9);//列 | ||
| 287 | + cell.setCellValue("视频简介"); | ||
| 288 | + cell = row.createCell(10);//列 | ||
| 289 | + cell.setCellValue("视频id"); | ||
| 290 | + cell = row.createCell(11);//列 | ||
| 291 | + cell.setCellValue("创建时间"); | ||
| 292 | + cell = row.createCell(12);//列 | ||
| 293 | + cell.setCellValue("视频上传时间"); | ||
| 294 | + cell = row.createCell(13);//列 | ||
| 295 | + cell.setCellValue("视频时长(秒)"); | ||
| 296 | + cell = row.createCell(14);//列 | ||
| 297 | + cell.setCellValue("spid"); | ||
| 298 | + for (int i = 0; i < shyVideosList.size(); i++) { | ||
| 299 | + row = sheetlist.createRow((short) (i + 1));//行 | ||
| 300 | + cell = row.createCell(0);//列 | ||
| 301 | + cell.setCellValue(shyVideosList.get(i).getId()); | ||
| 302 | + cell = row.createCell(1);//列 | ||
| 303 | + cell.setCellValue(shyVideosList.get(i).getVideo_title()); | ||
| 304 | + cell = row.createCell(2);//列 | ||
| 305 | + cell.setCellValue(shyVideosList.get(i).getVideo_url()); | ||
| 306 | + cell = row.createCell(3);//列 | ||
| 307 | + cell.setCellValue(shyVideosList.get(i).getVideo_poster()); | ||
| 308 | + cell = row.createCell(4);//列 | ||
| 309 | + cell.setCellValue(shyVideosList.get(i).getVideo_tags()); | ||
| 310 | + cell = row.createCell(5);//列 | ||
| 311 | + /* 审核员需要做处理*/ | ||
| 312 | + if (shyVideosList.get(i).getState() != CommonConst.AUDIT_INTT) { | ||
| 313 | + auditor = "白名单"; | ||
| 314 | + String auditor_id = shyVideosList.get(i).getAuditor_id(); | ||
| 315 | + if (CommonUtils.isNotEmpty(auditor_id)) { | ||
| 316 | + ShyUsers user = new ShyUsers(); | ||
| 317 | + user.setUser_id(auditor_id); | ||
| 318 | + user = usersService.select(user); | ||
| 319 | + if (CommonUtils.isNotNull(user)) { | ||
| 320 | + String userName = CommonUtils.isEmpty(user.getUsername()) ? "" : user.getUsername(); | ||
| 321 | + String email = CommonUtils.isEmpty(user.getEmail()) ? "" : user.getEmail(); | ||
| 322 | + auditor = userName + email; | ||
| 323 | + } | ||
| 324 | + } | ||
| 325 | + } | ||
| 326 | + cell.setCellValue(auditor); | ||
| 327 | + cell = row.createCell(6);//列 | ||
| 328 | + cell.setCellValue(shyVideosList.get(i).getMsg()); | ||
| 329 | + cell = row.createCell(7);//列 | ||
| 330 | + /*状态需要处理成用户可读*/ | ||
| 331 | + if (shyVideosList.get(i).getState() == 0) { | ||
| 332 | + state1 = "未审核"; | ||
| 333 | + } else if (shyVideosList.get(i).getState() == 1) { | ||
| 334 | + state1 = "已审核"; | ||
| 335 | + } else { | ||
| 336 | + state1 = "审核拒绝"; | ||
| 337 | + } | ||
| 338 | + cell.setCellValue(state1); | ||
| 339 | + cell = row.createCell(8);//列 | ||
| 340 | + cell.setCellValue(shyVideosList.get(i).getVideo_keyword()); | ||
| 341 | + cell = row.createCell(9);//列 | ||
| 342 | + cell.setCellValue(shyVideosList.get(i).getVideo_desc()); | ||
| 343 | + cell = row.createCell(10);//列 | ||
| 344 | + cell.setCellValue(shyVideosList.get(i).getVideo_id()); | ||
| 345 | + cell = row.createCell(11);//列 | ||
| 346 | + cell.setCellValue(CommonUtils.formatDate(shyVideosList.get(i).getCreated_at(), "M/d/yyyy HH:mm:SS")); | ||
| 347 | + cell = row.createCell(12);//列 | ||
| 348 | + cell.setCellValue(CommonUtils.formatDate(shyVideosList.get(i).getVideo_upload_time(), "M/d/yyyy HH:mm:SS")); | ||
| 349 | + cell = row.createCell(13);//列 | ||
| 350 | + cell.setCellValue(shyVideosList.get(i).getDuration()); | ||
| 351 | + cell = row.createCell(14);//列 | ||
| 352 | + cell.setCellValue(shyVideosList.get(i).getSpid()); | ||
| 353 | + } | ||
| 354 | + | ||
| 355 | + ByteArrayOutputStream os = new ByteArrayOutputStream(); | ||
| 356 | + wb.write(os); | ||
| 357 | + byte[] content = os.toByteArray(); | ||
| 358 | + InputStream is = new ByteArrayInputStream(content); | ||
| 359 | + response.setContentType("application/vnd.ms-excel;charset=utf-8"); | ||
| 360 | + response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xlsx").getBytes(), "iso-8859-1")); | ||
| 361 | + out = response.getOutputStream(); | ||
| 362 | + bis = new BufferedInputStream(is); | ||
| 363 | + bos = new BufferedOutputStream(out); | ||
| 364 | + byte[] buff = new byte[2048]; | ||
| 365 | + int bytesRead; | ||
| 366 | + while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { | ||
| 367 | + bos.write(buff, 0, bytesRead); | ||
| 368 | + } | ||
| 369 | + } catch (final Exception e) { | ||
| 370 | + e.printStackTrace(); | ||
| 371 | + try { | ||
| 372 | + if (bis != null) | ||
| 373 | + bis.close(); | ||
| 374 | + if (bos != null) | ||
| 375 | + bos.close(); | ||
| 376 | + } catch (Exception e1) { | ||
| 377 | + e1.printStackTrace(); | ||
| 378 | + } | ||
| 379 | + } finally { | ||
| 380 | + try { | ||
| 381 | + if (bis != null) | ||
| 382 | + bis.close(); | ||
| 383 | + if (bos != null) | ||
| 384 | + bos.close(); | ||
| 385 | + } catch (Exception e2) { | ||
| 386 | + e2.printStackTrace(); | ||
| 387 | + } | ||
| 388 | + } | ||
| 389 | + } | ||
| 230 | } | 390 | } |
src/main/java/com/cnlive/shenhe/serviceImpl/VideosServiceImpl.java
| @@ -173,18 +173,79 @@ public class VideosServiceImpl { | @@ -173,18 +173,79 @@ public class VideosServiceImpl { | ||
| 173 | String[] cids = ids.split(","); | 173 | String[] cids = ids.split(","); |
| 174 | for (String cid : cids) { | 174 | for (String cid : cids) { |
| 175 | ShyVideos shyVideos = shyVideosMapper.selectByPrimaryKey(Integer.parseInt(cid)); | 175 | ShyVideos shyVideos = shyVideosMapper.selectByPrimaryKey(Integer.parseInt(cid)); |
| 176 | - if (shyVideos.getState() == CommonConst.AUDIT_INTT && shyVideos.getReceive() && shyVideos.getReceive_user_id().equals(userId) ) { | 176 | + if (shyVideos.getState() == CommonConst.AUDIT_INTT && shyVideos.getReceive() && shyVideos.getReceive_user_id().equals(userId)) { |
| 177 | shyVideos.setReceive(CommonConst.RECEIVE_BEFORE); | 177 | shyVideos.setReceive(CommonConst.RECEIVE_BEFORE); |
| 178 | shyVideos.setReceive_user_id(null); | 178 | shyVideos.setReceive_user_id(null); |
| 179 | int i = shyVideosMapper.updateByPrimaryKeySelective(shyVideos); | 179 | int i = shyVideosMapper.updateByPrimaryKeySelective(shyVideos); |
| 180 | if (i != 1) { | 180 | if (i != 1) { |
| 181 | - return new ResponseBean(ErrorEnum.ERROR.getErrorCode(),"退领失败,请重试"); | 181 | + return new ResponseBean(ErrorEnum.ERROR.getErrorCode(), "退领失败,请重试"); |
| 182 | } | 182 | } |
| 183 | } else { | 183 | } else { |
| 184 | - return new ResponseBean(ErrorEnum.ERROR.getErrorCode(),"退领失败,您选中的内容包含已退领的或已经审核的"); | 184 | + return new ResponseBean(ErrorEnum.ERROR.getErrorCode(), "退领失败,您选中的内容包含已退领的或已经审核的"); |
| 185 | } | 185 | } |
| 186 | } | 186 | } |
| 187 | - return new ResponseBean(ErrorEnum.SUCCESS.getErrorCode(),"已退领"); | 187 | + return new ResponseBean(ErrorEnum.SUCCESS.getErrorCode(), "已退领"); |
| 188 | + } | ||
| 189 | + | ||
| 190 | + /** | ||
| 191 | + * 根据条件导出数据excel | ||
| 192 | + * | ||
| 193 | + * @param video_title | ||
| 194 | + * @param start_date | ||
| 195 | + * @param end_date | ||
| 196 | + * @param state | ||
| 197 | + * @param receive | ||
| 198 | + * @param video_priority | ||
| 199 | + * @param orderByClause | ||
| 200 | + * @param spid | ||
| 201 | + * @param userId | ||
| 202 | + * @return | ||
| 203 | + */ | ||
| 204 | + public List<ShyVideos> findByCondition(String video_title, String start_date, String end_date, Integer state, Boolean receive, String video_priority, String orderByClause, Integer spid, String userId) { | ||
| 205 | + Example example = new Example(ShyVideos.class); | ||
| 206 | + Example.Criteria criteria = example.createCriteria(); | ||
| 207 | + Example.Criteria criteria2 = example.createCriteria(); | ||
| 208 | + if (CommonUtils.isNotEmpty(orderByClause)) { | ||
| 209 | + example.setOrderByClause(orderByClause); | ||
| 210 | + } | ||
| 211 | + if (CommonUtils.isNotEmpty(start_date) && CommonUtils.isNotEmpty(end_date)) { | ||
| 212 | + Timestamp startdate = null; | ||
| 213 | + Timestamp enddate = null; | ||
| 214 | + try { | ||
| 215 | + startdate = CommonUtils.parseDate(start_date, "yyyy-MM-dd HH:mm:ss"); | ||
| 216 | + enddate = CommonUtils.parseDate(end_date, "yyyy-MM-dd HH:mm:ss"); | ||
| 217 | + } catch (ParseException e) { | ||
| 218 | + e.printStackTrace(); | ||
| 219 | + } | ||
| 220 | + criteria.andGreaterThanOrEqualTo("video_upload_time", startdate); | ||
| 221 | + criteria.andLessThanOrEqualTo("video_upload_time", enddate); | ||
| 222 | + } | ||
| 223 | + if (CommonUtils.isNotEmpty(video_title)) { | ||
| 224 | + criteria.andLike("video_title", "%" + video_title + "%"); | ||
| 225 | + } | ||
| 226 | + if (CommonUtils.isNotNull(state) && state == 0) { | ||
| 227 | + criteria.andEqualTo("state", state); | ||
| 228 | + } else if (CommonUtils.isNotNull(state) && state == 1) { | ||
| 229 | + criteria.andEqualTo("state", state); | ||
| 230 | + criteria2.andEqualTo("state", 2); | ||
| 231 | + example.or(criteria2); | ||
| 232 | + } | ||
| 233 | + if (CommonUtils.isNotEmpty(video_priority)) { | ||
| 234 | + criteria.andEqualTo("video_priority", video_priority); | ||
| 235 | + } | ||
| 236 | + if (CommonUtils.isNotNull(spid)) { | ||
| 237 | + criteria.andEqualTo("spid", spid); | ||
| 238 | + } | ||
| 239 | + if (CommonUtils.isNotNull(receive)) { | ||
| 240 | + criteria.andEqualTo("receive", receive); | ||
| 241 | + if (receive == true) { | ||
| 242 | + criteria.andEqualTo("receive_user_id", userId); | ||
| 243 | + } | ||
| 244 | + } | ||
| 245 | + //默认按上传时间倒序排序 | ||
| 246 | + //example.setOrderByClause("video_upload_time desc"); | ||
| 247 | + List<ShyVideos> shyVideosList = shyVideosMapper.selectByExample(example); | ||
| 248 | + return shyVideosList; | ||
| 188 | } | 249 | } |
| 189 | 250 | ||
| 190 | 251 |
src/main/resources/templates/page/video.html
| @@ -49,6 +49,10 @@ | @@ -49,6 +49,10 @@ | ||
| 49 | 49 | ||
| 50 | <div class="btn-group margin-bottom pull-right"> | 50 | <div class="btn-group margin-bottom pull-right"> |
| 51 | <button type="button" class="btn btn-sm margin-r-5 filter " | 51 | <button type="button" class="btn btn-sm margin-r-5 filter " |
| 52 | + th:onclick="'javascript:daochu()'" value="" id="excel"> | ||
| 53 | + 导出excel | ||
| 54 | + </button> | ||
| 55 | + <button type="button" class="btn btn-sm margin-r-5 filter " | ||
| 52 | th:onclick="'javascript:quanbu()'" value="" id="quanbu"> | 56 | th:onclick="'javascript:quanbu()'" value="" id="quanbu"> |
| 53 | 全部 | 57 | 全部 |
| 54 | </button> | 58 | </button> |
| @@ -177,7 +181,8 @@ | @@ -177,7 +181,8 @@ | ||
| 177 | <tr data-index="0" th:each="video : ${videoPage.list}"> | 181 | <tr data-index="0" th:each="video : ${videoPage.list}"> |
| 178 | <td class="bs-checkbox "><input data-index="0" name="btSelectItem" | 182 | <td class="bs-checkbox "><input data-index="0" name="btSelectItem" |
| 179 | type="checkbox" th:value="${video.id}"></td> | 183 | type="checkbox" th:value="${video.id}"></td> |
| 180 | - <td style="text-align: center; width: 6%;" th:text="${video.spid_desc}"></td> | 184 | + <td style="text-align: center; width: 6%;" |
| 185 | + th:text="${video.spid_desc}"></td> | ||
| 181 | <td style="text-align: center; width: 20%;" th:text="${video.video_title}"> | 186 | <td style="text-align: center; width: 20%;" th:text="${video.video_title}"> |
| 182 | 邓建国正面PK冯小刚 | 187 | 邓建国正面PK冯小刚 |
| 183 | </td> | 188 | </td> |
| @@ -203,7 +208,10 @@ | @@ -203,7 +208,10 @@ | ||
| 203 | <td style="text-align: center; width: 17%;"> | 208 | <td style="text-align: center; width: 17%;"> |
| 204 | <a class="detail" th:href="@{'/videos/details/?id='+${video.id}}"> | 209 | <a class="detail" th:href="@{'/videos/details/?id='+${video.id}}"> |
| 205 | <!--th:if="${ (video.receive==true and session.sessionUser.userId==video.receive_user_id) or (video.state==1 or video.state==2) }"--> | 210 | <!--th:if="${ (video.receive==true and session.sessionUser.userId==video.receive_user_id) or (video.state==1 or video.state==2) }"--> |
| 206 | - <button class="btn btn-info btn-sm" th:style="${state1 eq '0' && receive1 eq 'false'} ? 'display: none ' : ' '">查看</button> | 211 | + <button class="btn btn-info btn-sm" |
| 212 | + th:style="${state1 eq '0' && receive1 eq 'false'} ? 'display: none ' : ' '"> | ||
| 213 | + 查看 | ||
| 214 | + </button> | ||
| 207 | </a> | 215 | </a> |
| 208 | <span th:if="${video.state==0 and !video.receive}"> </span> | 216 | <span th:if="${video.state==0 and !video.receive}"> </span> |
| 209 | <a th:href="@{'javascript:applyReceive('+${video.id}+')'}" | 217 | <a th:href="@{'javascript:applyReceive('+${video.id}+')'}" |
| @@ -310,6 +318,12 @@ | @@ -310,6 +318,12 @@ | ||
| 310 | } | 318 | } |
| 311 | } | 319 | } |
| 312 | 320 | ||
| 321 | + //导出excel | ||
| 322 | + function daochu() { | ||
| 323 | + var param = location.search; | ||
| 324 | + window.location.href = "/videos/excel" + param; | ||
| 325 | + } | ||
| 326 | + | ||
| 313 | //全部 | 327 | //全部 |
| 314 | function quanbu() { | 328 | function quanbu() { |
| 315 | window.location.href = "/videos/page?video_title=&start_date=&end_date=&state=&receive=&video_priority="; | 329 | window.location.href = "/videos/page?video_title=&start_date=&end_date=&state=&receive=&video_priority="; |