| @@ -2,6 +2,7 @@ package com.rwk.web.controller.ability; | |||
| import java.util.List; | |||
| import com.rwk.common.utils.DateUtils; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| import com.rwk.system.domain.RwkStaffInformation; | |||
| import com.rwk.system.service.IRwkStaffInformationService; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| @@ -57,6 +58,16 @@ public class RwkMeetingController extends BaseController | |||
| { | |||
| startPage(); | |||
| List<RwkMeeting> list = rwkMeetingService.selectRwkMeetingList(rwkMeeting); | |||
| for (RwkMeeting mt : list){ | |||
| int totalCount = mt.getRwkMeetingStaffList().size(); | |||
| Integer isSignCount = 0; | |||
| for (RwkMeetingStaff mtStaff : mt.getRwkMeetingStaffList()){ | |||
| if (mtStaff.getIsSign() == 1){ | |||
| isSignCount++; | |||
| } | |||
| } | |||
| mt.setSignCount(isSignCount+"/"+totalCount); | |||
| } | |||
| return getDataTable(list); | |||
| } | |||
| @@ -81,6 +92,16 @@ public class RwkMeetingController extends BaseController | |||
| return prefix + "/userSelect"; | |||
| } | |||
| /** | |||
| *新增附件 | |||
| */ | |||
| @GetMapping("/addMeetingFile") | |||
| public String addMeetingFile(ModelMap mmap) | |||
| { | |||
| getJoinPeople(mmap); | |||
| return prefix + "/addMeetingFile"; | |||
| } | |||
| /** | |||
| * 新增教育培训 | |||
| */ | |||
| @@ -0,0 +1,127 @@ | |||
| package com.rwk.web.controller.ability; | |||
| import java.util.List; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Controller; | |||
| import org.springframework.ui.ModelMap; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.ResponseBody; | |||
| import com.rwk.common.annotation.Log; | |||
| import com.rwk.common.enums.BusinessType; | |||
| import com.rwk.system.domain.RwkMeetingFile; | |||
| import com.rwk.system.service.IRwkMeetingFileService; | |||
| import com.rwk.common.core.controller.BaseController; | |||
| import com.rwk.common.core.domain.AjaxResult; | |||
| import com.rwk.common.utils.poi.ExcelUtil; | |||
| import com.rwk.common.core.page.TableDataInfo; | |||
| /** | |||
| * 【教育培训附件】Controller | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-21 | |||
| */ | |||
| @Controller | |||
| @RequestMapping("/system/file") | |||
| public class RwkMeetingFileController extends BaseController | |||
| { | |||
| private String prefix = "system/file"; | |||
| @Autowired | |||
| private IRwkMeetingFileService rwkMeetingFileService; | |||
| @RequiresPermissions("system:file:view") | |||
| @GetMapping() | |||
| public String file() | |||
| { | |||
| return prefix + "/file"; | |||
| } | |||
| /** | |||
| * 查询【教育培训附件】列表 | |||
| */ | |||
| @RequiresPermissions("system:file:list") | |||
| @PostMapping("/list") | |||
| @ResponseBody | |||
| public TableDataInfo list(RwkMeetingFile rwkMeetingFile) | |||
| { | |||
| startPage(); | |||
| List<RwkMeetingFile> list = rwkMeetingFileService.selectRwkMeetingFileList(rwkMeetingFile); | |||
| return getDataTable(list); | |||
| } | |||
| /** | |||
| * 导出【教育培训附件】列表 | |||
| */ | |||
| @RequiresPermissions("system:file:export") | |||
| @Log(title = "【教育培训附件】", businessType = BusinessType.EXPORT) | |||
| @PostMapping("/export") | |||
| @ResponseBody | |||
| public AjaxResult export(RwkMeetingFile rwkMeetingFile) | |||
| { | |||
| List<RwkMeetingFile> list = rwkMeetingFileService.selectRwkMeetingFileList(rwkMeetingFile); | |||
| ExcelUtil<RwkMeetingFile> util = new ExcelUtil<RwkMeetingFile>(RwkMeetingFile.class); | |||
| return util.exportExcel(list, "【教育培训附件】数据"); | |||
| } | |||
| /** | |||
| * 新增【教育培训附件】 | |||
| */ | |||
| @GetMapping("/add") | |||
| public String add() | |||
| { | |||
| return prefix + "/add"; | |||
| } | |||
| /** | |||
| * 新增保存【教育培训附件】 | |||
| */ | |||
| @RequiresPermissions("system:file:add") | |||
| @Log(title = "【教育培训附件】", businessType = BusinessType.INSERT) | |||
| @PostMapping("/add") | |||
| @ResponseBody | |||
| public AjaxResult addSave(RwkMeetingFile rwkMeetingFile) | |||
| { | |||
| return toAjax(rwkMeetingFileService.insertRwkMeetingFile(rwkMeetingFile)); | |||
| } | |||
| /** | |||
| * 修改【教育培训附件】 | |||
| */ | |||
| @RequiresPermissions("system:file:edit") | |||
| @GetMapping("/edit/{id}") | |||
| public String edit(@PathVariable("id") Long id, ModelMap mmap) | |||
| { | |||
| RwkMeetingFile rwkMeetingFile = rwkMeetingFileService.selectRwkMeetingFileById(id); | |||
| mmap.put("rwkMeetingFile", rwkMeetingFile); | |||
| return prefix + "/edit"; | |||
| } | |||
| /** | |||
| * 修改保存【教育培训附件】 | |||
| */ | |||
| @RequiresPermissions("system:file:edit") | |||
| @Log(title = "【教育培训附件】", businessType = BusinessType.UPDATE) | |||
| @PostMapping("/edit") | |||
| @ResponseBody | |||
| public AjaxResult editSave(RwkMeetingFile rwkMeetingFile) | |||
| { | |||
| return toAjax(rwkMeetingFileService.updateRwkMeetingFile(rwkMeetingFile)); | |||
| } | |||
| /** | |||
| * 删除【教育培训附件】 | |||
| */ | |||
| @RequiresPermissions("system:file:remove") | |||
| @Log(title = "【教育培训附件】", businessType = BusinessType.DELETE) | |||
| @PostMapping( "/remove") | |||
| @ResponseBody | |||
| public AjaxResult remove(String ids) | |||
| { | |||
| return toAjax(rwkMeetingFileService.deleteRwkMeetingFileByIds(ids)); | |||
| } | |||
| } | |||
| @@ -46,7 +46,7 @@ public class CommonController | |||
| throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); | |||
| } | |||
| String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); | |||
| String filePath = RuoYiConfig.getDownloadPath() + fileName; | |||
| String filePath = RuoYiConfig.getUploadPath() + fileName; | |||
| response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); | |||
| FileUtils.setAttachmentResponseHeader(response, realFileName); | |||
| @@ -53,4 +53,10 @@ | |||
| } | |||
| .signFail{ | |||
| color: #a94442; | |||
| } | |||
| .table-container { | |||
| height: 200px; /* 设置固定高度 */ | |||
| overflow-y: auto; /* 启用垂直滚动条 */ | |||
| border: 1px solid #ccc; /* 可选:添加边框以便于查看 */ | |||
| margin-bottom: 20px; /* 可选:添加底部间距 */ | |||
| } | |||
| @@ -329,7 +329,11 @@ | |||
| init(); | |||
| //数据进行初始化加载 | |||
| function init(){ | |||
| // 初始化时设置第一个标题为激活状态 | |||
| $('.sidebar .title').first().addClass('active'); | |||
| // 初始化箭头位置 | |||
| var arrow = $("#arrow"); | |||
| arrow.css('top', $('.sidebar .title').first().position().top + 11); | |||
| } | |||
| function rollingLinkage(){ | |||
| @@ -353,7 +357,42 @@ | |||
| scrollTop: scrollPosition | |||
| }, 300); // 动画效果 | |||
| }); | |||
| // 滚动事件 | |||
| $('#content').scroll(function() { | |||
| var scrollTop = $(this).scrollTop(); | |||
| var titles = $('.sidebar .title'); | |||
| var contentHeight = $('#content').height(); | |||
| var contentScrollHeight = $('#content')[0].scrollHeight; | |||
| var lastTitle = titles.last(); | |||
| titles.each(function() { | |||
| var target = $(this).data('target'); | |||
| var targetElement = $(target); | |||
| var targetTop = targetElement.position().top; | |||
| var targetHeight = targetElement.outerHeight(); | |||
| if (scrollTop >= targetTop && scrollTop < targetTop + targetHeight) { | |||
| titles.removeClass('active'); | |||
| $(this).addClass('active'); | |||
| // 移动箭头 | |||
| var newArrowPosition = $(this).position().top + 11; | |||
| arrow.css('top', newArrowPosition); | |||
| return false; // 停止遍历 | |||
| } | |||
| }); | |||
| // 如果滚动到底部且最后一个标题未被激活,则激活最后一个标题 | |||
| if (scrollTop + contentHeight >= contentScrollHeight - 10) { | |||
| titles.removeClass('active'); | |||
| lastTitle.addClass('active'); | |||
| // 移动箭头 | |||
| var newArrowPosition = lastTitle.position().top + 11; | |||
| arrow.css('top', newArrowPosition); | |||
| } | |||
| }); | |||
| } | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -42,8 +42,8 @@ | |||
| <label class="daj_left_two control-label">附件</label> | |||
| <div class="daj_right_two fj_box1"> | |||
| <div style="height: 43px;width: 100%;margin-top: 3px;"> | |||
| <input name="fj" type="button" class="fj_btn" onclick=""> | |||
| <input type="file" name="fileUpload_l" id="fileUpload_l" onchange="" style="display:none;" accept=".pdf,.ofd,.txt,.wps,.xlsx,.xls,.pub,.docx,.doc,.xml,.jpg,.png"> | |||
| <input name="fj" type="button" class="fj_btn" onclick="uploadModal()"> | |||
| <input type="file" name="fileUpload_l" id="fileUpload_l" onchange="uploadFile()" style="display:none;" accept=".pdf,.ofd,.txt,.wps,.xlsx,.xls,.pub,.docx,.doc,.xml,.jpg,.png"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -52,28 +52,30 @@ | |||
| <div class="daj_middle"> | |||
| <label class="daj_left_two control-label"></label> | |||
| <div class="daj_right_two fj_box1" style="min-height:47px;height: auto;"> | |||
| <div class="table-container"> | |||
| <table id="table-show" class="table table-hover" style="margin-bottom: 10px;"> | |||
| <tbody> | |||
| <tr> | |||
| <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(三月至五月).docx</td> | |||
| <td class="width-8">非密</td> | |||
| <td class="width-20"></td> | |||
| <td> | |||
| <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a> | |||
| <a data-id =""><img src="/img/use/delete.png"/></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(二月).docx</td> | |||
| <td class="width-8">机密</td> | |||
| <td class="width-20">保密期限:2025-01-14</td> | |||
| <td> | |||
| <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a> | |||
| <a data-id =""><img src="/img/use/delete.png"/></a> | |||
| </td> | |||
| </tr> | |||
| <tbody id="filetb"> | |||
| <!-- <tr>--> | |||
| <!-- <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(三月至五月).docx</td>--> | |||
| <!-- <td class="width-8">非密</td>--> | |||
| <!-- <td class="width-20"></td>--> | |||
| <!-- <td>--> | |||
| <!-- <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a>--> | |||
| <!-- <a data-id =""><img src="/img/use/delete.png"/></a>--> | |||
| <!-- </td>--> | |||
| <!-- </tr>--> | |||
| <!-- <tr>--> | |||
| <!-- <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(二月).docx</td>--> | |||
| <!-- <td class="width-8">机密</td>--> | |||
| <!-- <td class="width-20">保密期限:2025-01-14</td>--> | |||
| <!-- <td>--> | |||
| <!-- <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a>--> | |||
| <!-- <a data-id =""><img src="/img/use/delete.png"/></a>--> | |||
| <!-- </td>--> | |||
| <!-- </tr>--> | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -96,6 +98,7 @@ | |||
| var editFlag = [[${@permission.hasPermi('system:meeting:edit')}]]; | |||
| var removeFlag = [[${@permission.hasPermi('system:meeting:remove')}]]; | |||
| var userList = []; | |||
| var fileList = []; | |||
| $("#form-meeting-add").validate({ | |||
| focusCleanup: true | |||
| }); | |||
| @@ -116,6 +119,11 @@ | |||
| obj["rwkMeetingStaffList["+index+"]."+key] = item[key]; | |||
| } | |||
| }) | |||
| fileList.forEach(function (item,index){ | |||
| for (const key in item){ | |||
| obj["rwkMeetingFileList["+index+"]."+key] = item[key]; | |||
| } | |||
| }) | |||
| $.operate.save(prefix + "/add", $.param(obj)); | |||
| } | |||
| } | |||
| @@ -148,6 +156,69 @@ | |||
| } | |||
| $("#invite").html(html); | |||
| } | |||
| function uploadModal(){ | |||
| const options = { | |||
| title: '培训附件上传', | |||
| url: prefix + "/addMeetingFile", | |||
| skin: 'layui-layer-blue', | |||
| btn: ['保存', '取消'], | |||
| width: 750, | |||
| height: 520, | |||
| maxmin: false, | |||
| full: false, | |||
| yes: function (index, layero) { | |||
| var iframeWin = layero.find('iframe')[0]; | |||
| var data = iframeWin.contentWindow.selectFiles(); | |||
| fileList.push(data); | |||
| $.modal.close(index); | |||
| showByFile(); | |||
| } | |||
| }; | |||
| $.modal.openOptions(options); | |||
| } | |||
| function download(url){ | |||
| window.location.href = ctx + "common/download/resource?resource=" + encodeURI(url); | |||
| } | |||
| function delrow(index){ | |||
| fileList.splice(index,1); | |||
| showByFile(); | |||
| } | |||
| //根据文件数据集合进行回显 | |||
| function showByFile(){ | |||
| var html = ""; | |||
| //根据id为filetb的table进行回显 | |||
| if (fileList && fileList.length>0){ | |||
| fileList.forEach(function (item,index){ | |||
| html += ` <tr> | |||
| <td style="width: 80%;"> | |||
| <img src="/img/use/filelook.png" />${item.fileName.substring(item.fileName.lastIndexOf("/") + 1)} </td> | |||
| <td> | |||
| <a class='download-link' data-url="${item.fileName}" style='margin-right: 10px;'> | |||
| <img src="/img/use/xiazai.png"/> | |||
| </a> | |||
| <a data-id="" onclick="delrow(${index})"> | |||
| <img src="/img/use/delete.png"/> | |||
| </a> | |||
| </td> | |||
| </tr> | |||
| `; | |||
| }) | |||
| } | |||
| $("#filetb").html(html); | |||
| } | |||
| // 绑定下载事件 | |||
| // 使用事件委托绑定下载和删除事件 | |||
| document.getElementById('filetb').addEventListener('click', function(event) { | |||
| if (event.target.closest('.download-link')) { | |||
| const url = event.target.closest('.download-link').getAttribute('data-url'); | |||
| download(url); | |||
| } else if (event.target.closest('[onclick*="delrow"]')) { | |||
| const index = parseInt(event.target.closest('[onclick*="delrow"]').getAttribute('onclick').match(/\d+/)[0]); | |||
| delrow(index); | |||
| } | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,98 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh" xmlns:th="http://www.thymeleaf.org" > | |||
| <head> | |||
| <th:block th:include="include :: header('新增【培训附件】')" /> | |||
| <!-- <link th:href="@{/css/use/css1.css}" rel="stylesheet"/>--> | |||
| <link th:href="@{/ruoyi/css/address.css}" rel="stylesheet"/> | |||
| <th:block th:include="include :: bootstrap-duallistbox-css" /> | |||
| </head> | |||
| <body class="white-bg"> | |||
| <div class="wrapper wrapper-content animated fadeInRight ibox-content"> | |||
| <form class="form-horizontal m" id="form-file-add"> | |||
| <div class="col-md-12" > | |||
| <div class="form-group" > | |||
| <div class="address-from-left"> | |||
| <span style="color: red">*</span>附件: | |||
| </div> | |||
| <div class="address-from-right"> | |||
| <input name="fileName" class="form-control" type="hidden"> | |||
| <input class="btn btn-unite" type="file" name="fileUpload" id="fileUpload" onchange="getFileName()" accept=".pdf,.ofd,.txt,.wps,.xlsx,.xls,.pub,.docx,.doc,.xml,.jpg,.png"> | |||
| </div> | |||
| </div> | |||
| <div class="form-group" style="margin-top: 30px"> | |||
| <div class="address-from-left"> | |||
| 密级: | |||
| </div> | |||
| <div class="address-from-right"> | |||
| <select name="secret" style="width: 100%"> | |||
| <option value="非密">非密</option> | |||
| <option value="机密">机密</option> | |||
| <option value="秘密">秘密</option> | |||
| </select> | |||
| </div> | |||
| </div> | |||
| <div class="form-group" style="margin-top: 30px"> | |||
| <div class="address-from-left"> | |||
| 保密期限: | |||
| </div> | |||
| <div class="address-from-right"> | |||
| <input name="secretDate" type="text" class="form-control daj_frame time-input" placeholder="请选择培训日期"/> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <th:block th:include="include :: footer" /> | |||
| <th:block th:include="include :: bootstrap-duallistbox-js" /> | |||
| <script th:inline="javascript"> | |||
| var prefix = ctx + "system/file" | |||
| $("#form-file-add").validate({ | |||
| focusCleanup: true | |||
| }); | |||
| function submitHandler() { | |||
| if ($.validate.form()) { | |||
| $.operate.save(prefix + "/add", $('#form-file-add').serialize()); | |||
| } | |||
| } | |||
| function getFileName(){ | |||
| var file = $("#fileUpload")[0].files[0]; | |||
| var filename = file.name; | |||
| var formData = new FormData(); | |||
| formData.append("file", file); | |||
| var allowedExtensions = /(\.pdf|\.ofd|\.txt|\.wps|\.xlsx|\.slx|\.pub|\.docx|\.doc|\.xml|\.jpg|\.png)$/i; | |||
| var fileExtension = filename.substring(filename.lastIndexOf('.')).toLowerCase(); | |||
| //判断文件是否符合规范 | |||
| if (allowedExtensions.test(fileExtension)) { | |||
| $.ajax({ | |||
| url: ctx + 'common/upload', | |||
| type: 'POST', | |||
| data: formData, | |||
| contentType: false, | |||
| processData: false, | |||
| success: function(response) { | |||
| $("input[name=fileName]").val(response.url); | |||
| // $("#fileName").attr("src",response.url).show(); | |||
| }, | |||
| error: function(xhr, status, error) { | |||
| console.error(error); | |||
| } | |||
| }); | |||
| } else { | |||
| $.modal.alertError("该文件类型不符合"); | |||
| } | |||
| } | |||
| //拼接当前页面控件数据集合 | |||
| function selectFiles(){ | |||
| const fileName = $("input[name=fileName]").val(); | |||
| const secret = $("select[name=secret]").val(); | |||
| const secretDate = $("input[name=secretDate]").val(); | |||
| return { | |||
| fileName:fileName, | |||
| secret:secret, | |||
| secretDate:secretDate | |||
| } | |||
| } | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -43,8 +43,8 @@ | |||
| <label class="daj_left_two control-label">附件</label> | |||
| <div class="daj_right_two fj_box1"> | |||
| <div style="height: 43px;width: 100%;margin-top: 3px;"> | |||
| <input name="fj" type="button" class="fj_btn" onclick=""> | |||
| <input type="file" name="fileUpload_l" id="fileUpload_l" onchange="" style="display:none;" accept=".pdf,.ofd,.txt,.wps,.xlsx,.xls,.pub,.docx,.doc,.xml,.jpg,.png"> | |||
| <input name="fj" type="button" class="fj_btn" onclick="uploadModal()"> | |||
| <input type="file" name="fileUpload_l" id="fileUpload_l" onchange="uploadFile()" style="display:none;" accept=".pdf,.ofd,.txt,.wps,.xlsx,.xls,.pub,.docx,.doc,.xml,.jpg,.png"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -53,28 +53,30 @@ | |||
| <div class="daj_middle"> | |||
| <label class="daj_left_two control-label"></label> | |||
| <div class="daj_right_two fj_box1" style="min-height:47px;height: auto;"> | |||
| <table id="table-show" class="table table-hover" style="margin-bottom: 10px;"> | |||
| <tbody> | |||
| <tr> | |||
| <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(三月至五月).docx</td> | |||
| <td class="width-8">非密</td> | |||
| <td class="width-20"></td> | |||
| <td> | |||
| <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a> | |||
| <a data-id =""><img src="/img/use/delete.png"/></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(二月).docx</td> | |||
| <td class="width-8">机密</td> | |||
| <td class="width-20">保密期限:2025-01-14</td> | |||
| <td> | |||
| <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a> | |||
| <a data-id =""><img src="/img/use/delete.png"/></a> | |||
| </td> | |||
| </tr> | |||
| <div class="table-container"> | |||
| <table id="table-show" class="table table-hover" style="margin-bottom: 10px;height: 100px; overflow-y: auto;"> | |||
| <tbody id="filetb"> | |||
| <!-- <tr>--> | |||
| <!-- <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(三月至五月).docx</td>--> | |||
| <!-- <td class="width-8">非密</td>--> | |||
| <!-- <td class="width-20"></td>--> | |||
| <!-- <td>--> | |||
| <!-- <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a>--> | |||
| <!-- <a data-id =""><img src="/img/use/delete.png"/></a>--> | |||
| <!-- </td>--> | |||
| <!-- </tr>--> | |||
| <!-- <tr>--> | |||
| <!-- <td class="width-40"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(二月).docx</td>--> | |||
| <!-- <td class="width-8">机密</td>--> | |||
| <!-- <td class="width-20">保密期限:2025-01-14</td>--> | |||
| <!-- <td>--> | |||
| <!-- <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a>--> | |||
| <!-- <a data-id =""><img src="/img/use/delete.png"/></a>--> | |||
| <!-- </td>--> | |||
| <!-- </tr>--> | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -95,7 +97,9 @@ | |||
| <script th:inline="javascript"> | |||
| var prefix = ctx + "system/meeting"; | |||
| var userList = [[${rwkMeeting.rwkMeetingStaffList}]]; | |||
| var fileList = [[${rwkMeeting.rwkMeetingFileList}]]; | |||
| showByUser(); | |||
| showByFile(); | |||
| $("#form-meeting-edit").validate({ | |||
| focusCleanup: true | |||
| }); | |||
| @@ -116,6 +120,11 @@ | |||
| obj["rwkMeetingStaffList["+index+"]."+key] = item[key]; | |||
| } | |||
| }) | |||
| fileList.forEach(function (item,index){ | |||
| for (const key in item){ | |||
| obj["rwkMeetingFileList["+index+"]."+key] = item[key]; | |||
| } | |||
| }) | |||
| $.operate.save(prefix + "/edit", $.param(obj)); | |||
| } | |||
| } | |||
| @@ -148,6 +157,68 @@ | |||
| } | |||
| $("#invite").html(html); | |||
| } | |||
| //上传附件弹窗 | |||
| function uploadModal(){ | |||
| const options = { | |||
| title: '培训附件上传', | |||
| url: prefix + "/addMeetingFile", | |||
| skin: 'layui-layer-blue', | |||
| btn: ['保存', '取消'], | |||
| width: 750, | |||
| height: 520, | |||
| maxmin: false, | |||
| full: false, | |||
| yes: function (index, layero) { | |||
| var iframeWin = layero.find('iframe')[0]; | |||
| var data = iframeWin.contentWindow.selectFiles(); | |||
| fileList.push(data); | |||
| $.modal.close(index); | |||
| showByFile(); | |||
| } | |||
| }; | |||
| $.modal.openOptions(options); | |||
| } | |||
| function download(url){ | |||
| window.location.href = ctx + "common/download/resource?resource=" + encodeURI(url); | |||
| } | |||
| function delrow(index){ | |||
| fileList.splice(index,1); | |||
| showByFile(); | |||
| } | |||
| //根据文件数据集合进行回显 | |||
| function showByFile(){ | |||
| var html = ""; | |||
| //根据id为filetb的table进行回显 | |||
| if (fileList && fileList.length>0){ | |||
| fileList.forEach(function (item,index){ | |||
| html += ` <tr> | |||
| <td style="width: 80%;"> | |||
| <img src="/img/use/filelook.png" />${item.fileName.substring(item.fileName.lastIndexOf("/") + 1)} </td> | |||
| <td> | |||
| <a class='download-link' data-url="${item.fileName}" style='margin-right: 10px;'> | |||
| <img src="/img/use/xiazai.png"/> | |||
| </a> | |||
| <a data-id="" onclick="delrow(${index})"> | |||
| <img src="/img/use/delete.png"/> | |||
| </a> | |||
| </td> | |||
| </tr> | |||
| `; | |||
| }) | |||
| } | |||
| $("#filetb").html(html); | |||
| } | |||
| // 绑定下载事件 | |||
| // 使用事件委托绑定下载和删除事件 | |||
| document.getElementById('filetb').addEventListener('click', function(event) { | |||
| if (event.target.closest('.download-link')) { | |||
| const url = event.target.closest('.download-link').getAttribute('data-url'); | |||
| download(url); | |||
| } else if (event.target.closest('[onclick*="delrow"]')) { | |||
| const index = parseInt(event.target.closest('[onclick*="delrow"]').getAttribute('onclick').match(/\d+/)[0]); | |||
| delrow(index); | |||
| } | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -77,18 +77,28 @@ | |||
| title: '培训标题' | |||
| }, | |||
| { | |||
| field: 'rwkMeetingStaffList', | |||
| field: 'signCount', | |||
| title: '参与人数/受邀人数', | |||
| formatter: function(value, row, index) { | |||
| var str = "0/0"; | |||
| if (value && value.length > 0){ | |||
| var totalInvited = value.length; // 受邀人员总数 | |||
| //提取已签到数量的数 不使用filter方法 | |||
| // var signedInCount = value.filter(person => person.isSign === 1).length; // 签到人数 | |||
| // str = signedInCount+"/"+totalInvited; | |||
| } | |||
| return str; | |||
| } | |||
| // formatter: function(value, row, index) { | |||
| // console.log("rwkMeetingStaffList:", value); // 添加调试信息 | |||
| // console.log("Type of rwkMeetingStaffList:", typeof value); // 添加调试信息 | |||
| // let str = "0/0"; | |||
| // if (value && Array.isArray(value)) { // 确保 value 是一个数组 | |||
| // const totalInvited = value.length; // 受邀人员总数 | |||
| // // 提取已签到数量的数 不使用filter方法 | |||
| // let totalAttend = 0; | |||
| // for (let i = 0; i < totalInvited; i++) { | |||
| // console.log(i + ":", value[i]); | |||
| // if (value[i].isSign === 1) { | |||
| // totalAttend++; | |||
| // } | |||
| // } | |||
| // str = totalAttend + "/" + totalInvited; | |||
| // } else { | |||
| // console.error("rwkMeetingStaffList is not an array:", value); // 添加错误信息 | |||
| // } | |||
| // return str; | |||
| // } | |||
| }, | |||
| { | |||
| field: 'meetingDate', | |||
| @@ -42,6 +42,7 @@ | |||
| </div> | |||
| <div style="display: flex;"> | |||
| <div style="width: 50%;margin-right: 20px;"> | |||
| <div class="table-container"> | |||
| <table class="userTable"> | |||
| <tr> | |||
| <th>姓名</th> | |||
| @@ -54,24 +55,15 @@ | |||
| <td>手机号测试</td> | |||
| </tr> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| <div style="width: 50%;border: 1px solid #d7dff2;"> | |||
| <table id="table-show" class="table table-hover" style="margin-bottom: 10px;"> | |||
| <tbody> | |||
| <tr> | |||
| <td style="width: 80%;"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(三月至五月).docx</td> | |||
| <td> | |||
| <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td style="width: 80%;"><img src="/img/use/filelook.png" />厨房零配件维修清单及报价(二月).docx</td> | |||
| <td> | |||
| <a style='margin-right: 10px;'><img src="/img/use/xiazai.png"/></a> | |||
| </td> | |||
| </tr> | |||
| <div class="table-container"> | |||
| <table class="table table-hover" style="margin-bottom: 10px; height: 300px; overflow-y: auto;"> | |||
| <tbody id="table-show"> | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -84,12 +76,14 @@ | |||
| <script th:inline="javascript"> | |||
| var prefix = ctx + "system/meeting"; | |||
| var userList = [[${rwkMeeting.rwkMeetingStaffList}]]; | |||
| var fileList = [[${rwkMeeting.rwkMeetingFileList}]]; | |||
| init(); | |||
| //初始化加载 | |||
| function init(){ | |||
| peopleShow(userList); | |||
| numShow(userList); | |||
| fileShow(fileList); | |||
| } | |||
| //统计饼图展示 | |||
| @@ -119,6 +113,37 @@ | |||
| }); | |||
| $(".userTable").html(html); | |||
| } | |||
| //附件下载 | |||
| function download(url){ | |||
| window.location.href = ctx + "common/download/resource?resource=" + encodeURI(url); | |||
| } | |||
| //附件列表展示 | |||
| function fileShow(data){ | |||
| var html = ""; | |||
| //根据id为filetb的table进行回显 | |||
| if (data && data.length>0){ | |||
| data.forEach(function (item,index){ | |||
| html += ` <tr> | |||
| <td style="width: 80%;"> | |||
| <img src="/img/use/filelook.png" />${item.fileName.substring(item.fileName.lastIndexOf("/") + 1)} </td> | |||
| <td> | |||
| <a class='download-link' data-url="${item.fileName}" style='margin-right: 10px;'> | |||
| <img src="/img/use/xiazai.png"/> | |||
| </a> | |||
| </td> | |||
| </tr> | |||
| `; | |||
| }) | |||
| } | |||
| $("#table-show").html(html); | |||
| } | |||
| // 使用事件委托绑定下载和删除事件 | |||
| document.getElementById('table-show').addEventListener('click', function(event) { | |||
| if (event.target.closest('.download-link')) { | |||
| const url = event.target.closest('.download-link').getAttribute('data-url'); | |||
| download(url); | |||
| } | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -38,10 +38,16 @@ public class RwkMeeting extends BaseEntity | |||
| /** 培训人员签到信息 */ | |||
| private List<RwkMeetingStaff> rwkMeetingStaffList; | |||
| /** 培训相关附件 */ | |||
| private List<RwkMeetingFile> rwkMeetingFileList; | |||
| private String startDate; | |||
| private String endDate; | |||
| /** 培训人员已签到人数及全部应签到人数*/ | |||
| private String signCount; | |||
| public void setId(Long id) | |||
| { | |||
| this.id = id; | |||
| @@ -118,6 +124,22 @@ public class RwkMeeting extends BaseEntity | |||
| this.endDate = endDate; | |||
| } | |||
| public List<RwkMeetingFile> getRwkMeetingFileList() { | |||
| return rwkMeetingFileList; | |||
| } | |||
| public void setRwkMeetingFileList(List<RwkMeetingFile> rwkMeetingFileList) { | |||
| this.rwkMeetingFileList = rwkMeetingFileList; | |||
| } | |||
| public String getSignCount() { | |||
| return signCount; | |||
| } | |||
| public void setSignCount(String signCount) { | |||
| this.signCount = signCount; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | |||
| @@ -129,6 +151,7 @@ public class RwkMeeting extends BaseEntity | |||
| .append("createTime", getCreateTime()) | |||
| .append("createBy", getCreateBy()) | |||
| .append("rwkMeetingStaffList", getRwkMeetingStaffList()) | |||
| .append("rwkMeetingFileList", getRwkMeetingFileList()) | |||
| .append("startDate", getStartDate()) | |||
| .append("endDate", getEndDate()) | |||
| .toString(); | |||
| @@ -0,0 +1,97 @@ | |||
| package com.rwk.system.domain; | |||
| import org.apache.commons.lang3.builder.ToStringBuilder; | |||
| import org.apache.commons.lang3.builder.ToStringStyle; | |||
| import com.rwk.common.annotation.Excel; | |||
| import com.rwk.common.core.domain.BaseEntity; | |||
| /** | |||
| * 【请填写功能名称】对象 rwk_meeting_file | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-21 | |||
| */ | |||
| public class RwkMeetingFile extends BaseEntity | |||
| { | |||
| private static final long serialVersionUID = 1L; | |||
| /** 主键 */ | |||
| private Long id; | |||
| /** 附件名称 */ | |||
| @Excel(name = "附件名称") | |||
| private String fileName; | |||
| /** 密级 */ | |||
| @Excel(name = "密级") | |||
| private String secret; | |||
| /** 保密期限 */ | |||
| @Excel(name = "保密期限") | |||
| private String secretDate; | |||
| /** 教育培训ID */ | |||
| @Excel(name = "教育培训ID") | |||
| private Long meetingId; | |||
| public void setId(Long id) | |||
| { | |||
| this.id = id; | |||
| } | |||
| public Long getId() | |||
| { | |||
| return id; | |||
| } | |||
| public void setFileName(String fileName) | |||
| { | |||
| this.fileName = fileName; | |||
| } | |||
| public String getFileName() | |||
| { | |||
| return fileName; | |||
| } | |||
| public void setSecret(String secret) | |||
| { | |||
| this.secret = secret; | |||
| } | |||
| public String getSecret() | |||
| { | |||
| return secret; | |||
| } | |||
| public void setSecretDate(String secretDate) | |||
| { | |||
| this.secretDate = secretDate; | |||
| } | |||
| public String getSecretDate() | |||
| { | |||
| return secretDate; | |||
| } | |||
| public void setMeetingId(Long meetingId) | |||
| { | |||
| this.meetingId = meetingId; | |||
| } | |||
| public Long getMeetingId() | |||
| { | |||
| return meetingId; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | |||
| .append("id", getId()) | |||
| .append("fileName", getFileName()) | |||
| .append("secret", getSecret()) | |||
| .append("secretDate", getSecretDate()) | |||
| .append("meetingId", getMeetingId()) | |||
| .toString(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,64 @@ | |||
| package com.rwk.system.mapper; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeetingFile; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| /** | |||
| * 【教育培训附件】Mapper接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-21 | |||
| */ | |||
| public interface RwkMeetingFileMapper | |||
| { | |||
| /** | |||
| * 查询【教育培训附件】 | |||
| * | |||
| * @param id 【教育培训附件】主键 | |||
| * @return 【教育培训附件】 | |||
| */ | |||
| public RwkMeetingFile selectRwkMeetingFileById(Long id); | |||
| /** | |||
| * 查询【教育培训附件】列表 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 【教育培训附件】集合 | |||
| */ | |||
| public List<RwkMeetingFile> selectRwkMeetingFileList(RwkMeetingFile rwkMeetingFile); | |||
| /** | |||
| * 新增【教育培训附件】 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 结果 | |||
| */ | |||
| public int insertRwkMeetingFile(RwkMeetingFile rwkMeetingFile); | |||
| /** | |||
| * 修改【教育培训附件】 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 结果 | |||
| */ | |||
| public int updateRwkMeetingFile(RwkMeetingFile rwkMeetingFile); | |||
| /** | |||
| * 删除【教育培训附件】 | |||
| * | |||
| * @param id 【教育培训附件】主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingFileById(Long id); | |||
| /** | |||
| * 批量删除【教育培训附件】 | |||
| * | |||
| * @param ids 需要删除的数据主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingFileByIds(String[] ids); | |||
| } | |||
| @@ -2,6 +2,7 @@ package com.rwk.system.mapper; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeeting; | |||
| import com.rwk.system.domain.RwkMeetingFile; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| /** | |||
| @@ -67,6 +68,14 @@ public interface RwkMeetingMapper | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffByMeetingIds(String[] ids); | |||
| /** | |||
| * 批量删除培训附件 | |||
| * | |||
| * @param ids 需要删除的数据主键集合 | |||
| * @return 结果 | |||
| */ | |||
| int deleteRwkMeetingFileByMeetingIds(String[] ids); | |||
| /** | |||
| * 批量新增培训人员签到 | |||
| @@ -75,6 +84,14 @@ public interface RwkMeetingMapper | |||
| * @return 结果 | |||
| */ | |||
| public int batchRwkMeetingStaff(List<RwkMeetingStaff> rwkMeetingStaffList); | |||
| /** | |||
| * 批量新增培训附件 | |||
| * | |||
| * @param rwkMeetingFileList 培训附件列表 | |||
| * @return 结果 | |||
| */ | |||
| public int batchRwkMeetingFile(List<RwkMeetingFile> rwkMeetingFileList); | |||
| /** | |||
| @@ -84,4 +101,12 @@ public interface RwkMeetingMapper | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffByMeetingId(Long id); | |||
| /** | |||
| * 通过教育培训主键删除培训附件信息 | |||
| * | |||
| * @param id 教育培训ID | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingFileByMeetingId(Long id); | |||
| } | |||
| @@ -0,0 +1,61 @@ | |||
| package com.rwk.system.service; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeetingFile; | |||
| /** | |||
| * 【教育培训附件】Service接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-21 | |||
| */ | |||
| public interface IRwkMeetingFileService | |||
| { | |||
| /** | |||
| * 查询【教育培训附件】 | |||
| * | |||
| * @param id 【教育培训附件】主键 | |||
| * @return 【教育培训附件】 | |||
| */ | |||
| public RwkMeetingFile selectRwkMeetingFileById(Long id); | |||
| /** | |||
| * 查询【教育培训附件】列表 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 【教育培训附件】集合 | |||
| */ | |||
| public List<RwkMeetingFile> selectRwkMeetingFileList(RwkMeetingFile rwkMeetingFile); | |||
| /** | |||
| * 新增【教育培训附件】 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 结果 | |||
| */ | |||
| public int insertRwkMeetingFile(RwkMeetingFile rwkMeetingFile); | |||
| /** | |||
| * 修改【教育培训附件】 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 结果 | |||
| */ | |||
| public int updateRwkMeetingFile(RwkMeetingFile rwkMeetingFile); | |||
| /** | |||
| * 批量删除【教育培训附件】 | |||
| * | |||
| * @param ids 需要删除的【教育培训附件】主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingFileByIds(String ids); | |||
| /** | |||
| * 删除【教育培训附件】信息 | |||
| * | |||
| * @param id 【教育培训附件】主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingFileById(Long id); | |||
| } | |||
| @@ -0,0 +1,94 @@ | |||
| package com.rwk.system.service.impl; | |||
| import java.util.List; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import com.rwk.system.mapper.RwkMeetingFileMapper; | |||
| import com.rwk.system.domain.RwkMeetingFile; | |||
| import com.rwk.system.service.IRwkMeetingFileService; | |||
| import com.rwk.common.core.text.Convert; | |||
| /** | |||
| * 【教育培训附件】Service业务层处理 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-21 | |||
| */ | |||
| @Service | |||
| public class RwkMeetingFileServiceImpl implements IRwkMeetingFileService | |||
| { | |||
| @Autowired | |||
| private RwkMeetingFileMapper rwkMeetingFileMapper; | |||
| /** | |||
| * 查询【教育培训附件】 | |||
| * | |||
| * @param id 【教育培训附件】主键 | |||
| * @return 【教育培训附件】 | |||
| */ | |||
| @Override | |||
| public RwkMeetingFile selectRwkMeetingFileById(Long id) | |||
| { | |||
| return rwkMeetingFileMapper.selectRwkMeetingFileById(id); | |||
| } | |||
| /** | |||
| * 查询【教育培训附件】列表 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 【教育培训附件】 | |||
| */ | |||
| @Override | |||
| public List<RwkMeetingFile> selectRwkMeetingFileList(RwkMeetingFile rwkMeetingFile) | |||
| { | |||
| return rwkMeetingFileMapper.selectRwkMeetingFileList(rwkMeetingFile); | |||
| } | |||
| /** | |||
| * 新增【教育培训附件】 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int insertRwkMeetingFile(RwkMeetingFile rwkMeetingFile) | |||
| { | |||
| return rwkMeetingFileMapper.insertRwkMeetingFile(rwkMeetingFile); | |||
| } | |||
| /** | |||
| * 修改【教育培训附件】 | |||
| * | |||
| * @param rwkMeetingFile 【教育培训附件】 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int updateRwkMeetingFile(RwkMeetingFile rwkMeetingFile) | |||
| { | |||
| return rwkMeetingFileMapper.updateRwkMeetingFile(rwkMeetingFile); | |||
| } | |||
| /** | |||
| * 批量删除【教育培训附件】 | |||
| * | |||
| * @param ids 需要删除的【教育培训附件】主键 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int deleteRwkMeetingFileByIds(String ids) | |||
| { | |||
| return rwkMeetingFileMapper.deleteRwkMeetingFileByIds(Convert.toStrArray(ids)); | |||
| } | |||
| /** | |||
| * 删除【教育培训附件】信息 | |||
| * | |||
| * @param id 【教育培训附件】主键 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int deleteRwkMeetingFileById(Long id) | |||
| { | |||
| return rwkMeetingFileMapper.deleteRwkMeetingFileById(id); | |||
| } | |||
| } | |||
| @@ -1,6 +1,8 @@ | |||
| package com.rwk.system.service.impl; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeetingFile; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.ArrayList; | |||
| @@ -60,6 +62,7 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||
| { | |||
| int rows = rwkMeetingMapper.insertRwkMeeting(rwkMeeting); | |||
| insertRwkMeetingStaff(rwkMeeting); | |||
| insertRwkMeetingFile(rwkMeeting); | |||
| return rows; | |||
| } | |||
| @@ -74,7 +77,9 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||
| public int updateRwkMeeting(RwkMeeting rwkMeeting) | |||
| { | |||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(rwkMeeting.getId()); | |||
| rwkMeetingMapper.deleteRwkMeetingFileByMeetingId(rwkMeeting.getId()); | |||
| insertRwkMeetingStaff(rwkMeeting); | |||
| insertRwkMeetingFile(rwkMeeting); | |||
| return rwkMeetingMapper.updateRwkMeeting(rwkMeeting); | |||
| } | |||
| @@ -89,6 +94,7 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||
| public int deleteRwkMeetingByIds(String ids) | |||
| { | |||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingIds(Convert.toStrArray(ids)); | |||
| rwkMeetingMapper.deleteRwkMeetingFileByMeetingIds(Convert.toStrArray(ids)); | |||
| return rwkMeetingMapper.deleteRwkMeetingByIds(Convert.toStrArray(ids)); | |||
| } | |||
| @@ -103,6 +109,7 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||
| public int deleteRwkMeetingById(Long id) | |||
| { | |||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(id); | |||
| rwkMeetingMapper.deleteRwkMeetingFileByMeetingId(id); | |||
| return rwkMeetingMapper.deleteRwkMeetingById(id); | |||
| } | |||
| @@ -126,4 +133,18 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||
| } | |||
| } | |||
| } | |||
| public void insertRwkMeetingFile(RwkMeeting rwkMeeting){ | |||
| List<RwkMeetingFile> rwkMeetingFileList = rwkMeeting.getRwkMeetingFileList(); | |||
| Long id = rwkMeeting.getId(); | |||
| if (StringUtils.isNotNull(rwkMeetingFileList)) { | |||
| List<RwkMeetingFile> list = new ArrayList<>(); | |||
| for (RwkMeetingFile rwkMeetingFile : rwkMeetingFileList) { | |||
| rwkMeetingFile.setMeetingId(id); | |||
| list.add(rwkMeetingFile); | |||
| } | |||
| if (!list.isEmpty()) { | |||
| rwkMeetingMapper.batchRwkMeetingFile(list); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,74 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <!DOCTYPE mapper | |||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.rwk.system.mapper.RwkMeetingFileMapper"> | |||
| <resultMap type="RwkMeetingFile" id="RwkMeetingFileResult"> | |||
| <result property="id" column="id" /> | |||
| <result property="fileName" column="file_name" /> | |||
| <result property="secret" column="secret" /> | |||
| <result property="secretDate" column="secret_date" /> | |||
| <result property="meetingId" column="meeting_id" /> | |||
| </resultMap> | |||
| <sql id="selectRwkMeetingFileVo"> | |||
| select id, file_name, secret, secret_date, meeting_id from rwk_meeting_file | |||
| </sql> | |||
| <select id="selectRwkMeetingFileList" parameterType="RwkMeetingFile" resultMap="RwkMeetingFileResult"> | |||
| <include refid="selectRwkMeetingFileVo"/> | |||
| <where> | |||
| <if test="fileName != null and fileName != ''"> and file_name like concat('%', #{fileName}, '%')</if> | |||
| <if test="secret != null and secret != ''"> and secret = #{secret}</if> | |||
| <if test="secretDate != null and secretDate != ''"> and secret_date = #{secretDate}</if> | |||
| <if test="meetingId != null "> and meeting_id = #{meetingId}</if> | |||
| </where> | |||
| </select> | |||
| <select id="selectRwkMeetingFileById" parameterType="Long" resultMap="RwkMeetingFileResult"> | |||
| <include refid="selectRwkMeetingFileVo"/> | |||
| where id = #{id} | |||
| </select> | |||
| <insert id="insertRwkMeetingFile" parameterType="RwkMeetingFile"> | |||
| insert into rwk_meeting_file | |||
| <trim prefix="(" suffix=")" suffixOverrides=","> | |||
| <if test="id != null">id,</if> | |||
| <if test="fileName != null">file_name,</if> | |||
| <if test="secret != null">secret,</if> | |||
| <if test="secretDate != null">secret_date,</if> | |||
| <if test="meetingId != null">meeting_id,</if> | |||
| </trim> | |||
| <trim prefix="values (" suffix=")" suffixOverrides=","> | |||
| <if test="id != null">#{id},</if> | |||
| <if test="fileName != null">#{fileName},</if> | |||
| <if test="secret != null">#{secret},</if> | |||
| <if test="secretDate != null">#{secretDate},</if> | |||
| <if test="meetingId != null">#{meetingId},</if> | |||
| </trim> | |||
| </insert> | |||
| <update id="updateRwkMeetingFile" parameterType="RwkMeetingFile"> | |||
| update rwk_meeting_file | |||
| <trim prefix="SET" suffixOverrides=","> | |||
| <if test="fileName != null">file_name = #{fileName},</if> | |||
| <if test="secret != null">secret = #{secret},</if> | |||
| <if test="secretDate != null">secret_date = #{secretDate},</if> | |||
| <if test="meetingId != null">meeting_id = #{meetingId},</if> | |||
| </trim> | |||
| where id = #{id} | |||
| </update> | |||
| <delete id="deleteRwkMeetingFileById" parameterType="Long"> | |||
| delete from rwk_meeting_file where id = #{id} | |||
| </delete> | |||
| <delete id="deleteRwkMeetingFileByIds" parameterType="String"> | |||
| delete from rwk_meeting_file where id in | |||
| <foreach item="id" collection="array" open="(" separator="," close=")"> | |||
| #{id} | |||
| </foreach> | |||
| </delete> | |||
| </mapper> | |||
| @@ -13,12 +13,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| <result property="createTime" column="create_time" /> | |||
| <result property="createBy" column="create_by" /> | |||
| <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList"/> | |||
| <collection property="rwkMeetingFileList" ofType="RwkMeetingFile" column="id" select="selectRwkMeetingFileList"/> | |||
| </resultMap> | |||
| <resultMap id="RwkMeetingRwkMeetingStaffResult" type="RwkMeeting" extends="RwkMeetingResult"> | |||
| <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList" /> | |||
| <collection property="rwkMeetingFileList" ofType="RwkMeetingFile" column="id" select="selectRwkMeetingFileList" /> | |||
| </resultMap> | |||
| <!-- <resultMap id="RwkMeetingRwkMeetingFileResult" type="RwkMeeting" extends="RwkMeetingResult">--> | |||
| <!-- --> | |||
| <!-- </resultMap>--> | |||
| <resultMap type="RwkMeetingStaff" id="RwkMeetingStaffResult"> | |||
| <result property="id" column="id" /> | |||
| <result property="meetingId" column="meeting_id" /> | |||
| @@ -28,6 +34,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| <result property="mobilePhone" column="mobile_phone" /> | |||
| </resultMap> | |||
| <resultMap type="RwkMeetingFile" id="RwkMeetingFileResult"> | |||
| <result property="id" column="id" /> | |||
| <result property="fileName" column="file_name" /> | |||
| <result property="secret" column="secret" /> | |||
| <result property="secretDate" column="secret_date" /> | |||
| <result property="meetingId" column="meeting_id" /> | |||
| </resultMap> | |||
| <sql id="selectRwkMeetingVo"> | |||
| select id, meeting_name, meeting_content, meeting_date, meeting_by_company, create_time, create_by from rwk_meeting | |||
| </sql> | |||
| @@ -56,6 +70,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| where meeting_id = #{meeting_id} | |||
| </select> | |||
| <select id="selectRwkMeetingFileList" resultMap="RwkMeetingFileResult"> | |||
| select id, file_name, secret, secret_date,meeting_id | |||
| from rwk_meeting_file | |||
| where meeting_id = #{meeting_id} | |||
| </select> | |||
| <insert id="insertRwkMeeting" parameterType="RwkMeeting" keyProperty="id"> | |||
| insert into rwk_meeting | |||
| <trim prefix="(" suffix=")" suffixOverrides=","> | |||
| @@ -108,11 +128,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| #{meetingId} | |||
| </foreach> | |||
| </delete> | |||
| <delete id="deleteRwkMeetingFileByMeetingIds" parameterType="String"> | |||
| delete from rwk_meeting_file where meeting_id in | |||
| <foreach item="meetingId" collection="array" open="(" separator="," close=")"> | |||
| #{meetingId} | |||
| </foreach> | |||
| </delete> | |||
| <delete id="deleteRwkMeetingStaffByMeetingId" parameterType="Long"> | |||
| delete from rwk_meeting_staff where meeting_id = #{meetingId} | |||
| </delete> | |||
| <delete id="deleteRwkMeetingFileByMeetingId" parameterType="Long"> | |||
| delete from rwk_meeting_file where meeting_id = #{meetingId} | |||
| </delete> | |||
| <insert id="batchRwkMeetingStaff"> | |||
| insert into rwk_meeting_staff( meeting_id, personnel_name, is_sign, personnel_id, mobile_phone) values | |||
| <foreach item="item" index="index" collection="list" separator=","> | |||
| @@ -120,4 +150,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| </foreach> | |||
| </insert> | |||
| <insert id="batchRwkMeetingFile"> | |||
| insert into rwk_meeting_file( file_name, secret, secret_date,meeting_id) values | |||
| <foreach item="item" index="index" collection="list" separator=","> | |||
| ( #{item.fileName}, #{item.secret}, #{item.secretDate},#{item.meetingId}) | |||
| </foreach> | |||
| </insert> | |||
| </mapper> | |||