| @@ -2,6 +2,7 @@ package com.rwk.web.controller.ability; | |||||
| import java.util.List; | import java.util.List; | ||||
| import com.rwk.common.utils.DateUtils; | import com.rwk.common.utils.DateUtils; | ||||
| import com.rwk.system.domain.RwkMeetingStaff; | |||||
| import com.rwk.system.domain.RwkStaffInformation; | import com.rwk.system.domain.RwkStaffInformation; | ||||
| import com.rwk.system.service.IRwkStaffInformationService; | import com.rwk.system.service.IRwkStaffInformationService; | ||||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | import org.apache.shiro.authz.annotation.RequiresPermissions; | ||||
| @@ -57,6 +58,16 @@ public class RwkMeetingController extends BaseController | |||||
| { | { | ||||
| startPage(); | startPage(); | ||||
| List<RwkMeeting> list = rwkMeetingService.selectRwkMeetingList(rwkMeeting); | 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); | return getDataTable(list); | ||||
| } | } | ||||
| @@ -81,6 +92,16 @@ public class RwkMeetingController extends BaseController | |||||
| return prefix + "/userSelect"; | 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)); | throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName)); | ||||
| } | } | ||||
| String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); | 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); | response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); | ||||
| FileUtils.setAttachmentResponseHeader(response, realFileName); | FileUtils.setAttachmentResponseHeader(response, realFileName); | ||||
| @@ -53,4 +53,10 @@ | |||||
| } | } | ||||
| .signFail{ | .signFail{ | ||||
| color: #a94442; | color: #a94442; | ||||
| } | |||||
| .table-container { | |||||
| height: 200px; /* 设置固定高度 */ | |||||
| overflow-y: auto; /* 启用垂直滚动条 */ | |||||
| border: 1px solid #ccc; /* 可选:添加边框以便于查看 */ | |||||
| margin-bottom: 20px; /* 可选:添加底部间距 */ | |||||
| } | } | ||||
| @@ -329,7 +329,11 @@ | |||||
| init(); | init(); | ||||
| //数据进行初始化加载 | //数据进行初始化加载 | ||||
| function init(){ | function init(){ | ||||
| // 初始化时设置第一个标题为激活状态 | |||||
| $('.sidebar .title').first().addClass('active'); | |||||
| // 初始化箭头位置 | |||||
| var arrow = $("#arrow"); | |||||
| arrow.css('top', $('.sidebar .title').first().position().top + 11); | |||||
| } | } | ||||
| function rollingLinkage(){ | function rollingLinkage(){ | ||||
| @@ -353,7 +357,42 @@ | |||||
| scrollTop: scrollPosition | scrollTop: scrollPosition | ||||
| }, 300); // 动画效果 | }, 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> | </script> | ||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -42,8 +42,8 @@ | |||||
| <label class="daj_left_two control-label">附件</label> | <label class="daj_left_two control-label">附件</label> | ||||
| <div class="daj_right_two fj_box1"> | <div class="daj_right_two fj_box1"> | ||||
| <div style="height: 43px;width: 100%;margin-top: 3px;"> | <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> | </div> | ||||
| </div> | </div> | ||||
| @@ -52,28 +52,30 @@ | |||||
| <div class="daj_middle"> | <div class="daj_middle"> | ||||
| <label class="daj_left_two control-label"></label> | <label class="daj_left_two control-label"></label> | ||||
| <div class="daj_right_two fj_box1" style="min-height:47px;height: auto;"> | <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;"> | <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> | </tbody> | ||||
| </table> | </table> | ||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -96,6 +98,7 @@ | |||||
| var editFlag = [[${@permission.hasPermi('system:meeting:edit')}]]; | var editFlag = [[${@permission.hasPermi('system:meeting:edit')}]]; | ||||
| var removeFlag = [[${@permission.hasPermi('system:meeting:remove')}]]; | var removeFlag = [[${@permission.hasPermi('system:meeting:remove')}]]; | ||||
| var userList = []; | var userList = []; | ||||
| var fileList = []; | |||||
| $("#form-meeting-add").validate({ | $("#form-meeting-add").validate({ | ||||
| focusCleanup: true | focusCleanup: true | ||||
| }); | }); | ||||
| @@ -116,6 +119,11 @@ | |||||
| obj["rwkMeetingStaffList["+index+"]."+key] = item[key]; | 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)); | $.operate.save(prefix + "/add", $.param(obj)); | ||||
| } | } | ||||
| } | } | ||||
| @@ -148,6 +156,69 @@ | |||||
| } | } | ||||
| $("#invite").html(html); | $("#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> | </script> | ||||
| </body> | </body> | ||||
| </html> | </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> | <label class="daj_left_two control-label">附件</label> | ||||
| <div class="daj_right_two fj_box1"> | <div class="daj_right_two fj_box1"> | ||||
| <div style="height: 43px;width: 100%;margin-top: 3px;"> | <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> | </div> | ||||
| </div> | </div> | ||||
| @@ -53,28 +53,30 @@ | |||||
| <div class="daj_middle"> | <div class="daj_middle"> | ||||
| <label class="daj_left_two control-label"></label> | <label class="daj_left_two control-label"></label> | ||||
| <div class="daj_right_two fj_box1" style="min-height:47px;height: auto;"> | <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> | </tbody> | ||||
| </table> | </table> | ||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -95,7 +97,9 @@ | |||||
| <script th:inline="javascript"> | <script th:inline="javascript"> | ||||
| var prefix = ctx + "system/meeting"; | var prefix = ctx + "system/meeting"; | ||||
| var userList = [[${rwkMeeting.rwkMeetingStaffList}]]; | var userList = [[${rwkMeeting.rwkMeetingStaffList}]]; | ||||
| var fileList = [[${rwkMeeting.rwkMeetingFileList}]]; | |||||
| showByUser(); | showByUser(); | ||||
| showByFile(); | |||||
| $("#form-meeting-edit").validate({ | $("#form-meeting-edit").validate({ | ||||
| focusCleanup: true | focusCleanup: true | ||||
| }); | }); | ||||
| @@ -116,6 +120,11 @@ | |||||
| obj["rwkMeetingStaffList["+index+"]."+key] = item[key]; | 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)); | $.operate.save(prefix + "/edit", $.param(obj)); | ||||
| } | } | ||||
| } | } | ||||
| @@ -148,6 +157,68 @@ | |||||
| } | } | ||||
| $("#invite").html(html); | $("#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> | </script> | ||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -77,18 +77,28 @@ | |||||
| title: '培训标题' | title: '培训标题' | ||||
| }, | }, | ||||
| { | { | ||||
| field: 'rwkMeetingStaffList', | |||||
| field: 'signCount', | |||||
| title: '参与人数/受邀人数', | 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', | field: 'meetingDate', | ||||
| @@ -42,6 +42,7 @@ | |||||
| </div> | </div> | ||||
| <div style="display: flex;"> | <div style="display: flex;"> | ||||
| <div style="width: 50%;margin-right: 20px;"> | <div style="width: 50%;margin-right: 20px;"> | ||||
| <div class="table-container"> | |||||
| <table class="userTable"> | <table class="userTable"> | ||||
| <tr> | <tr> | ||||
| <th>姓名</th> | <th>姓名</th> | ||||
| @@ -54,24 +55,15 @@ | |||||
| <td>手机号测试</td> | <td>手机号测试</td> | ||||
| </tr> | </tr> | ||||
| </table> | </table> | ||||
| </div> | |||||
| </div> | </div> | ||||
| <div style="width: 50%;border: 1px solid #d7dff2;"> | <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> | </tbody> | ||||
| </table> | </table> | ||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| @@ -84,12 +76,14 @@ | |||||
| <script th:inline="javascript"> | <script th:inline="javascript"> | ||||
| var prefix = ctx + "system/meeting"; | var prefix = ctx + "system/meeting"; | ||||
| var userList = [[${rwkMeeting.rwkMeetingStaffList}]]; | var userList = [[${rwkMeeting.rwkMeetingStaffList}]]; | ||||
| var fileList = [[${rwkMeeting.rwkMeetingFileList}]]; | |||||
| init(); | init(); | ||||
| //初始化加载 | //初始化加载 | ||||
| function init(){ | function init(){ | ||||
| peopleShow(userList); | peopleShow(userList); | ||||
| numShow(userList); | numShow(userList); | ||||
| fileShow(fileList); | |||||
| } | } | ||||
| //统计饼图展示 | //统计饼图展示 | ||||
| @@ -119,6 +113,37 @@ | |||||
| }); | }); | ||||
| $(".userTable").html(html); | $(".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> | </script> | ||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -38,10 +38,16 @@ public class RwkMeeting extends BaseEntity | |||||
| /** 培训人员签到信息 */ | /** 培训人员签到信息 */ | ||||
| private List<RwkMeetingStaff> rwkMeetingStaffList; | private List<RwkMeetingStaff> rwkMeetingStaffList; | ||||
| /** 培训相关附件 */ | |||||
| private List<RwkMeetingFile> rwkMeetingFileList; | |||||
| private String startDate; | private String startDate; | ||||
| private String endDate; | private String endDate; | ||||
| /** 培训人员已签到人数及全部应签到人数*/ | |||||
| private String signCount; | |||||
| public void setId(Long id) | public void setId(Long id) | ||||
| { | { | ||||
| this.id = id; | this.id = id; | ||||
| @@ -118,6 +124,22 @@ public class RwkMeeting extends BaseEntity | |||||
| this.endDate = endDate; | 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 | @Override | ||||
| public String toString() { | public String toString() { | ||||
| return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | ||||
| @@ -129,6 +151,7 @@ public class RwkMeeting extends BaseEntity | |||||
| .append("createTime", getCreateTime()) | .append("createTime", getCreateTime()) | ||||
| .append("createBy", getCreateBy()) | .append("createBy", getCreateBy()) | ||||
| .append("rwkMeetingStaffList", getRwkMeetingStaffList()) | .append("rwkMeetingStaffList", getRwkMeetingStaffList()) | ||||
| .append("rwkMeetingFileList", getRwkMeetingFileList()) | |||||
| .append("startDate", getStartDate()) | .append("startDate", getStartDate()) | ||||
| .append("endDate", getEndDate()) | .append("endDate", getEndDate()) | ||||
| .toString(); | .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 java.util.List; | ||||
| import com.rwk.system.domain.RwkMeeting; | import com.rwk.system.domain.RwkMeeting; | ||||
| import com.rwk.system.domain.RwkMeetingFile; | |||||
| import com.rwk.system.domain.RwkMeetingStaff; | import com.rwk.system.domain.RwkMeetingStaff; | ||||
| /** | /** | ||||
| @@ -67,6 +68,14 @@ public interface RwkMeetingMapper | |||||
| * @return 结果 | * @return 结果 | ||||
| */ | */ | ||||
| public int deleteRwkMeetingStaffByMeetingIds(String[] ids); | public int deleteRwkMeetingStaffByMeetingIds(String[] ids); | ||||
| /** | |||||
| * 批量删除培训附件 | |||||
| * | |||||
| * @param ids 需要删除的数据主键集合 | |||||
| * @return 结果 | |||||
| */ | |||||
| int deleteRwkMeetingFileByMeetingIds(String[] ids); | |||||
| /** | /** | ||||
| * 批量新增培训人员签到 | * 批量新增培训人员签到 | ||||
| @@ -75,6 +84,14 @@ public interface RwkMeetingMapper | |||||
| * @return 结果 | * @return 结果 | ||||
| */ | */ | ||||
| public int batchRwkMeetingStaff(List<RwkMeetingStaff> rwkMeetingStaffList); | public int batchRwkMeetingStaff(List<RwkMeetingStaff> rwkMeetingStaffList); | ||||
| /** | |||||
| * 批量新增培训附件 | |||||
| * | |||||
| * @param rwkMeetingFileList 培训附件列表 | |||||
| * @return 结果 | |||||
| */ | |||||
| public int batchRwkMeetingFile(List<RwkMeetingFile> rwkMeetingFileList); | |||||
| /** | /** | ||||
| @@ -84,4 +101,12 @@ public interface RwkMeetingMapper | |||||
| * @return 结果 | * @return 结果 | ||||
| */ | */ | ||||
| public int deleteRwkMeetingStaffByMeetingId(Long id); | 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; | package com.rwk.system.service.impl; | ||||
| import java.util.List; | import java.util.List; | ||||
| import com.rwk.system.domain.RwkMeetingFile; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| @@ -60,6 +62,7 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||||
| { | { | ||||
| int rows = rwkMeetingMapper.insertRwkMeeting(rwkMeeting); | int rows = rwkMeetingMapper.insertRwkMeeting(rwkMeeting); | ||||
| insertRwkMeetingStaff(rwkMeeting); | insertRwkMeetingStaff(rwkMeeting); | ||||
| insertRwkMeetingFile(rwkMeeting); | |||||
| return rows; | return rows; | ||||
| } | } | ||||
| @@ -74,7 +77,9 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||||
| public int updateRwkMeeting(RwkMeeting rwkMeeting) | public int updateRwkMeeting(RwkMeeting rwkMeeting) | ||||
| { | { | ||||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(rwkMeeting.getId()); | rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(rwkMeeting.getId()); | ||||
| rwkMeetingMapper.deleteRwkMeetingFileByMeetingId(rwkMeeting.getId()); | |||||
| insertRwkMeetingStaff(rwkMeeting); | insertRwkMeetingStaff(rwkMeeting); | ||||
| insertRwkMeetingFile(rwkMeeting); | |||||
| return rwkMeetingMapper.updateRwkMeeting(rwkMeeting); | return rwkMeetingMapper.updateRwkMeeting(rwkMeeting); | ||||
| } | } | ||||
| @@ -89,6 +94,7 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||||
| public int deleteRwkMeetingByIds(String ids) | public int deleteRwkMeetingByIds(String ids) | ||||
| { | { | ||||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingIds(Convert.toStrArray(ids)); | rwkMeetingMapper.deleteRwkMeetingStaffByMeetingIds(Convert.toStrArray(ids)); | ||||
| rwkMeetingMapper.deleteRwkMeetingFileByMeetingIds(Convert.toStrArray(ids)); | |||||
| return rwkMeetingMapper.deleteRwkMeetingByIds(Convert.toStrArray(ids)); | return rwkMeetingMapper.deleteRwkMeetingByIds(Convert.toStrArray(ids)); | ||||
| } | } | ||||
| @@ -103,6 +109,7 @@ public class RwkMeetingServiceImpl implements IRwkMeetingService | |||||
| public int deleteRwkMeetingById(Long id) | public int deleteRwkMeetingById(Long id) | ||||
| { | { | ||||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(id); | rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(id); | ||||
| rwkMeetingMapper.deleteRwkMeetingFileByMeetingId(id); | |||||
| return rwkMeetingMapper.deleteRwkMeetingById(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="createTime" column="create_time" /> | ||||
| <result property="createBy" column="create_by" /> | <result property="createBy" column="create_by" /> | ||||
| <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList"/> | <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList"/> | ||||
| <collection property="rwkMeetingFileList" ofType="RwkMeetingFile" column="id" select="selectRwkMeetingFileList"/> | |||||
| </resultMap> | </resultMap> | ||||
| <resultMap id="RwkMeetingRwkMeetingStaffResult" type="RwkMeeting" extends="RwkMeetingResult"> | <resultMap id="RwkMeetingRwkMeetingStaffResult" type="RwkMeeting" extends="RwkMeetingResult"> | ||||
| <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList" /> | <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList" /> | ||||
| <collection property="rwkMeetingFileList" ofType="RwkMeetingFile" column="id" select="selectRwkMeetingFileList" /> | |||||
| </resultMap> | </resultMap> | ||||
| <!-- <resultMap id="RwkMeetingRwkMeetingFileResult" type="RwkMeeting" extends="RwkMeetingResult">--> | |||||
| <!-- --> | |||||
| <!-- </resultMap>--> | |||||
| <resultMap type="RwkMeetingStaff" id="RwkMeetingStaffResult"> | <resultMap type="RwkMeetingStaff" id="RwkMeetingStaffResult"> | ||||
| <result property="id" column="id" /> | <result property="id" column="id" /> | ||||
| <result property="meetingId" column="meeting_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" /> | <result property="mobilePhone" column="mobile_phone" /> | ||||
| </resultMap> | </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"> | <sql id="selectRwkMeetingVo"> | ||||
| select id, meeting_name, meeting_content, meeting_date, meeting_by_company, create_time, create_by from rwk_meeting | select id, meeting_name, meeting_content, meeting_date, meeting_by_company, create_time, create_by from rwk_meeting | ||||
| </sql> | </sql> | ||||
| @@ -56,6 +70,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| where meeting_id = #{meeting_id} | where meeting_id = #{meeting_id} | ||||
| </select> | </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 id="insertRwkMeeting" parameterType="RwkMeeting" keyProperty="id"> | ||||
| insert into rwk_meeting | insert into rwk_meeting | ||||
| <trim prefix="(" suffix=")" suffixOverrides=","> | <trim prefix="(" suffix=")" suffixOverrides=","> | ||||
| @@ -108,11 +128,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| #{meetingId} | #{meetingId} | ||||
| </foreach> | </foreach> | ||||
| </delete> | </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 id="deleteRwkMeetingStaffByMeetingId" parameterType="Long"> | ||||
| delete from rwk_meeting_staff where meeting_id = #{meetingId} | delete from rwk_meeting_staff where meeting_id = #{meetingId} | ||||
| </delete> | </delete> | ||||
| <delete id="deleteRwkMeetingFileByMeetingId" parameterType="Long"> | |||||
| delete from rwk_meeting_file where meeting_id = #{meetingId} | |||||
| </delete> | |||||
| <insert id="batchRwkMeetingStaff"> | <insert id="batchRwkMeetingStaff"> | ||||
| insert into rwk_meeting_staff( meeting_id, personnel_name, is_sign, personnel_id, mobile_phone) values | insert into rwk_meeting_staff( meeting_id, personnel_name, is_sign, personnel_id, mobile_phone) values | ||||
| <foreach item="item" index="index" collection="list" separator=","> | <foreach item="item" index="index" collection="list" separator=","> | ||||
| @@ -120,4 +150,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||||
| </foreach> | </foreach> | ||||
| </insert> | </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> | </mapper> | ||||