kangwei: 会议纪要下载
正在显示
13 个修改的文件
包含
327 行增加
和
170 行删除
... | @@ -2,6 +2,7 @@ package com.skua.modules.ajh.controller; | ... | @@ -2,6 +2,7 @@ package com.skua.modules.ajh.controller; |
2 | 2 | ||
3 | import java.io.*; | 3 | import java.io.*; |
4 | import java.net.URLEncoder; | 4 | import java.net.URLEncoder; |
5 | |||
5 | import java.util.*; | 6 | import java.util.*; |
6 | import java.net.URLDecoder; | 7 | import java.net.URLDecoder; |
7 | import javax.servlet.http.HttpServletRequest; | 8 | import javax.servlet.http.HttpServletRequest; |
... | @@ -23,23 +24,23 @@ import com.baomidou.mybatisplus.core.metadata.IPage; | ... | @@ -23,23 +24,23 @@ import com.baomidou.mybatisplus.core.metadata.IPage; |
23 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 24 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
24 | import com.skua.modules.ajh.service.IAjhMeetingSendService; | 25 | import com.skua.modules.ajh.service.IAjhMeetingSendService; |
25 | import com.skua.modules.ajh.service.IAjhMeetingService; | 26 | import com.skua.modules.ajh.service.IAjhMeetingService; |
26 | import com.skua.modules.ajh.util.Base64Utils; | 27 | |
27 | import com.skua.modules.ajh.util.WordUtil; | 28 | import com.skua.modules.guest.util.DateUtil; |
28 | import com.skua.modules.ajh.vo.ExportAjhMeetingMinutesVO; | 29 | import com.skua.modules.system.service.ISysUserService; |
29 | import lombok.extern.slf4j.Slf4j; | 30 | import lombok.extern.slf4j.Slf4j; |
30 | 31 | ||
31 | import org.apache.poi.xwpf.usermodel.XWPFDocument; | ||
32 | import org.bytedeco.javacv.FrameFilter; | ||
33 | import org.jeecgframework.poi.excel.ExcelImportUtil; | 32 | import org.jeecgframework.poi.excel.ExcelImportUtil; |
34 | import org.jeecgframework.poi.excel.def.NormalExcelConstants; | 33 | import org.jeecgframework.poi.excel.def.NormalExcelConstants; |
35 | import org.jeecgframework.poi.excel.entity.ExportParams; | 34 | import org.jeecgframework.poi.excel.entity.ExportParams; |
36 | import org.jeecgframework.poi.excel.entity.ImportParams; | 35 | import org.jeecgframework.poi.excel.entity.ImportParams; |
37 | import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; | 36 | import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; |
38 | 37 | ||
39 | import org.jeecgframework.poi.word.WordExportUtil; | ||
40 | import org.jeecgframework.poi.word.entity.MyXWPFDocument; | 38 | import org.jeecgframework.poi.word.entity.MyXWPFDocument; |
41 | import org.jeecgframework.poi.word.entity.WordImageEntity; | 39 | import org.jeecgframework.poi.word.entity.WordImageEntity; |
42 | import org.springframework.beans.factory.annotation.Autowired; | 40 | import org.springframework.beans.factory.annotation.Autowired; |
41 | import org.springframework.beans.factory.annotation.Value; | ||
42 | import org.springframework.core.io.ClassPathResource; | ||
43 | import org.springframework.core.io.Resource; | ||
43 | import org.springframework.web.bind.annotation.*; | 44 | import org.springframework.web.bind.annotation.*; |
44 | import org.springframework.web.multipart.MultipartFile; | 45 | import org.springframework.web.multipart.MultipartFile; |
45 | import org.springframework.web.multipart.MultipartHttpServletRequest; | 46 | import org.springframework.web.multipart.MultipartHttpServletRequest; |
... | @@ -48,6 +49,8 @@ import com.alibaba.fastjson.JSON; | ... | @@ -48,6 +49,8 @@ import com.alibaba.fastjson.JSON; |
48 | import io.swagger.annotations.Api; | 49 | import io.swagger.annotations.Api; |
49 | import io.swagger.annotations.ApiOperation; | 50 | import io.swagger.annotations.ApiOperation; |
50 | 51 | ||
52 | |||
53 | |||
51 | /** | 54 | /** |
52 | * <pre> | 55 | * <pre> |
53 | * 会议纪要管理 | 56 | * 会议纪要管理 |
... | @@ -60,7 +63,8 @@ import io.swagger.annotations.ApiOperation; | ... | @@ -60,7 +63,8 @@ import io.swagger.annotations.ApiOperation; |
60 | @RestController | 63 | @RestController |
61 | @RequestMapping("/ajh/meetingMinutes") | 64 | @RequestMapping("/ajh/meetingMinutes") |
62 | public class AjhMeetingMinutesController { | 65 | public class AjhMeetingMinutesController { |
63 | 66 | @Value("${skua.path.upload}") | |
67 | private String upLoadPath; | ||
64 | @Autowired | 68 | @Autowired |
65 | private IAjhMeetingMinutesService ajhMeetingMinutesService;//会议纪要 | 69 | private IAjhMeetingMinutesService ajhMeetingMinutesService;//会议纪要 |
66 | 70 | ||
... | @@ -73,6 +77,9 @@ public class AjhMeetingMinutesController { | ... | @@ -73,6 +77,9 @@ public class AjhMeetingMinutesController { |
73 | @Autowired | 77 | @Autowired |
74 | private IAjhMeetingAttendService meetingAttendService;//会议签到记录 | 78 | private IAjhMeetingAttendService meetingAttendService;//会议签到记录 |
75 | 79 | ||
80 | @Autowired | ||
81 | private ISysUserService userService; | ||
82 | |||
76 | 83 | ||
77 | /** | 84 | /** |
78 | * <pre> | 85 | * <pre> |
... | @@ -91,9 +98,9 @@ public class AjhMeetingMinutesController { | ... | @@ -91,9 +98,9 @@ public class AjhMeetingMinutesController { |
91 | @ApiOperation(value="会议纪要管理-分页列表查询", notes="会议纪要管理-分页列表查询") | 98 | @ApiOperation(value="会议纪要管理-分页列表查询", notes="会议纪要管理-分页列表查询") |
92 | @GetMapping(value = "/list") | 99 | @GetMapping(value = "/list") |
93 | public Result<IPage<AjhMeetingMinutes>> queryPageList(AjhMeetingMinutes ajhMeetingMinutes, | 100 | public Result<IPage<AjhMeetingMinutes>> queryPageList(AjhMeetingMinutes ajhMeetingMinutes, |
94 | @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, | 101 | @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, |
95 | @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, | 102 | @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, |
96 | HttpServletRequest req) { | 103 | HttpServletRequest req) { |
97 | Result<IPage<AjhMeetingMinutes>> result = new Result<IPage<AjhMeetingMinutes>>(); | 104 | Result<IPage<AjhMeetingMinutes>> result = new Result<IPage<AjhMeetingMinutes>>(); |
98 | QueryWrapper<AjhMeetingMinutes> queryWrapper = QueryGenerator.initQueryWrapper(ajhMeetingMinutes, req.getParameterMap()); | 105 | QueryWrapper<AjhMeetingMinutes> queryWrapper = QueryGenerator.initQueryWrapper(ajhMeetingMinutes, req.getParameterMap()); |
99 | Page<AjhMeetingMinutes> page = new Page<AjhMeetingMinutes>(pageNo, pageSize); | 106 | Page<AjhMeetingMinutes> page = new Page<AjhMeetingMinutes>(pageNo, pageSize); |
... | @@ -211,7 +218,7 @@ public class AjhMeetingMinutesController { | ... | @@ -211,7 +218,7 @@ public class AjhMeetingMinutesController { |
211 | @GetMapping(value = "/getByMeetId") | 218 | @GetMapping(value = "/getByMeetId") |
212 | public Result<AjhMeetingMinutes> queryByMeetId(@RequestParam(name="meetId",required=true) String meetId) { | 219 | public Result<AjhMeetingMinutes> queryByMeetId(@RequestParam(name="meetId",required=true) String meetId) { |
213 | Result<AjhMeetingMinutes> result = new Result<AjhMeetingMinutes>(); | 220 | Result<AjhMeetingMinutes> result = new Result<AjhMeetingMinutes>(); |
214 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesService.queryByMeetId(meetId); | 221 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesService.queryByMeetsId(meetId); |
215 | if(ajhMeetingMinutes != null) { | 222 | if(ajhMeetingMinutes != null) { |
216 | result.setResult(ajhMeetingMinutes); | 223 | result.setResult(ajhMeetingMinutes); |
217 | result.setSuccess(true); | 224 | result.setSuccess(true); |
... | @@ -243,7 +250,7 @@ public class AjhMeetingMinutesController { | ... | @@ -243,7 +250,7 @@ public class AjhMeetingMinutesController { |
243 | return result; | 250 | return result; |
244 | } | 251 | } |
245 | 252 | ||
246 | /** | 253 | /** |
247 | * <pre> | 254 | * <pre> |
248 | * 导出excel | 255 | * 导出excel |
249 | * </pre> | 256 | * </pre> |
... | @@ -254,33 +261,33 @@ public class AjhMeetingMinutesController { | ... | @@ -254,33 +261,33 @@ public class AjhMeetingMinutesController { |
254 | * @Description: TODO(这里描述这个方法的需求变更情况) | 261 | * @Description: TODO(这里描述这个方法的需求变更情况) |
255 | */ | 262 | */ |
256 | 263 | ||
257 | @RequestMapping(value = "/exportXls") | 264 | @RequestMapping(value = "/exportXls") |
258 | public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) { | 265 | public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) { |
259 | // Step.1 组装查询条件 | 266 | // Step.1 组装查询条件 |
260 | QueryWrapper<AjhMeetingMinutes> queryWrapper = null; | 267 | QueryWrapper<AjhMeetingMinutes> queryWrapper = null; |
261 | try { | 268 | try { |
262 | String paramsStr = request.getParameter("paramsStr"); | 269 | String paramsStr = request.getParameter("paramsStr"); |
263 | if (ConvertUtils.isNotEmpty(paramsStr)) { | 270 | if (ConvertUtils.isNotEmpty(paramsStr)) { |
264 | String deString = URLDecoder.decode(paramsStr, "UTF-8"); | 271 | String deString = URLDecoder.decode(paramsStr, "UTF-8"); |
265 | AjhMeetingMinutes ajhMeetingMinutes = JSON.parseObject(deString, AjhMeetingMinutes.class); | 272 | AjhMeetingMinutes ajhMeetingMinutes = JSON.parseObject(deString, AjhMeetingMinutes.class); |
266 | queryWrapper = QueryGenerator.initQueryWrapper(ajhMeetingMinutes, request.getParameterMap()); | 273 | queryWrapper = QueryGenerator.initQueryWrapper(ajhMeetingMinutes, request.getParameterMap()); |
267 | } | 274 | } |
268 | } catch (UnsupportedEncodingException e) { | 275 | } catch (UnsupportedEncodingException e) { |
269 | e.printStackTrace(); | 276 | e.printStackTrace(); |
270 | } | 277 | } |
271 | 278 | ||
272 | //Step.2 AutoPoi 导出Excel | 279 | //Step.2 AutoPoi 导出Excel |
273 | ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); | 280 | ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); |
274 | List<AjhMeetingMinutes> pageList = ajhMeetingMinutesService.list(queryWrapper); | 281 | List<AjhMeetingMinutes> pageList = ajhMeetingMinutesService.list(queryWrapper); |
275 | //导出文件名称 | 282 | //导出文件名称 |
276 | mv.addObject(NormalExcelConstants.FILE_NAME, "会议纪要管理列表"); | 283 | mv.addObject(NormalExcelConstants.FILE_NAME, "会议纪要管理列表"); |
277 | mv.addObject(NormalExcelConstants.CLASS, AjhMeetingMinutes.class); | 284 | mv.addObject(NormalExcelConstants.CLASS, AjhMeetingMinutes.class); |
278 | mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("会议纪要管理列表数据", "导出人:Jeecg", "导出信息")); | 285 | mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("会议纪要管理列表数据", "导出人:Jeecg", "导出信息")); |
279 | mv.addObject(NormalExcelConstants.DATA_LIST, pageList); | 286 | mv.addObject(NormalExcelConstants.DATA_LIST, pageList); |
280 | return mv; | 287 | return mv; |
281 | } | 288 | } |
282 | 289 | ||
283 | /** | 290 | /** |
284 | * <pre> | 291 | * <pre> |
285 | * 通过excel导入数据 | 292 | * 通过excel导入数据 |
286 | * </pre> | 293 | * </pre> |
... | @@ -290,96 +297,136 @@ public class AjhMeetingMinutesController { | ... | @@ -290,96 +297,136 @@ public class AjhMeetingMinutesController { |
290 | * @author 开发者姓名, 开发时间 | 297 | * @author 开发者姓名, 开发时间 |
291 | * @Description: TODO(这里描述这个方法的需求变更情况) | 298 | * @Description: TODO(这里描述这个方法的需求变更情况) |
292 | */ | 299 | */ |
293 | @RequestMapping(value = "/importExcel", method = RequestMethod.POST) | 300 | @RequestMapping(value = "/importExcel", method = RequestMethod.POST) |
294 | public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { | 301 | public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { |
295 | MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; | 302 | MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; |
296 | Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); | 303 | Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); |
297 | for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { | 304 | for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { |
298 | MultipartFile file = entity.getValue();// 获取上传文件对象 | 305 | MultipartFile file = entity.getValue();// 获取上传文件对象 |
299 | ImportParams params = new ImportParams(); | 306 | ImportParams params = new ImportParams(); |
300 | params.setTitleRows(2); | 307 | params.setTitleRows(2); |
301 | params.setHeadRows(1); | 308 | params.setHeadRows(1); |
302 | params.setNeedSave(true); | 309 | params.setNeedSave(true); |
303 | try { | 310 | try { |
304 | List<AjhMeetingMinutes> listAjhMeetingMinutess = ExcelImportUtil.importExcel(file.getInputStream(), AjhMeetingMinutes.class, params); | 311 | List<AjhMeetingMinutes> listAjhMeetingMinutess = ExcelImportUtil.importExcel(file.getInputStream(), AjhMeetingMinutes.class, params); |
305 | ajhMeetingMinutesService.saveBatch(listAjhMeetingMinutess); | 312 | ajhMeetingMinutesService.saveBatch(listAjhMeetingMinutess); |
306 | return Result.ok("文件导入成功!数据行数:" + listAjhMeetingMinutess.size()); | 313 | return Result.ok("文件导入成功!数据行数:" + listAjhMeetingMinutess.size()); |
307 | } catch (Exception e) { | 314 | } catch (Exception e) { |
308 | log.error(e.getMessage(),e); | 315 | log.error(e.getMessage(),e); |
309 | return Result.error("文件导入失败:"+e.getMessage()); | 316 | return Result.error("文件导入失败:"+e.getMessage()); |
310 | } finally { | 317 | } finally { |
311 | try { | 318 | try { |
312 | file.getInputStream().close(); | 319 | file.getInputStream().close(); |
313 | } catch (IOException e) { | 320 | } catch (IOException e) { |
314 | e.printStackTrace(); | 321 | e.printStackTrace(); |
315 | } | 322 | } |
316 | } | 323 | } |
317 | } | 324 | } |
318 | return Result.ok("文件导入失败!"); | 325 | return Result.ok("文件导入失败!"); |
319 | } | 326 | } |
320 | /*** | 327 | /*** |
321 | * 下载会议纪要 | 328 | * 下载会议纪要 |
322 | * @param meetsId | 329 | * @param meetsId |
323 | * @param response | 330 | * @param response |
324 | */ | 331 | */ |
325 | @AutoLog(value = "会议纪要管理-通过会议纪要id下载会议纪要") | ||
326 | @ApiOperation(value="会议纪要管理-通过id下载会议纪要", notes="会议纪要管理-通过id下载会议纪要") | ||
327 | @GetMapping("/exportWord") | 332 | @GetMapping("/exportWord") |
328 | public void exportWordData(@RequestParam(name="id",required=true) String meetsId,HttpServletResponse response ) { | 333 | public void exportWordData(@RequestParam(name="id",required=true) String meetsId, HttpServletResponse response ) { |
329 | String templatePath = "D:\\test\\会议模板-2.docx";//导出模板文件名称 | 334 | //String templatePath = "D:\\test\\会议模板-2.docx";//导出模板文件名称 |
335 | String templatePath = upLoadPath + File.separator ; | ||
336 | String exportName = "会议纪要.docx";//导出文件名称 | ||
330 | 337 | ||
331 | String exportName = "****---会议纪要.docx";//导出文件名称 | 338 | Map<String ,Object> paramMap = initParamMap();//参数map集合 |
332 | Map<String ,Object> paramMap = new HashMap<String,Object>(); | ||
333 | 339 | ||
334 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesService.queryByMeetId(meetsId); | ||
335 | ExportAjhMeetingMinutesVO exprotVo = new ExportAjhMeetingMinutesVO(); | ||
336 | // 标题:meetTitile 机构名称:orgDepart 纪要图片 , 住持人 ;纪要内容 ; 会议地点 | ||
337 | exprotVo.convert( exprotVo , ajhMeetingMinutes); | ||
338 | // 会议记录 | 340 | // 会议记录 |
339 | AjhMeetingSend meetingSend = meetingSendService.getById( meetsId ); | 341 | AjhMeetingSend meetingSend = meetingSendService.getById( meetsId ); |
340 | //会议通知 | 342 | // 会议通知 |
341 | AjhMeeting meeting = meetingService.getById( meetsId ); | 343 | AjhMeeting meeting = meetingService.getById( meetingSend.getMeetId() ); |
344 | //会议纪要 | ||
345 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesService.queryByMeetsId(meetsId); | ||
346 | //ExportAjhMeetingMinutesVO exprotVo = new ExportAjhMeetingMinutesVO(); | ||
347 | |||
348 | /****************会议通知**********************/ | ||
349 | if(meeting != null ){ | ||
350 | templatePath = templatePath + meeting.getMinutesTemplate();// 会议纪要导出模板路径 | ||
351 | paramMap.put("meetTitile", meeting.getMeetTitile() );//会议标题 | ||
352 | paramMap.put( "sender",meeting.getSender());//发起人 | ||
353 | paramMap.put("sendTime",null); | ||
354 | if(meeting.getSendTime() != null ){ | ||
355 | paramMap.put("sendTime",DateUtil.formatDate(meeting.getSendTime(),"yyyy年MM月dd日"));//会议发送时间 | ||
356 | } | ||
357 | } | ||
358 | //paramMap.put("startTime",meeting.getStartTime());// 会议通知 开始时间 | ||
359 | //paramMap.put("endTime",meeting.getEndTime());//会议通知 结束时间 | ||
360 | |||
361 | /**************会议记录内容****************/ | ||
362 | |||
363 | if(meetingSend != null ){ | ||
364 | paramMap.put("startTime",null); | ||
365 | if(meetingSend.getMeetStartTime() != null ){ | ||
366 | paramMap.put("startTime", DateUtil.formatDate(meetingSend.getMeetStartTime() ,"yyyy年MM月dd日") );// 会议记录 开始时间 | ||
367 | } | ||
368 | paramMap.put("endTime",meetingSend.getMeetEndTime());// 会议记录 结束时间 | ||
369 | paramMap.put("meetingPlace",meetingSend.getMeetLocation());//会议地址: | ||
370 | if(meetingSend.getMeetContent() != null ){ | ||
371 | String meetingContent =meetingSend.getMeetContent() ; | ||
372 | meetingContent = meetingContent.replaceAll("<.*?>", ""); | ||
373 | |||
374 | paramMap.put("meetingContent",meetingContent);//会议内容 | ||
375 | } | ||
376 | String participantsName = userService.getUserNameByUserIds(meetingSend.getUserIds()); | ||
377 | paramMap.put("participantsName",participantsName);//参会人员 | ||
378 | } | ||
379 | |||
380 | // exprotVo.setOrgDepart( ); | ||
381 | // 会议模板:files/20240903/中冶智慧水务运营管控平台项目阶段性汇报会议纪要20240805_1725342900006.doc | ||
382 | String templateDocPath = meetingSend.getMinutesTemplate();//会议纪要模板 | ||
383 | /****************会议纪要**********************/ | ||
384 | |||
385 | String minutesimage = null; //会议既要图片 | ||
386 | if(ajhMeetingMinutes != null ){ | ||
387 | paramMap.put("orgDepart",ajhMeetingMinutes.getOrgDepart());//集团名称 | ||
388 | paramMap.put("compere",ajhMeetingMinutes.getCompere());//会议主持人 | ||
389 | if(ajhMeetingMinutes.getDetail() != null ){ | ||
390 | String minutesContent =ajhMeetingMinutes.getDetail() ; | ||
391 | minutesContent = minutesContent.replaceAll("<.*?>", ""); | ||
392 | paramMap.put("minutesContent",minutesContent);//会议纪要内容 | ||
393 | } | ||
394 | |||
395 | minutesimage = upLoadPath + File.separator + ajhMeetingMinutes.getImage(); | ||
396 | } | ||
397 | |||
342 | //签到集合 | 398 | //签到集合 |
343 | int supplementNum = 0;//后续添加补全表格记录16 | 399 | List<AjhMeetingAttend> meetingAttendList = meetingAttendService.getByMeetsId( meetsId ); |
344 | List<AjhMeetingAttend> meetingAttendList = meetingAttendService.getByMeetsId( meetsId ); | 400 | int index = 1; |
345 | if(meetingAttendList == null || meetingAttendList.isEmpty()){ | 401 | if(meetingAttendList != null && !meetingAttendList.isEmpty()){ |
346 | meetingAttendList = new ArrayList<AjhMeetingAttend>(); | 402 | for(AjhMeetingAttend ajhMeetingAttend : meetingAttendList){ |
347 | supplementNum = 16; | 403 | ajhMeetingAttend.setIndex(index++); |
348 | }else{ | 404 | ajhMeetingAttend.setDuties(""); |
349 | supplementNum = 16 - meetingAttendList.size(); | 405 | } |
350 | } | 406 | } |
407 | |||
351 | //补全签到表格集合 | 408 | //补全签到表格集合 |
352 | supplementList( meetingAttendList , supplementNum ); | 409 | supplementList( meetingAttendList , index ); |
353 | //签到表集合 | 410 | // //签到表集合 |
354 | paramMap.put("attendList",meetingAttendList); | 411 | paramMap.put("attendList",meetingAttendList); |
355 | 412 | ||
356 | //添加图片 | 413 | //添加图片 |
357 | // 第三部分:图片 | 414 | // 第三部分:图片 |
358 | WordImageEntity img = new WordImageEntity(); | 415 | File minutesimageFile = new File(minutesimage); |
359 | img.setType(WordImageEntity.URL); | 416 | if(minutesimageFile.exists()){ |
360 | img.setUrl("D:\\test\\123.jpg"); | 417 | WordImageEntity img = new WordImageEntity(); |
361 | //img.setUrl("https://s2.51cto.com/media/2024/blog/logo.png"); | 418 | img.setType(WordImageEntity.URL); |
362 | img.setWidth(550); | 419 | img.setUrl(minutesimage); |
363 | img.setHeight(500); | 420 | //img.setUrl("https://s2.51cto.com/media/2024/blog/logo.png"); |
364 | 421 | img.setWidth(550); | |
365 | paramMap.put("meetingPlace" , img); | 422 | img.setHeight(500); |
423 | |||
424 | paramMap.put("meetingImg" , img); | ||
425 | } | ||
366 | //导出word | 426 | //导出word |
367 | exportWordData( templatePath , exportName , paramMap ,response); | 427 | exportWordData( templatePath , exportName , paramMap ,response); |
368 | } | 428 | } |
369 | 429 | ||
370 | /*** | ||
371 | * 补全签到表格集合 | ||
372 | * @param meetingAttendList | ||
373 | * @param supplementNum | ||
374 | */ | ||
375 | private void supplementList(List<AjhMeetingAttend> meetingAttendList ,int supplementNum){ | ||
376 | if(supplementNum > 0){ | ||
377 | for(int i = 0 ;i <supplementNum ;i ++){ | ||
378 | meetingAttendList.add( new AjhMeetingAttend() ); | ||
379 | } | ||
380 | } | ||
381 | |||
382 | } | ||
383 | /** | 430 | /** |
384 | * 导出word模板 | 431 | * 导出word模板 |
385 | * @param templatePath | 432 | * @param templatePath |
... | @@ -388,16 +435,19 @@ public class AjhMeetingMinutesController { | ... | @@ -388,16 +435,19 @@ public class AjhMeetingMinutesController { |
388 | * @param response | 435 | * @param response |
389 | */ | 436 | */ |
390 | private void exportWordData(String templatePath , String exportName , Map<String ,Object> paramMap, HttpServletResponse response ){ | 437 | private void exportWordData(String templatePath , String exportName , Map<String ,Object> paramMap, HttpServletResponse response ){ |
391 | InputStream is = null; | 438 | InputStream inputStream = null; |
392 | |||
393 | //具体业务处理方法 | 439 | //具体业务处理方法 |
394 | try { | 440 | try { |
395 | //获取word文档解析对象 | 441 | //获取word文档解析对象 |
396 | is = new FileInputStream(templatePath); | 442 | File file = new File(templatePath); |
443 | if(file.exists()){ | ||
444 | inputStream = new FileInputStream(templatePath); | ||
445 | }else{//判断文件是否存在,如果不存在使用默认模板 | ||
446 | Resource resource = new ClassPathResource("templates" + File.separator + "template_AjhMeetingMinutes.docx"); | ||
447 | inputStream = resource.getInputStream(); | ||
448 | } | ||
397 | //加载模板文件 | 449 | //加载模板文件 |
398 | MyXWPFDocument document = new MyXWPFDocument(is); | 450 | MyXWPFDocument document = new MyXWPFDocument(inputStream); |
399 | |||
400 | |||
401 | //解析07版的Word并且进行赋值 | 451 | //解析07版的Word并且进行赋值 |
402 | //WordExportUtil.exportWord07(document, paramMap); | 452 | //WordExportUtil.exportWord07(document, paramMap); |
403 | //解析07版的Word并且进行赋值 | 453 | //解析07版的Word并且进行赋值 |
... | @@ -411,12 +461,10 @@ public class AjhMeetingMinutesController { | ... | @@ -411,12 +461,10 @@ public class AjhMeetingMinutesController { |
411 | response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(exportName , "UTF-8")))); | 461 | response.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(exportName , "UTF-8")))); |
412 | // 将文档写入响应的输出流 | 462 | // 将文档写入响应的输出流 |
413 | 463 | ||
414 | |||
415 | // 输出文件路径 --测试 | 464 | // 输出文件路径 --测试 |
416 | /* String outputPath = "D:\\test\\会议纪要导出记录.docx"; | 465 | /* String outputPath = "D:\\test\\会议纪要导出记录.docx"; |
417 | FileOutputStream outputFile = new FileOutputStream(outputPath); | 466 | FileOutputStream outputFile = new FileOutputStream(outputPath); |
418 | document.write( outputFile);*/ | 467 | document.write( outputFile);*/ |
419 | |||
420 | document.write(response.getOutputStream()); | 468 | document.write(response.getOutputStream()); |
421 | // 刷新和关闭输出流 | 469 | // 刷新和关闭输出流 |
422 | response.getOutputStream().flush(); | 470 | response.getOutputStream().flush(); |
... | @@ -427,11 +475,49 @@ public class AjhMeetingMinutesController { | ... | @@ -427,11 +475,49 @@ public class AjhMeetingMinutesController { |
427 | catch (Exception e) { | 475 | catch (Exception e) { |
428 | e.printStackTrace(); | 476 | e.printStackTrace(); |
429 | }finally { | 477 | }finally { |
478 | System.out.println("关闭输入流"); | ||
430 | try{ | 479 | try{ |
431 | if(is != null ) is.close();//关闭输入流 | 480 | if(inputStream != null ) inputStream.close();//关闭输入流 |
432 | }catch (Exception e1){ | 481 | }catch (Exception e1){ |
433 | e1.printStackTrace(); | 482 | e1.printStackTrace(); |
434 | } | 483 | } |
435 | } | 484 | } |
436 | } | 485 | } |
486 | |||
487 | |||
488 | /*** | ||
489 | * 补全签到表格集合 | ||
490 | * @param meetingAttendList | ||
491 | * @param index | ||
492 | */ | ||
493 | private void supplementList(List<AjhMeetingAttend> meetingAttendList ,int index){ | ||
494 | if(index < 17 ){ | ||
495 | for(int i = index ;i < 17 ;i ++){ | ||
496 | meetingAttendList.add( new AjhMeetingAttend( index++,"","","" ) ); | ||
497 | } | ||
498 | } | ||
499 | } | ||
500 | /*** | ||
501 | * 初始化Map参数 | ||
502 | * @return | ||
503 | */ | ||
504 | private Map<String ,Object> initParamMap(){ | ||
505 | Map<String ,Object> paramMap = new HashMap<String,Object>(); | ||
506 | paramMap.put("meetTitile", "" );//会议标题 | ||
507 | paramMap.put( "sender","");//发起人 | ||
508 | paramMap.put("sendTime","");//发送时间 | ||
509 | paramMap.put("startTime",""); | ||
510 | paramMap.put("endTime","");// 会议记录 结束时间 | ||
511 | paramMap.put("meetingPlace","");//会议地址: | ||
512 | paramMap.put("meetingContent","");//会议内容 | ||
513 | paramMap.put("participantsName","");//参会人员 | ||
514 | paramMap.put("orgDepart","");//集团名称 | ||
515 | paramMap.put("compere","");//会议主持人 | ||
516 | paramMap.put("minutesContent","");//会议纪要内容 | ||
517 | |||
518 | paramMap.put("attendList",new ArrayList<AjhMeetingAttend>());//签到记录 | ||
519 | paramMap.put("meetingImg","");//会议纪要图片 | ||
520 | |||
521 | return paramMap; | ||
522 | } | ||
437 | } | 523 | } | ... | ... |
... | @@ -96,4 +96,23 @@ public class AjhMeetingAttend { | ... | @@ -96,4 +96,23 @@ public class AjhMeetingAttend { |
96 | @TableField(exist = false) | 96 | @TableField(exist = false) |
97 | @ApiModelProperty(value = "序号") | 97 | @ApiModelProperty(value = "序号") |
98 | private Integer index; | 98 | private Integer index; |
99 | |||
100 | @TableField(exist = false) | ||
101 | @ApiModelProperty(value = "职务") | ||
102 | private String duties; | ||
103 | |||
104 | public AjhMeetingAttend() { | ||
105 | } | ||
106 | |||
107 | public AjhMeetingAttend(Integer index ,String duties) { | ||
108 | this.index = index; | ||
109 | this.duties = duties; | ||
110 | } | ||
111 | |||
112 | public AjhMeetingAttend( Integer index,String departName, String userName, String duties) { | ||
113 | this.index = index; | ||
114 | this.departName = departName; | ||
115 | this.userName = userName; | ||
116 | this.duties = duties; | ||
117 | } | ||
99 | } | 118 | } | ... | ... |
... | @@ -11,7 +11,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ... | @@ -11,7 +11,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
11 | */ | 11 | */ |
12 | public interface AjhMeetingMinutesMapper extends BaseMapper<AjhMeetingMinutes> { | 12 | public interface AjhMeetingMinutesMapper extends BaseMapper<AjhMeetingMinutes> { |
13 | 13 | ||
14 | AjhMeetingMinutes queryByMeetId(@Param("meetId") String meetId); | 14 | /** |
15 | * 根据会议记录编号获取最新的会议纪要内容 | ||
16 | * @param meetsId | ||
17 | * @return | ||
18 | */ | ||
19 | AjhMeetingMinutes queryByMeetsId(@Param("meetsId") String meetsId); | ||
15 | 20 | ||
16 | AjhMeetingMinutes getDataById(@Param("id") String id); | 21 | AjhMeetingMinutes getDataById(@Param("id") String id); |
17 | } | 22 | } | ... | ... |
... | @@ -2,8 +2,9 @@ | ... | @@ -2,8 +2,9 @@ |
2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
3 | <mapper namespace="com.skua.modules.ajh.mapper.AjhMeetingMinutesMapper"> | 3 | <mapper namespace="com.skua.modules.ajh.mapper.AjhMeetingMinutesMapper"> |
4 | 4 | ||
5 | <select id="queryByMeetId" resultType="com.skua.modules.ajh.entity.AjhMeetingMinutes"> | 5 | <!-- 根据会议记录编号获取最新的会议纪要内容--> |
6 | select * from ajh_meeting_minutes where meets_id = #{meetId} order by create_time desc limit 1 | 6 | <select id="queryByMeetsId" resultType="com.skua.modules.ajh.entity.AjhMeetingMinutes"> |
7 | select * from ajh_meeting_minutes where meets_id = #{meetsId} order by create_time desc limit 1 | ||
7 | </select> | 8 | </select> |
8 | 9 | ||
9 | <select id="getDataById" resultType="com.skua.modules.ajh.entity.AjhMeetingMinutes"> | 10 | <select id="getDataById" resultType="com.skua.modules.ajh.entity.AjhMeetingMinutes"> | ... | ... |
... | @@ -3,7 +3,6 @@ package com.skua.modules.ajh.service; | ... | @@ -3,7 +3,6 @@ package com.skua.modules.ajh.service; |
3 | import com.skua.modules.ajh.entity.AjhMeetingAttend; | 3 | import com.skua.modules.ajh.entity.AjhMeetingAttend; |
4 | import com.baomidou.mybatisplus.extension.service.IService; | 4 | import com.baomidou.mybatisplus.extension.service.IService; |
5 | import com.skua.modules.ajh.entity.AjhMeetingSend; | 5 | import com.skua.modules.ajh.entity.AjhMeetingSend; |
6 | import org.apache.ibatis.annotations.Param; | ||
7 | 6 | ||
8 | import java.util.List; | 7 | import java.util.List; |
9 | 8 | ||
... | @@ -19,6 +18,6 @@ public interface IAjhMeetingAttendService extends IService<AjhMeetingAttend> { | ... | @@ -19,6 +18,6 @@ public interface IAjhMeetingAttendService extends IService<AjhMeetingAttend> { |
19 | * @param meetsId | 18 | * @param meetsId |
20 | * @return | 19 | * @return |
21 | */ | 20 | */ |
22 | public List<AjhMeetingAttend> getByMeetsId(@Param("meetsId")String meetsId); | 21 | public List<AjhMeetingAttend> getByMeetsId(String meetsId); |
23 | 22 | ||
24 | } | 23 | } | ... | ... |
... | @@ -8,7 +8,12 @@ import com.baomidou.mybatisplus.extension.service.IService; | ... | @@ -8,7 +8,12 @@ import com.baomidou.mybatisplus.extension.service.IService; |
8 | */ | 8 | */ |
9 | public interface IAjhMeetingMinutesService extends IService<AjhMeetingMinutes> { | 9 | public interface IAjhMeetingMinutesService extends IService<AjhMeetingMinutes> { |
10 | 10 | ||
11 | AjhMeetingMinutes queryByMeetId(String meetId); | 11 | /*** |
12 | * 根据会议记录编号获取最细的会议纪要 | ||
13 | * @param meetsId | ||
14 | * @return | ||
15 | */ | ||
16 | public AjhMeetingMinutes queryByMeetsId(String meetsId); | ||
12 | 17 | ||
13 | AjhMeetingMinutes getDataById(String id); | 18 | AjhMeetingMinutes getDataById(String id); |
14 | } | 19 | } | ... | ... |
... | @@ -32,31 +32,17 @@ public class AjhMeetingMinutesServiceImpl extends ServiceImpl<AjhMeetingMinutesM | ... | @@ -32,31 +32,17 @@ public class AjhMeetingMinutesServiceImpl extends ServiceImpl<AjhMeetingMinutesM |
32 | @Autowired | 32 | @Autowired |
33 | private ISysUserService sysUserService; | 33 | private ISysUserService sysUserService; |
34 | 34 | ||
35 | /*** | ||
36 | * 根据会议记录编号获取最细的会议纪要 | ||
37 | * @param meetsId | ||
38 | * @return | ||
39 | */ | ||
35 | @Override | 40 | @Override |
36 | public AjhMeetingMinutes queryByMeetId(String meetId) { | 41 | public AjhMeetingMinutes queryByMeetsId(String meetsId) { |
37 | SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); | 42 | |
38 | //获取会议记录信息 | 43 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesMapper.queryByMeetsId(meetsId); |
39 | AjhMeetingSend ajhMeetingSend = ajhMeetingSendService.getById(meetId); | 44 | |
40 | //获取会议纪要 | 45 | return ajhMeetingMinutes; |
41 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesMapper.queryByMeetId(meetId); | ||
42 | if(ajhMeetingMinutes != null){ | ||
43 | //会议时间 | ||
44 | if(ajhMeetingSend.getMeetTime()!=null){ | ||
45 | ajhMeetingMinutes.setAnnTime(ajhMeetingSend.getMeetTime()); | ||
46 | } | ||
47 | //主持人 | ||
48 | SysUser user = sysUserService.getById(ajhMeetingSend.getMeetCompere()); | ||
49 | ajhMeetingMinutes.setCompere(user.getRealname()); | ||
50 | //参与人 | ||
51 | //创建会议时间 | ||
52 | ajhMeetingMinutes.setSendDate(formatter.format(ajhMeetingSend.getCreateTime())); | ||
53 | //组织单位 | ||
54 | SysDepart sysDepart = sysDepartService.getById(ajhMeetingSend.getDepartId()); | ||
55 | ajhMeetingMinutes.setOrgDepart(sysDepart.getDepartName()); | ||
56 | return ajhMeetingMinutes; | ||
57 | }else{ | ||
58 | return new AjhMeetingMinutes(); | ||
59 | } | ||
60 | } | 46 | } |
61 | 47 | ||
62 | @Override | 48 | @Override | ... | ... |
... | @@ -149,7 +149,7 @@ public class AjhMeetingSendServiceImpl extends ServiceImpl<AjhMeetingSendMapper, | ... | @@ -149,7 +149,7 @@ public class AjhMeetingSendServiceImpl extends ServiceImpl<AjhMeetingSendMapper, |
149 | dataMap.put("departMeetContent" ,meetingSend.getMeetContent() );//会议内容 | 149 | dataMap.put("departMeetContent" ,meetingSend.getMeetContent() );//会议内容 |
150 | 150 | ||
151 | //会议纪要 | 151 | //会议纪要 |
152 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesMapper.queryByMeetId(meetingSend.getId()); | 152 | AjhMeetingMinutes ajhMeetingMinutes = ajhMeetingMinutesMapper.queryByMeetsId(meetingSend.getId()); |
153 | if(ajhMeetingMinutes != null ){ | 153 | if(ajhMeetingMinutes != null ){ |
154 | // dataMap.put("meetImage", Pictures.ofLocal(upLoadPath+ File.separator+ ajhMeetingMinutes.getImage() ).size(550, 500).create()); | 154 | // dataMap.put("meetImage", Pictures.ofLocal(upLoadPath+ File.separator+ ajhMeetingMinutes.getImage() ).size(550, 500).create()); |
155 | //dataMap.put("meetImage" ,ajhMeetingMinutes.getImage() );//会议图片 需要转化为图片 | 155 | //dataMap.put("meetImage" ,ajhMeetingMinutes.getImage() );//会议图片 需要转化为图片 | ... | ... |
... | @@ -83,29 +83,7 @@ public class DateUtil { | ... | @@ -83,29 +83,7 @@ public class DateUtil { |
83 | } | 83 | } |
84 | 84 | ||
85 | 85 | ||
86 | /*** | ||
87 | * 字符串日期格式化 | ||
88 | * @param date | ||
89 | * @param format | ||
90 | * @return | ||
91 | */ | ||
92 | public static String formatDate(String date , String format){ | ||
93 | if(format == null ){ | ||
94 | format = "yyyy-MM-dd"; | ||
95 | } | ||
96 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); | ||
97 | 86 | ||
98 | SimpleDateFormat formatSDF = new SimpleDateFormat(format); | ||
99 | // 转化成日期类型 | ||
100 | try { | ||
101 | Date startDate = sdf.parse(date); | ||
102 | date = formatSDF.format(startDate); | ||
103 | } catch (ParseException e) { | ||
104 | e.printStackTrace(); | ||
105 | } | ||
106 | return date; | ||
107 | |||
108 | } | ||
109 | /** | 87 | /** |
110 | * 获取两个日期之间的所有日期 (年月日) | 88 | * 获取两个日期之间的所有日期 (年月日) |
111 | * | 89 | * |
... | @@ -271,4 +249,42 @@ public class DateUtil { | ... | @@ -271,4 +249,42 @@ public class DateUtil { |
271 | public static LocalDateTime dateToLocalDateTime(Date date){ | 249 | public static LocalDateTime dateToLocalDateTime(Date date){ |
272 | return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); | 250 | return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); |
273 | } | 251 | } |
252 | |||
253 | |||
254 | /*** | ||
255 | * 字符串日期格式化 | ||
256 | * @param date | ||
257 | * @param format | ||
258 | * @return | ||
259 | */ | ||
260 | public static String formatDate(String date , String format){ | ||
261 | if(format == null ){ | ||
262 | format = "yyyy-MM-dd"; | ||
263 | } | ||
264 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); | ||
265 | |||
266 | SimpleDateFormat formatSDF = new SimpleDateFormat(format); | ||
267 | // 转化成日期类型 | ||
268 | try { | ||
269 | Date startDate = sdf.parse(date); | ||
270 | date = formatSDF.format(startDate); | ||
271 | } catch (ParseException e) { | ||
272 | e.printStackTrace(); | ||
273 | } | ||
274 | return date; | ||
275 | } | ||
276 | public static String formatDate(Date dateTime , String format){ | ||
277 | if(format == null ){ | ||
278 | format = "yyyy-MM-dd"; | ||
279 | } | ||
280 | String date = ""; | ||
281 | SimpleDateFormat formatSDF = new SimpleDateFormat(format); | ||
282 | // 转化成日期类型 | ||
283 | try { | ||
284 | date = formatSDF.format(dateTime); | ||
285 | } catch (Exception e) { | ||
286 | e.printStackTrace(); | ||
287 | } | ||
288 | return date; | ||
289 | } | ||
274 | } | 290 | } | ... | ... |
此文件类型无法预览
... | @@ -104,6 +104,21 @@ | ... | @@ -104,6 +104,21 @@ |
104 | '${item}' | 104 | '${item}' |
105 | </foreach> | 105 | </foreach> |
106 | </select> | 106 | </select> |
107 | |||
108 | |||
109 | <select id="getUserNameByUserIds" resultType="java.lang.String"> | ||
110 | SELECT | ||
111 | username | ||
112 | FROM | ||
113 | sys_user | ||
114 | WHERE | ||
115 | id IN | ||
116 | <foreach item="item" index="index" collection="userIds.split(',')" open="(" separator="," close=")"> | ||
117 | '${item}' | ||
118 | </foreach> | ||
119 | </select> | ||
120 | |||
121 | |||
107 | <select id="getUserByUserIds" resultType="com.skua.modules.system.entity.SysUser"> | 122 | <select id="getUserByUserIds" resultType="com.skua.modules.system.entity.SysUser"> |
108 | SELECT | 123 | SELECT |
109 | * | 124 | * | ... | ... |
... | @@ -146,4 +146,11 @@ public interface ISysUserService extends IService<SysUser> { | ... | @@ -146,4 +146,11 @@ public interface ISysUserService extends IService<SysUser> { |
146 | List<SysUser> getUserByUserIds(String userIds); | 146 | List<SysUser> getUserByUserIds(String userIds); |
147 | 147 | ||
148 | List<SysUser> operationUserList(String departId); | 148 | List<SysUser> operationUserList(String departId); |
149 | |||
150 | /*** | ||
151 | * 根据userids返回userName | ||
152 | * @param userIds | ||
153 | * @return | ||
154 | */ | ||
155 | public String getUserNameByUserIds(String userIds); | ||
149 | } | 156 | } | ... | ... |
... | @@ -304,6 +304,24 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl | ... | @@ -304,6 +304,24 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl |
304 | return list; | 304 | return list; |
305 | } | 305 | } |
306 | 306 | ||
307 | /*** | ||
308 | * 根据userids返回userName | ||
309 | * @param userIds | ||
310 | * @return | ||
311 | */ | ||
312 | public String getUserNameByUserIds(String userIds){ | ||
313 | List<SysUser> userList = baseMapper.getUserByUserIds(userIds); | ||
314 | |||
315 | StringBuffer sb = new StringBuffer(""); | ||
316 | if(userList != null ){ | ||
317 | for(SysUser user : userList){ | ||
318 | if(sb.length() >0 ) sb.append(","); | ||
319 | sb.append(user.getUsername()); | ||
320 | } | ||
321 | } | ||
322 | return sb.toString(); | ||
323 | } | ||
324 | |||
307 | @Override | 325 | @Override |
308 | public List<SysUser> operationUserList(String departId) { | 326 | public List<SysUser> operationUserList(String departId) { |
309 | return userMapper.operationUserList(departId); | 327 | return userMapper.operationUserList(departId); | ... | ... |
-
请 注册 或 登录 后发表评论