Browse Source

教育培训模块完善,人员信息部分css修改

master
qzy 11 months ago
parent
commit
daa6ccd845
19 changed files with 1034 additions and 70 deletions
  1. +21
    -0
      rwk-admin/src/main/java/com/rwk/web/controller/ability/RwkMeetingController.java
  2. +127
    -0
      rwk-admin/src/main/java/com/rwk/web/controller/ability/RwkMeetingFileController.java
  3. +1
    -1
      rwk-admin/src/main/java/com/rwk/web/controller/common/CommonController.java
  4. +6
    -0
      rwk-admin/src/main/resources/static/ruoyi/css/meeting.css
  5. +40
    -1
      rwk-admin/src/main/resources/templates/system/information/informationView.html
  6. +92
    -21
      rwk-admin/src/main/resources/templates/system/meeting/add.html
  7. +98
    -0
      rwk-admin/src/main/resources/templates/system/meeting/addMeetingFile.html
  8. +93
    -22
      rwk-admin/src/main/resources/templates/system/meeting/edit.html
  9. +21
    -11
      rwk-admin/src/main/resources/templates/system/meeting/meeting.html
  10. +39
    -14
      rwk-admin/src/main/resources/templates/system/meeting/meetingView.html
  11. +23
    -0
      rwk-system/src/main/java/com/rwk/system/domain/RwkMeeting.java
  12. +97
    -0
      rwk-system/src/main/java/com/rwk/system/domain/RwkMeetingFile.java
  13. +64
    -0
      rwk-system/src/main/java/com/rwk/system/mapper/RwkMeetingFileMapper.java
  14. +25
    -0
      rwk-system/src/main/java/com/rwk/system/mapper/RwkMeetingMapper.java
  15. +61
    -0
      rwk-system/src/main/java/com/rwk/system/service/IRwkMeetingFileService.java
  16. +94
    -0
      rwk-system/src/main/java/com/rwk/system/service/impl/RwkMeetingFileServiceImpl.java
  17. +21
    -0
      rwk-system/src/main/java/com/rwk/system/service/impl/RwkMeetingServiceImpl.java
  18. +74
    -0
      rwk-system/src/main/resources/mapper/system/RwkMeetingFileMapper.xml
  19. +37
    -0
      rwk-system/src/main/resources/mapper/system/RwkMeetingMapper.xml

+ 21
- 0
rwk-admin/src/main/java/com/rwk/web/controller/ability/RwkMeetingController.java View File

@@ -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";
}

/**
* 新增教育培训
*/


+ 127
- 0
rwk-admin/src/main/java/com/rwk/web/controller/ability/RwkMeetingFileController.java View File

@@ -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));
}
}

+ 1
- 1
rwk-admin/src/main/java/com/rwk/web/controller/common/CommonController.java View File

@@ -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);


+ 6
- 0
rwk-admin/src/main/resources/static/ruoyi/css/meeting.css View File

@@ -53,4 +53,10 @@
}
.signFail{
color: #a94442;
}
.table-container {
height: 200px; /* 设置固定高度 */
overflow-y: auto; /* 启用垂直滚动条 */
border: 1px solid #ccc; /* 可选:添加边框以便于查看 */
margin-bottom: 20px; /* 可选:添加底部间距 */
}

+ 40
- 1
rwk-admin/src/main/resources/templates/system/information/informationView.html View File

@@ -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>

+ 92
- 21
rwk-admin/src/main/resources/templates/system/meeting/add.html View File

@@ -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>

+ 98
- 0
rwk-admin/src/main/resources/templates/system/meeting/addMeetingFile.html View File

@@ -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>

+ 93
- 22
rwk-admin/src/main/resources/templates/system/meeting/edit.html View File

@@ -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>

+ 21
- 11
rwk-admin/src/main/resources/templates/system/meeting/meeting.html View File

@@ -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',


+ 39
- 14
rwk-admin/src/main/resources/templates/system/meeting/meetingView.html View File

@@ -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>

+ 23
- 0
rwk-system/src/main/java/com/rwk/system/domain/RwkMeeting.java View File

@@ -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();


+ 97
- 0
rwk-system/src/main/java/com/rwk/system/domain/RwkMeetingFile.java View File

@@ -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();
}
}

+ 64
- 0
rwk-system/src/main/java/com/rwk/system/mapper/RwkMeetingFileMapper.java View File

@@ -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);


}

+ 25
- 0
rwk-system/src/main/java/com/rwk/system/mapper/RwkMeetingMapper.java View File

@@ -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);
}

+ 61
- 0
rwk-system/src/main/java/com/rwk/system/service/IRwkMeetingFileService.java View File

@@ -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);
}

+ 94
- 0
rwk-system/src/main/java/com/rwk/system/service/impl/RwkMeetingFileServiceImpl.java View File

@@ -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);
}
}

+ 21
- 0
rwk-system/src/main/java/com/rwk/system/service/impl/RwkMeetingServiceImpl.java View File

@@ -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);
}
}
}
}

+ 74
- 0
rwk-system/src/main/resources/mapper/system/RwkMeetingFileMapper.xml View File

@@ -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>

+ 37
- 0
rwk-system/src/main/resources/mapper/system/RwkMeetingMapper.xml View File

@@ -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>

Loading…
Cancel
Save