| @@ -1,63 +1,155 @@ | |||
| package com.rwk.web.controller.ability; | |||
| import com.rwk.common.core.controller.BaseController; | |||
| import com.rwk.common.core.page.TableDataInfo; | |||
| import java.util.List; | |||
| import com.rwk.common.utils.DateUtils; | |||
| import com.rwk.system.domain.RwkStaffInformation; | |||
| import com.rwk.system.service.IRwkStaffInformationService; | |||
| 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.*; | |||
| import java.util.List; | |||
| 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.RwkMeeting; | |||
| import com.rwk.system.service.IRwkMeetingService; | |||
| 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-05 | |||
| */ | |||
| @Controller | |||
| @RequestMapping("/system/meeting") | |||
| public class RwkMeetingController extends BaseController { | |||
| public class RwkMeetingController extends BaseController | |||
| { | |||
| private String prefix = "system/meeting"; | |||
| @Autowired | |||
| private IRwkMeetingService rwkMeetingService; | |||
| @Autowired | |||
| private IRwkStaffInformationService rwkStaffInformationService; | |||
| @RequiresPermissions("system:meeting:view") | |||
| @GetMapping() | |||
| public String information() | |||
| public String meeting() | |||
| { | |||
| return prefix + "/meeting"; | |||
| } | |||
| /** | |||
| * 查询人员信息列表 | |||
| * 查询教育培训列表 | |||
| */ | |||
| @RequiresPermissions("system:meeting:list") | |||
| @PostMapping("/list") | |||
| @ResponseBody | |||
| public TableDataInfo list(RwkStaffInformation rwkStaffInformation) | |||
| public TableDataInfo list(RwkMeeting rwkMeeting) | |||
| { | |||
| startPage(); | |||
| List<RwkStaffInformation> list = rwkStaffInformationService.selectRwkStaffInformationList(rwkStaffInformation); | |||
| List<RwkMeeting> list = rwkMeetingService.selectRwkMeetingList(rwkMeeting); | |||
| return getDataTable(list); | |||
| } | |||
| /** | |||
| * 修改人员信息 | |||
| * 查看培训活动详情 | |||
| */ | |||
| @GetMapping("/meetingView/{id}") | |||
| public String receiveView(@PathVariable("id") Long id, ModelMap mmap) | |||
| { | |||
| RwkMeeting rwkMeeting = rwkMeetingService.selectRwkMeetingById(id); | |||
| mmap.put("rwkMeeting", rwkMeeting); | |||
| return prefix + "/meetingView"; | |||
| } | |||
| /** | |||
| * 新增教育培训 | |||
| */ | |||
| @GetMapping("/add") | |||
| public String add(ModelMap mmap) | |||
| { | |||
| getJoinPeople(mmap); | |||
| return prefix + "/add"; | |||
| } | |||
| /** | |||
| * 新增保存教育培训 | |||
| */ | |||
| @RequiresPermissions("system:meeting:add") | |||
| @Log(title = "教育培训", businessType = BusinessType.INSERT) | |||
| @PostMapping("/add") | |||
| @ResponseBody | |||
| public AjaxResult addSave(RwkMeeting rwkMeeting) | |||
| { | |||
| rwkMeeting.setCreateTime(DateUtils.getNowDate()); | |||
| rwkMeeting.setCreateBy(getSysUser().getLoginName()); | |||
| return toAjax(rwkMeetingService.insertRwkMeeting(rwkMeeting)); | |||
| } | |||
| /** | |||
| * 修改教育培训 | |||
| */ | |||
| @RequiresPermissions("system:meeting:edit") | |||
| @GetMapping("/edit/{id}") | |||
| public String edit(@PathVariable("id") Long id, ModelMap mmap) | |||
| { | |||
| RwkMeeting rwkMeeting = rwkMeetingService.selectRwkMeetingById(id); | |||
| mmap.put("rwkMeeting", rwkMeeting); | |||
| getJoinPeople(mmap); | |||
| return prefix + "/edit"; | |||
| } | |||
| /** | |||
| * 修改人员信息 | |||
| * 修改保存教育培训 | |||
| */ | |||
| @RequiresPermissions("system:meeting:add") | |||
| @GetMapping("/add") | |||
| public String add() | |||
| @RequiresPermissions("system:meeting:edit") | |||
| @Log(title = "教育培训", businessType = BusinessType.UPDATE) | |||
| @PostMapping("/edit") | |||
| @ResponseBody | |||
| public AjaxResult editSave(RwkMeeting rwkMeeting) | |||
| { | |||
| return prefix + "/add"; | |||
| return toAjax(rwkMeetingService.updateRwkMeeting(rwkMeeting)); | |||
| } | |||
| /** | |||
| * 删除教育培训 | |||
| */ | |||
| @RequiresPermissions("system:meeting:remove") | |||
| @Log(title = "教育培训", businessType = BusinessType.DELETE) | |||
| @PostMapping( "/remove") | |||
| @ResponseBody | |||
| public AjaxResult remove(String ids) | |||
| { | |||
| return toAjax(rwkMeetingService.deleteRwkMeetingByIds(ids)); | |||
| } | |||
| /** | |||
| * 导出教育培训列表 | |||
| */ | |||
| @RequiresPermissions("system:meeting:export") | |||
| @Log(title = "教育培训", businessType = BusinessType.EXPORT) | |||
| @PostMapping("/export") | |||
| @ResponseBody | |||
| public AjaxResult export(RwkMeeting rwkMeeting) | |||
| { | |||
| List<RwkMeeting> list = rwkMeetingService.selectRwkMeetingList(rwkMeeting); | |||
| ExcelUtil<RwkMeeting> util = new ExcelUtil<RwkMeeting>(RwkMeeting.class); | |||
| return util.exportExcel(list, "教育培训数据"); | |||
| } | |||
| //获取参与人员方法 | |||
| private void getJoinPeople(ModelMap mmap){ | |||
| //获取参与人员 | |||
| List<RwkStaffInformation> list = rwkStaffInformationService.selectRwkStaffInformationList(new RwkStaffInformation()); | |||
| mmap.put("userList", list); | |||
| } | |||
| } | |||
| @@ -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.RwkMeetingStaff; | |||
| import com.rwk.system.service.IRwkMeetingStaffService; | |||
| 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-05 | |||
| */ | |||
| @Controller | |||
| @RequestMapping("/system/trainStaff") | |||
| public class RwkMeetingStaffController extends BaseController | |||
| { | |||
| private String prefix = "system/trainStaff"; | |||
| @Autowired | |||
| private IRwkMeetingStaffService rwkMeetingStaffService; | |||
| @RequiresPermissions("system:trainStaff:view") | |||
| @GetMapping() | |||
| public String trainStaff() | |||
| { | |||
| return prefix + "/trainStaff"; | |||
| } | |||
| /** | |||
| * 查询培训人员签到列表 | |||
| */ | |||
| @RequiresPermissions("system:trainStaff:list") | |||
| @PostMapping("/list") | |||
| @ResponseBody | |||
| public TableDataInfo list(RwkMeetingStaff rwkMeetingStaff) | |||
| { | |||
| startPage(); | |||
| List<RwkMeetingStaff> list = rwkMeetingStaffService.selectRwkMeetingStaffList(rwkMeetingStaff); | |||
| return getDataTable(list); | |||
| } | |||
| /** | |||
| * 导出培训人员签到列表 | |||
| */ | |||
| @RequiresPermissions("system:trainStaff:export") | |||
| @Log(title = "培训人员签到", businessType = BusinessType.EXPORT) | |||
| @PostMapping("/export") | |||
| @ResponseBody | |||
| public AjaxResult export(RwkMeetingStaff rwkMeetingStaff) | |||
| { | |||
| List<RwkMeetingStaff> list = rwkMeetingStaffService.selectRwkMeetingStaffList(rwkMeetingStaff); | |||
| ExcelUtil<RwkMeetingStaff> util = new ExcelUtil<RwkMeetingStaff>(RwkMeetingStaff.class); | |||
| return util.exportExcel(list, "培训人员签到数据"); | |||
| } | |||
| /** | |||
| * 新增培训人员签到 | |||
| */ | |||
| @GetMapping("/add") | |||
| public String add() | |||
| { | |||
| return prefix + "/add"; | |||
| } | |||
| /** | |||
| * 新增保存培训人员签到 | |||
| */ | |||
| @RequiresPermissions("system:trainStaff:add") | |||
| @Log(title = "培训人员签到", businessType = BusinessType.INSERT) | |||
| @PostMapping("/add") | |||
| @ResponseBody | |||
| public AjaxResult addSave(RwkMeetingStaff rwkMeetingStaff) | |||
| { | |||
| return toAjax(rwkMeetingStaffService.insertRwkMeetingStaff(rwkMeetingStaff)); | |||
| } | |||
| /** | |||
| * 修改培训人员签到 | |||
| */ | |||
| @RequiresPermissions("system:trainStaff:edit") | |||
| @GetMapping("/edit/{id}") | |||
| public String edit(@PathVariable("id") Long id, ModelMap mmap) | |||
| { | |||
| RwkMeetingStaff rwkMeetingStaff = rwkMeetingStaffService.selectRwkMeetingStaffById(id); | |||
| mmap.put("rwkMeetingStaff", rwkMeetingStaff); | |||
| return prefix + "/edit"; | |||
| } | |||
| /** | |||
| * 修改保存培训人员签到 | |||
| */ | |||
| @RequiresPermissions("system:trainStaff:edit") | |||
| @Log(title = "培训人员签到", businessType = BusinessType.UPDATE) | |||
| @PostMapping("/edit") | |||
| @ResponseBody | |||
| public AjaxResult editSave(RwkMeetingStaff rwkMeetingStaff) | |||
| { | |||
| return toAjax(rwkMeetingStaffService.updateRwkMeetingStaff(rwkMeetingStaff)); | |||
| } | |||
| /** | |||
| * 删除培训人员签到 | |||
| */ | |||
| @RequiresPermissions("system:trainStaff:remove") | |||
| @Log(title = "培训人员签到", businessType = BusinessType.DELETE) | |||
| @PostMapping( "/remove") | |||
| @ResponseBody | |||
| public AjaxResult remove(String ids) | |||
| { | |||
| return toAjax(rwkMeetingStaffService.deleteRwkMeetingStaffByIds(ids)); | |||
| } | |||
| } | |||
| @@ -4,7 +4,10 @@ import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import com.rwk.common.utils.DateUtils; | |||
| import com.rwk.system.service.IRwkFamilyMemberService; | |||
| import com.rwk.system.domain.RwkMeeting; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| import com.rwk.system.service.IRwkMeetingService; | |||
| import com.rwk.system.service.IRwkMeetingStaffService; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Controller; | |||
| @@ -38,8 +41,13 @@ public class RwkStaffInformationController extends BaseController | |||
| @Autowired | |||
| private IRwkStaffInformationService rwkStaffInformationService; | |||
| //人员培训记录表 | |||
| @Autowired | |||
| private IRwkFamilyMemberService rwkFamilyMemberService; | |||
| private IRwkMeetingStaffService rwkMeetingStaffService; | |||
| //会议内容表 | |||
| @Autowired | |||
| private IRwkMeetingService rwkMeetingService; | |||
| @RequiresPermissions("system:information:view") | |||
| @GetMapping() | |||
| @@ -57,7 +65,7 @@ public class RwkStaffInformationController extends BaseController | |||
| /** | |||
| * 查看收文 | |||
| */ | |||
| @GetMapping("informationView/{id}") | |||
| @GetMapping("/informationView/{id}") | |||
| public String receiveView(@PathVariable("id") Long id, ModelMap mmap) | |||
| { | |||
| RwkStaffInformation rwkStaffInformation = rwkStaffInformationService.selectRwkStaffInformationById(id); | |||
| @@ -68,6 +76,8 @@ public class RwkStaffInformationController extends BaseController | |||
| mmap.put("resumeLines",resumeLines); | |||
| mmap.put("trainingLines",trainingLines); | |||
| mmap.put("achievementLines",achievementLines); | |||
| //获取当前人员的培训记录消息 | |||
| getTrainingRecord(rwkStaffInformation,mmap); | |||
| return prefix + "/informationView"; | |||
| } | |||
| @@ -184,6 +194,7 @@ public class RwkStaffInformationController extends BaseController | |||
| return success(mmap); | |||
| } | |||
| //对数据换行符进行处理 | |||
| private List<List<String>> splitConversion(String string){ | |||
| List<List<String>> result = new ArrayList<>(); | |||
| String[] lines = string.split("\r\n"); | |||
| @@ -192,7 +203,9 @@ public class RwkStaffInformationController extends BaseController | |||
| String[] parts = line.trim().split("\\s+"); | |||
| List<String> lineParts = new ArrayList<>(); | |||
| for (String part : parts) { | |||
| lineParts.add(part.trim()); | |||
| if (!part.trim().isEmpty()) { | |||
| lineParts.add(part.trim()); | |||
| } | |||
| } | |||
| if (!lineParts.isEmpty()) { | |||
| result.add(lineParts); | |||
| @@ -200,4 +213,18 @@ public class RwkStaffInformationController extends BaseController | |||
| } | |||
| return result; | |||
| } | |||
| //获取当前人员的培训记录 | |||
| private void getTrainingRecord(RwkStaffInformation rwkStaffInformation,ModelMap mmap) { | |||
| RwkMeetingStaff rwkMeetingStaff = new RwkMeetingStaff(); | |||
| rwkMeetingStaff.setPersonnelId(rwkStaffInformation.getId().toString()); | |||
| rwkMeetingStaff.setIsSign(1L); | |||
| List<RwkMeeting> rwkMeetingList = new ArrayList<>(); | |||
| List<RwkMeetingStaff> rwkMeetingStaffList = rwkMeetingStaffService.selectRwkMeetingStaffList(rwkMeetingStaff); | |||
| for (RwkMeetingStaff rwkMeetingStaff1 : rwkMeetingStaffList) { | |||
| RwkMeeting rwkMeeting = rwkMeetingService.selectRwkMeetingById(rwkMeetingStaff1.getMeetingId()); | |||
| rwkMeetingList.add(rwkMeeting); | |||
| } | |||
| mmap.put("rwkMeetingList", rwkMeetingList); | |||
| } | |||
| } | |||
| @@ -56,11 +56,11 @@ var table = { | |||
| firstLoad: true, | |||
| showFooter: false, | |||
| search: false, | |||
| showSearch: true, | |||
| showSearch: false, | |||
| showPageGo: false, | |||
| showRefresh: true, | |||
| showColumns: true, | |||
| showToggle: true, | |||
| showRefresh: false, | |||
| showColumns: false, | |||
| showToggle: false, | |||
| showExport: false, | |||
| showPrint: false, | |||
| exportDataType: 'all', | |||
| @@ -54,7 +54,7 @@ | |||
| <div class="wddbrw_head" style="margin-top: 10px"> | |||
| <h1>近期培训活动</h1> | |||
| </div> | |||
| <div class="box" style="height: calc(82% - 50px);display: flex;margin: 0px 10px;"> | |||
| <div class="box" style="height: calc(82% - 76px);display: flex;margin: 0px 10px;"> | |||
| <div style="width:98%;display: flex;height: 100%"> | |||
| <table style="width: 100%;font-size: 18px"> | |||
| <tr style="width: 100%"> | |||
| @@ -96,13 +96,13 @@ | |||
| <div class="wddbrw_head"> | |||
| <h1>学历、学位情况</h1> | |||
| </div> | |||
| <div class="box" style="height: calc(100% - 20px);"> | |||
| <div class="box" style="height: calc(100% - 60px);"> | |||
| <div style="display: flex;justify-content: center;"> | |||
| <div class="cut active" style="">全日制教育</div> | |||
| <div class="cut">在职教育</div> | |||
| </div> | |||
| <div id="barChart2" style="width: 100%; height: calc(50% - 10px);"></div> | |||
| <div id="pieChart3" style="width: 100%; height: calc(50% - 10px);"></div> | |||
| <div id="barChart2" style="width: 100%; height: calc(50% - 16px);"></div> | |||
| <div id="pieChart3" style="width: 100%; height: calc(50% - 16px);"></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -156,12 +156,6 @@ | |||
| {name:'数据3',value:310}, | |||
| {name:'数据4',value:335} | |||
| ]; | |||
| $(".cut").click(function () { | |||
| $('.cut').removeClass('active'); | |||
| $(this).addClass('active'); | |||
| }); | |||
| var grid = {left: '10%', right: '6%', bottom: '3%', top:'6%'} | |||
| //饼图1 | |||
| pieChartMethod('pieChart1',array1,"职务层次情况",'60%',"",grid,"",true); | |||
| @@ -156,11 +156,6 @@ | |||
| height: 200, | |||
| pagination:false, | |||
| sidePagination: "client", | |||
| showFooter: false, | |||
| showSearch: false, | |||
| showRefresh: false, | |||
| showToggle: false, | |||
| showColumns: false, | |||
| virtualScroll: true, | |||
| data:[ | |||
| {id:1,name:"姓名1",phone:"18756365787",email:"18756365787@163.c0m",subset:1}, | |||
| @@ -252,7 +252,7 @@ | |||
| <div class="marks"></div><h3>简历</h3><span class="line"></span> | |||
| </div> | |||
| <div class="informationText"> | |||
| <div th:each="line1, iterStat1 : ${resumeLines}" | |||
| <div th:if="${#lists.size(resumeLines) > 0}" th:each="line1, iterStat1 : ${resumeLines}" | |||
| th:class="${iterStat1.even} ? 'multiLine-item bg-color-1' : 'multiLine-item bg-color-2'"> | |||
| <div th:each="line2,iterStat2:${line1}" | |||
| th:class="${iterStat2.even} ? 'right-content' : 'left-content'" th:text="${line2}"></div> | |||
| @@ -264,10 +264,15 @@ | |||
| <div class="marks" style="width: 4px;"></div><h3>培训情况</h3><span class="line"></span> | |||
| </div> | |||
| <div class="informationText"> | |||
| <div th:each="line1 : ${trainingLines}" class="multiLine-item"> | |||
| <div th:if="${#lists.size(trainingLines) > 0}" th:each="line1 : ${trainingLines}" class="multiLine-item"> | |||
| <div th:each="line2,iterStat2:${line1}" | |||
| th:class="${iterStat2.even} ? 'right-content' : 'left-content'" th:text="${line2}"></div> | |||
| </div> | |||
| <div th:if="${#lists.size(rwkMeetingList) > 0}" th:each="rwkMeeting : ${rwkMeetingList}" style="padding: 10px;width: 100%;"> | |||
| <div style="font-size: 25px;" th:text="${rwkMeeting.meetingName}"></div> | |||
| <div style="width:100%;height:auto;white-space: pre-wrap;" th:text="${rwkMeeting.meetingContent}"></div> | |||
| <div>培训时间:<span th:text="${rwkMeeting.meetingDate}"></span></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="section" id="title3"> | |||
| @@ -275,7 +280,7 @@ | |||
| <div class="marks" style="width: 4px;"></div><h3>主要成就</h3><span class="line"></span> | |||
| </div> | |||
| <div class="informationText"> | |||
| <div th:each="line1 : ${achievementLines}" class="multiLine-item"> | |||
| <div th:if="${#lists.size(achievementLines) > 0}" th:each="line1 : ${achievementLines}" class="multiLine-item"> | |||
| <div th:each="line2,iterStat2:${line1}" | |||
| th:class="${iterStat2.even} ? 'right-content' : 'left-content'" th:text="${line2}"></div> | |||
| </div> | |||
| @@ -2,10 +2,9 @@ | |||
| <html lang="zh" xmlns:th="http://www.thymeleaf.org" > | |||
| <head> | |||
| <th:block th:include="include :: header('新增培训/活动信息')" /> | |||
| <link th:href="@{/ruoyi/css/meeting.css}" rel="stylesheet"/> | |||
| <link th:href="@{/css/use/css1.css}" rel="stylesheet"/> | |||
| <link th:href="@{/ruoyi/css/meeting.css}" rel="stylesheet"/> | |||
| <th:block th:include="include :: bootstrap-duallistbox-css" /> | |||
| <th:block th:include="include :: bootstrap-duallistbox-js" /> | |||
| </head> | |||
| <body class="white-bg"> | |||
| <div class="wrapper wrapper-content animated fadeInRight ibox-content"> | |||
| @@ -16,15 +15,14 @@ | |||
| </ul> | |||
| <form class="form-horizontal m" id="form-meeting-add"> | |||
| <div> | |||
| <input class="meeting-add-input meeting-add-header" placeholder="请填写培训活动标题"> | |||
| <input name="meetingName" class="meeting-add-input meeting-add-header" placeholder="请填写培训活动标题"> | |||
| </div> | |||
| <hr> | |||
| <div class="col-md-12"> | |||
| <div class="col-md-6"> | |||
| <div class="form-group"> | |||
| <div> | |||
| <textarea class=" meeting-add-content meeting-add-font" placeholder="请填写培训活动简介" ></textarea> | |||
| <textarea name="meetingContent" class="meeting-add-content meeting-add-font" placeholder="请填写培训活动简介" ></textarea> | |||
| </div> | |||
| </div> | |||
| <hr style="width: 102%;margin-left: -30px"> | |||
| @@ -33,7 +31,7 @@ | |||
| <label class="meeting-add-font">培训日期:</label> | |||
| </div> | |||
| <div class="div-display"> | |||
| <input type="text" class="time-input meeting-add-font" placeholder="请选择培训日期" name="date"/> | |||
| <input name="meetingDate" type="text" class="time-input meeting-add-font" placeholder="请选择培训日期"/> | |||
| </div> | |||
| </div> | |||
| <div class="form-group"> | |||
| @@ -52,12 +50,9 @@ | |||
| <div class="col-md-6" style="height: 524px"> | |||
| <div class="ibox" > | |||
| <div class="ibox-content"> | |||
| <form id="form-user-add" action="#" class="wizard-big"> | |||
| <select class="form-control dual_select" name="duallistbox_demo" multiple style="height: 350px;" > | |||
| <option th:each="ul,temp:${user}" th:value="${ul.loginName}" th:text="'('+${ul.dept.deptName}+') '+${ul.userName}"></option> | |||
| <!--<option th:each="ul,temp:${map}" th:value="${ul.value}" th:text="${ul.key}"></option>--> | |||
| </select> | |||
| </form> | |||
| <select class="form-control dual_select" id="duallistbox_demo" multiple style="height: 350px;" > | |||
| <option th:each="ul,temp:${userList}" th:data_phone="${ul.mobilePhone}" th:value="${ul.id}" th:text="${ul.name}"></option> | |||
| </select> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -70,15 +65,67 @@ | |||
| var prefix = ctx + "system/meeting"; | |||
| var editFlag = [[${@permission.hasPermi('system:meeting:edit')}]]; | |||
| var removeFlag = [[${@permission.hasPermi('system:meeting:remove')}]]; | |||
| // 左右互选控件 | |||
| $('.dual_select').bootstrapDualListbox({ | |||
| nonSelectedListLabel: '未邀请人员', | |||
| selectedListLabel: '已邀请人员', | |||
| preserveSelectionOnMove: 'moved', | |||
| moveOnSelect: false, // 出现一个剪头,表示可以一次选择一个 | |||
| filterTextClear: '搜索重置', | |||
| moveSelectedLabel: "添加", | |||
| moveAllLabel: '添加所有', | |||
| removeSelectedLabel: "移除", | |||
| removeAllLabel: '移除所有', | |||
| filterPlaceHolder:"模糊搜索", | |||
| infoTextEmpty : "无用户可选择", | |||
| infoTextFiltered:"搜索到 {0} 总共 {1}", | |||
| infoText: '共{0}个', | |||
| showFilterInputs: true,// 是否带搜索 | |||
| selectorMinimalHeight: 160 | |||
| }); | |||
| function submitHandler() { | |||
| if ($.validate.form()) { | |||
| var userList = getSelectedItems("duallistbox_demo"); | |||
| if (userList.length === 0) { | |||
| $.modal.alertWarning("请至少选择一条记录"); | |||
| return; | |||
| } | |||
| var array = $('#form-meeting-add').serializeArray(); | |||
| var obj = {}; | |||
| array.forEach(function(item) { | |||
| obj[item.name] = item.value; | |||
| }); | |||
| userList.forEach(function (item,index){ | |||
| for (var key in item){ | |||
| obj["rwkMeetingStaffList["+index+"]."+key] = item[key]; | |||
| } | |||
| }) | |||
| $.operate.save(prefix + "/add", $.param(obj)); | |||
| } | |||
| } | |||
| // 获取双重多选中的值 | |||
| function getSelectedItems(id) { | |||
| var selectedItems = []; | |||
| // 获取选中的选项 | |||
| $("#"+id+" option:selected").each(function() { | |||
| selectedItems.push({ | |||
| personnelName: $(this).text(), | |||
| isSign: 0, | |||
| personnelId: $(this).val(), | |||
| mobilePhone:$(this).attr("data_phone") | |||
| }); | |||
| }); | |||
| return selectedItems; | |||
| } | |||
| //附件表格加载 | |||
| $(function() { | |||
| var options = { | |||
| pagination:false, | |||
| sidePagination: "client", | |||
| showFooter: false, | |||
| showSearch: false, | |||
| showRefresh: false, | |||
| showToggle: false, | |||
| showColumns: false, | |||
| virtualScroll: true, | |||
| showHeader:false, | |||
| height:160, | |||
| @@ -111,86 +158,7 @@ | |||
| }] | |||
| }; | |||
| $.table.init(options); | |||
| // 左右互选控件 | |||
| var prefix = ctx + "flowable/copy"; | |||
| $('.dual_select').bootstrapDualListbox({ | |||
| nonSelectedListLabel: '未邀请人员', | |||
| selectedListLabel: '已邀请人员', | |||
| preserveSelectionOnMove: 'moved', | |||
| moveOnSelect: false, // 出现一个剪头,表示可以一次选择一个 | |||
| filterTextClear: '搜索重置', | |||
| moveSelectedLabel: "添加", | |||
| moveAllLabel: '添加所有', | |||
| removeSelectedLabel: "移除", | |||
| removeAllLabel: '移除所有', | |||
| filterPlaceHolder:"模糊搜索", | |||
| infoTextEmpty : "无用户可选择", | |||
| infoTextFiltered:"搜索到 {0} 总共 {1}", | |||
| infoText: '共{0}个', | |||
| showFilterInputs: true, // 是否带搜索 | |||
| selectorMinimalHeight: 160 | |||
| }); | |||
| function submitHandler() { | |||
| var title=$("#title").val(); | |||
| var lcid=$("#id").val(); | |||
| var namelc=$("#name").val(); | |||
| var key=$("#key").val(); | |||
| var mj=$("#mj").val(); | |||
| var roomIds = $("#bootstrap-duallistbox-selected-list_duallistbox_demo").map(function(){ | |||
| return $(this).val(); | |||
| }).get().join(","); | |||
| // var name = $.table.selectColumns('userName'); | |||
| // var id = $.table.selectColumns('userType') | |||
| if (roomIds.length == 0) { | |||
| $.modal.alertWarning("请至少选择一条记录"); | |||
| return; | |||
| } | |||
| var data = {"name": roomIds,"title":title,"lcid":lcid,"namelc":namelc,"key":key,"mj":mj}; | |||
| $.operate.save(prefix + "/add",data); | |||
| $.modal.close(); | |||
| page_Path(); | |||
| // parent.location.reload(); | |||
| $.operate.successCallback(result); | |||
| } | |||
| // function submitHandler(){ | |||
| // | |||
| // var roomIds = $("#bootstrap-duallistbox-selected-list_duallistbox_demo").map(function(){ | |||
| // return $(this).val(); | |||
| // }).get().join(","); | |||
| // alert("选中--"+roomIds); | |||
| // // $.ajax({ | |||
| // // | |||
| // // }) | |||
| // } | |||
| // 刷新页面 | |||
| function page_Path(){ | |||
| var obj = new Object(); | |||
| obj._type = ""; // 页面刷新 | |||
| obj._pagePath =""; // 需要刷新的路径 | |||
| obj.denote = "backlog"; // 用于区别同页面不同方法 | |||
| ws.send(JSON.stringify(obj)) | |||
| if (ws) { | |||
| ws.send(JSON.stringify(obj)); | |||
| } else { | |||
| alert("未连接到服务器"); | |||
| } | |||
| } | |||
| function checkItem(){ | |||
| // var arrays = $.table.selectColumns("userId"); | |||
| var arrays = $.table.selectColumns("userCode"); | |||
| alert(arrays); | |||
| } | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -1,153 +1,144 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh" xmlns:th="http://www.thymeleaf.org" > | |||
| <head> | |||
| <th:block th:include="include :: header('修改人员信息')" /> | |||
| <th:block th:include="include :: header('修改培训/活动信息')" /> | |||
| <link th:href="@{/css/use/css1.css}" rel="stylesheet"/> | |||
| <link th:href="@{/ruoyi/css/meeting.css}" rel="stylesheet"/> | |||
| <th:block th:include="include :: echarts-js" /> | |||
| <th:block th:include="include :: bootstrap-duallistbox-css" /> | |||
| </head> | |||
| <body class="white-bg"> | |||
| <div class="wrapper wrapper-content animated fadeInRight ibox-content meeting-content"> | |||
| <!-- <ul class="nav head_top" id="tab">--> | |||
| <!-- <div class="text-right hidden-print" style="float: right">--> | |||
| <!-- <button class="btn btn-unite" >打印签到表</button>--> | |||
| <!-- </div>--> | |||
| <!-- </ul>--> | |||
| <form class="form-horizontal m meeting-content" id="form-information-edit" th:object="${rwkStaffInformation}"> | |||
| <div> | |||
| <h1 style="font-size: 25px">培训活动标题示例</h1> | |||
| <div class="wrapper wrapper-content animated fadeInRight ibox-content"> | |||
| <ul class="nav head_top" id="tab"> | |||
| <div class="text-right hidden-print" style="float: right"> | |||
| <button class="btn btn-unite" onclick="submitHandler()">保存</button> | |||
| </div> | |||
| <hr> | |||
| <div class="meeting-introdution meeting-add-font"> | |||
| 培训活动简介示例培训活动简介示例培训活动简介示例<br> | |||
| 培训活动简介示例培训活动简介示例培训活动简介示例培训活动简介示例<br> | |||
| 培训活动简介示例培训活动简介示例 | |||
| <br>培训地点:*******楼****号***室 | |||
| <br>培训时间:2024年5月21日 | |||
| </ul> | |||
| <form class="form-horizontal m" id="form-meeting-edit" th:object="${rwkMeeting}"> | |||
| <input name="id" th:field="*{id}" type="hidden"> | |||
| <div> | |||
| <input name="meetingName" class="meeting-add-input meeting-add-header" th:field="*{meetingName}" placeholder="请填写培训活动标题"> | |||
| </div> | |||
| <hr> | |||
| <div class="inline-meeting-div meeting-edit-files"> | |||
| <table id="bootstrap-table-file"> | |||
| </table> | |||
| </div> | |||
| <div class="inline-meeting-div" style="float: left;width: 33%"> | |||
| <table id="bootstrap-table" ></table> | |||
| </div> | |||
| <div class="inline-meeting-div meeting-pieChart1" > | |||
| <div id="pieChart1" class="pieChart1"></div> | |||
| <div class="col-md-12"> | |||
| <div class="col-md-6"> | |||
| <div class="form-group"> | |||
| <div> | |||
| <textarea name="meetingContent" class="meeting-add-content meeting-add-font" placeholder="请填写培训活动简介">[[*{meetingContent}]]</textarea> | |||
| </div> | |||
| </div> | |||
| <hr style="width: 102%;margin-left: -30px"> | |||
| <div class="form-group"> | |||
| <div class="div-display"> | |||
| <label class="meeting-add-font">培训日期:</label> | |||
| </div> | |||
| <div class="div-display"> | |||
| <input name="meetingDate" type="text" class="time-input meeting-add-font" th:field="*{meetingDate}" placeholder="请选择培训日期"/> | |||
| </div> | |||
| </div> | |||
| <div class="form-group"> | |||
| <div class="div-display"> | |||
| <label class="meeting-add-font">相关附件:</label> | |||
| </div> | |||
| <div class="div-display"> | |||
| <button class="btn btn-unite meeting-add-font meeting-btn-add" onclick="">上 传</button> | |||
| </div> | |||
| </div> | |||
| <div class="form-group select-table table-striped meeting-add-files"> | |||
| <table id="bootstrap-table"> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| <div class="col-md-6" style="height: 524px"> | |||
| <div class="ibox" > | |||
| <div class="ibox-content"> | |||
| <select class="form-control dual_select" id="duallistbox_demo" multiple style="height: 350px;" > | |||
| <option th:each="ul,temp:${userList}" th:data_phone="${ul.mobilePhone}" th:value="${ul.id}" th:text="${ul.name}"></option> | |||
| </select> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <th:block th:include="include :: footer" /> | |||
| <th:block th:include="include :: bootstrap-duallistbox-js" /> | |||
| <script th:inline="javascript"> | |||
| $(document).ready(function() { | |||
| var pieChart = echarts.init(document.getElementById('pieChart1')); | |||
| var option = { | |||
| tooltip: { | |||
| trigger: 'item' | |||
| }, | |||
| legend: { | |||
| top: '1%', | |||
| left: 'center' | |||
| }, | |||
| series: [ | |||
| { | |||
| name: 'Access From', | |||
| type: 'pie', | |||
| radius: ['40%', '70%'], | |||
| avoidLabelOverlap: false, | |||
| label: { | |||
| show: false, | |||
| position: 'center' | |||
| }, | |||
| emphasis: { | |||
| label: { | |||
| show: true, | |||
| fontSize: 15, | |||
| fontWeight: 'bold' | |||
| } | |||
| }, | |||
| labelLine: { | |||
| show: false | |||
| }, | |||
| data: [ | |||
| { value: 60, name: '签到人数' }, | |||
| { value: 20, name: '未签到人数' } | |||
| ] | |||
| } | |||
| ] | |||
| }; | |||
| pieChart.setOption(option); | |||
| var prefix = ctx + "system/meeting"; | |||
| var editFlag = [[${@permission.hasPermi('system:meeting:edit')}]]; | |||
| var removeFlag = [[${@permission.hasPermi('system:meeting:remove')}]]; | |||
| var rwkMeetingStaffList = [[${rwkMeeting.rwkMeetingStaffList}]] | |||
| // 左右互选控件 | |||
| $('.dual_select').bootstrapDualListbox({ | |||
| nonSelectedListLabel: '未邀请人员', | |||
| selectedListLabel: '已邀请人员', | |||
| preserveSelectionOnMove: 'moved', | |||
| moveOnSelect: false, // 出现一个剪头,表示可以一次选择一个 | |||
| filterTextClear: '搜索重置', | |||
| moveSelectedLabel: "添加", | |||
| moveAllLabel: '添加所有', | |||
| removeSelectedLabel: "移除", | |||
| removeAllLabel: '移除所有', | |||
| filterPlaceHolder:"模糊搜索", | |||
| infoTextEmpty : "无用户可选择", | |||
| infoTextFiltered:"搜索到 {0} 总共 {1}", | |||
| infoText: '共{0}个', | |||
| showFilterInputs: true,// 是否带搜索 | |||
| selectorMinimalHeight: 160 | |||
| }); | |||
| //回显左右选择控件的值 | |||
| var selectedData = rwkMeetingStaffList.map(entity => entity.personnelId); | |||
| $('#duallistbox_demo').val(selectedData).bootstrapDualListbox('refresh'); | |||
| $(function() { | |||
| const options = { | |||
| height: 325, | |||
| pagination:false, | |||
| sidePagination: "client", | |||
| showFooter: false, | |||
| showSearch: false, | |||
| showRefresh: false, | |||
| showToggle: false, | |||
| showColumns: false, | |||
| virtualScroll: true, | |||
| data:[ | |||
| {id:1,name:"姓名1",qiandao:"未签到",mobilePhone:19878327621}, | |||
| {id:2,name:"姓名2",qiandao:"已签到",mobilePhone:11987832762}, | |||
| {id:2,name:"姓名2",qiandao:"已签到",mobilePhone:11987832762}, | |||
| {id:2,name:"姓名2",qiandao:"已签到",mobilePhone:11987832762}, | |||
| {id:2,name:"姓名2",qiandao:"已签到",mobilePhone:11987832762}, | |||
| {id:2,name:"姓名2",qiandao:"已签到",mobilePhone:11987832762}, | |||
| {id:2,name:"姓名2",qiandao:"已签到",mobilePhone:11987832762}, | |||
| {id:2,name:"姓名2",qiandao:"已签到",mobilePhone:11987832762} | |||
| ], | |||
| columns: [ | |||
| { | |||
| field: 'id', | |||
| title: '主键id', | |||
| visible: false | |||
| }, | |||
| { | |||
| field: 'name', | |||
| title: '姓名' | |||
| }, | |||
| { | |||
| field: 'qiandao', | |||
| title: '签到情况', | |||
| formatter: function (value, row, index) { | |||
| return qdstatusTools(row); | |||
| } | |||
| }, | |||
| { | |||
| field: 'mobilePhone', | |||
| title: '手机号' | |||
| }] | |||
| }; | |||
| $.table.init(options); | |||
| function submitHandler() { | |||
| if ($.validate.form()) { | |||
| var userList = getSelectedItems("duallistbox_demo"); | |||
| if (userList.length === 0) { | |||
| $.modal.alertWarning("请至少选择一条记录"); | |||
| return; | |||
| } | |||
| var array = $('#form-meeting-edit').serializeArray(); | |||
| var obj = {}; | |||
| array.forEach(function(item) { | |||
| obj[item.name] = item.value; | |||
| }); | |||
| userList.forEach(function (item,index){ | |||
| for (var key in item){ | |||
| obj["rwkMeetingStaffList["+index+"]."+key] = item[key]; | |||
| } | |||
| }) | |||
| $.operate.save(prefix + "/edit", $.param(obj)); | |||
| } | |||
| } | |||
| }); | |||
| // 获取双重多选中的值 | |||
| function getSelectedItems(id) { | |||
| var selectedItems = []; | |||
| // 获取选中的选项 | |||
| $("#"+id+" option:selected").each(function() { | |||
| selectedItems.push({ | |||
| personnelName: $(this).text(), | |||
| isSign: 0, | |||
| personnelId: $(this).val(), | |||
| mobilePhone:$(this).attr("data_phone") | |||
| }); | |||
| }); | |||
| return selectedItems; | |||
| } | |||
| //附件表格加载 | |||
| $(function() { | |||
| const options = { | |||
| id: 'bootstrap-table-file', | |||
| height: 325, | |||
| var options = { | |||
| pagination:false, | |||
| sidePagination: "client", | |||
| showFooter: false, | |||
| showSearch: false, | |||
| showRefresh: false, | |||
| showToggle: false, | |||
| showColumns: false, | |||
| virtualScroll: true, | |||
| showHeader:false, | |||
| height:160, | |||
| modalName: "文件信息", | |||
| data:[ | |||
| {id:1,name:"<<关于**********教育文件>>"}, | |||
| {id:2,name:"<<关于**********活动文件>>"}, | |||
| {id:4,name:"<<关于**********活动文件>>"}, | |||
| {id:5,name:"<<关于**********活动文件>>"}, | |||
| {id:5,name:"<<关于**********活动文件>>"}, | |||
| {id:5,name:"<<关于**********活动文件>>"}, | |||
| ], | |||
| columns: [ | |||
| { | |||
| @@ -164,25 +155,14 @@ | |||
| align: 'center', | |||
| formatter: function(value, row, index) { | |||
| var actions = []; | |||
| actions.push('<a class="btn btn-unite btn-xs " href="javascript:void(0)" onclick="" >下载</a> '); | |||
| actions.push('<a class="btn btn-unite btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="" >下载</a> '); | |||
| actions.push('<a class="btn btn-unite btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')">删除</a>'); | |||
| return actions.join(''); | |||
| } | |||
| }] | |||
| }; | |||
| $.table.init(options); | |||
| }); | |||
| /* 用户状态显示 */ | |||
| function qdstatusTools(row) { | |||
| if (row.qiandao == '已签到') { | |||
| return '<span class="badge badge-primary">已签到</span> '; | |||
| } else { | |||
| return '<span class="badge badge-danger">未签到</span> '; | |||
| } | |||
| } | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -1,22 +1,20 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> | |||
| <head> | |||
| <th:block th:include="include :: header('人员信息列表')" /> | |||
| <th:block th:include="include :: header('教育培训列表')" /> | |||
| <link th:href="@{/ruoyi/css/meeting.css}" rel="stylesheet"/> | |||
| <th:block th:include="include :: datetimepicker-css" /> | |||
| <th:block th:include="include :: datetimepicker-js" /> | |||
| </head> | |||
| <body class="gray-bg"> | |||
| <div class="container-div"> | |||
| <div class="row"> | |||
| <div class="col-sm-12 search-collapse"> | |||
| <form id="formId"> | |||
| <div class="select-list"> | |||
| <ul> | |||
| <li> | |||
| <label>培训标题:</label> | |||
| <input type="text" name="name"/> | |||
| <input type="text" name="meetingName"/> | |||
| </li> | |||
| <li> | |||
| <label class="control-label">培训日期:</label> | |||
| @@ -33,10 +31,10 @@ | |||
| </div> | |||
| <div id="toolbar" role="group"> | |||
| <a class="btn btn-unite" onclick="openModelAdd()" shiro:hasPermission="system:meeting:add"> | |||
| <a class="btn btn-unite" onclick="meetingAdd()" shiro:hasPermission="system:meeting:add"> | |||
| 添加 | |||
| </a> | |||
| <a class="btn btn-unite single disabled" onclick="$.operate.editTab()" shiro:hasPermission="system:information:edit"> | |||
| <a class="btn btn-unite single disabled" onclick="meetingUpdate()" shiro:hasPermission="system:information:edit"> | |||
| 修改 | |||
| </a> | |||
| <a class="btn btn-unite multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:information:remove"> | |||
| @@ -53,35 +51,19 @@ | |||
| </div> | |||
| </div> | |||
| <th:block th:include="include :: footer" /> | |||
| <th:block th:include="include :: datetimepicker-js" /> | |||
| <script th:inline="javascript"> | |||
| var editFlag = [[${@permission.hasPermi('system:meeting:edit')}]]; | |||
| var removeFlag = [[${@permission.hasPermi('system:meeting:remove')}]]; | |||
| var sexDatas = [[${@dict.getType('sys_user_sex')}]]; | |||
| var prefix = ctx + "system/meeting"; | |||
| $(function() { | |||
| var options = { | |||
| // url: prefix + "/list", | |||
| url: prefix + "/list", | |||
| createUrl: prefix + "/add", | |||
| updateUrl: prefix + "/edit/{id}", | |||
| // removeUrl: prefix + "/remove", | |||
| // exportUrl: prefix + "/export", | |||
| pagination:false, | |||
| sidePagination: "client", | |||
| showFooter: false, | |||
| showSearch: false, | |||
| showRefresh: false, | |||
| showToggle: false, | |||
| showColumns: false, | |||
| virtualScroll: true, | |||
| modalName: "人员信息", | |||
| data:[ | |||
| {id:1,name:"<<关于**********教育培训>>",num:"20/50",date:"2024-09-01"}, | |||
| {id:2,name:"<<关于**********活动培训>>",num:"36/45",date:"2024-08-01"}, | |||
| ], | |||
| // mobileResponsive: true, | |||
| // cardView: true, | |||
| // showHeader:false, | |||
| removeUrl: prefix + "/remove", | |||
| exportUrl: prefix + "/export", | |||
| modalName: "教育培训信息", | |||
| columns: [{ | |||
| checkbox: true | |||
| }, | |||
| @@ -91,15 +73,24 @@ | |||
| visible: false | |||
| }, | |||
| { | |||
| field: 'name', | |||
| field: 'meetingName', | |||
| title: '培训标题' | |||
| }, | |||
| { | |||
| field: 'num', | |||
| field: 'rwkMeetingStaffList', | |||
| title: '参与人数/受邀人数', | |||
| formatter: function(value, row, index) { | |||
| var str = "0/0"; | |||
| if (value && value.length > 0){ | |||
| var totalInvited = value.length; // 受邀人员总数 | |||
| var signedInCount = value.filter(person => person.isSign == 1).length; // 签到人数 | |||
| str = signedInCount+"/"+totalInvited; | |||
| } | |||
| return str; | |||
| } | |||
| }, | |||
| { | |||
| field: 'date', | |||
| field: 'meetingDate', | |||
| title: '培训时间' | |||
| }, | |||
| { | |||
| @@ -107,7 +98,8 @@ | |||
| align: 'center', | |||
| formatter: function(value, row, index) { | |||
| var actions = []; | |||
| actions.push('<a class="btn btn-unite btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="openModel()" >编辑</a> '); | |||
| actions.push('<a class="btn btn-unite btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="meetingUpdate(\'' + row.id + '\')">编辑</a> '); | |||
| actions.push('<a class="btn btn-unite btn-xs" href="javascript:void(0)" onclick="meetingView(\'' + row.id + '\')">查看</a> '); | |||
| actions.push('<a class="btn btn-unite btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')">删除</a>'); | |||
| return actions.join(''); | |||
| } | |||
| @@ -115,15 +107,16 @@ | |||
| }; | |||
| $.table.init(options); | |||
| }); | |||
| function openModel() { | |||
| //新增 | |||
| function meetingAdd() { | |||
| var options = { | |||
| title: '培训会议详情', | |||
| url: '/system/meeting/edit/1', | |||
| title: '新增培训活动', | |||
| url: prefix + "/add", | |||
| skin: 'layui-layer-gray', | |||
| btn: ['关闭'], | |||
| width:1400, | |||
| height:800, | |||
| width: 1400, | |||
| height: 800, | |||
| maxmin: false, | |||
| full: false, | |||
| yes: function (index, layero) { | |||
| @@ -134,14 +127,16 @@ | |||
| $.modal.openOptions(options); | |||
| } | |||
| function openModelAdd() { | |||
| //修改 | |||
| function meetingUpdate(id) { | |||
| var url = $.operate.editUrl(id); | |||
| var options = { | |||
| title: '新增培训活动', | |||
| url: '/system/meeting/add', | |||
| title: '修改培训活动', | |||
| url: url, | |||
| skin: 'layui-layer-gray', | |||
| btn: ['关闭'], | |||
| width:1400, | |||
| height:800, | |||
| width: 1400, | |||
| height: 800, | |||
| maxmin: false, | |||
| full: false, | |||
| yes: function (index, layero) { | |||
| @@ -152,7 +147,23 @@ | |||
| $.modal.openOptions(options); | |||
| } | |||
| //查看 | |||
| function meetingView(id) { | |||
| var options = { | |||
| title: '培训会议详情', | |||
| url: prefix + "/meetingView/"+id, | |||
| skin: 'layui-layer-gray', | |||
| btn: ['关闭'], | |||
| width: 1400, | |||
| height: 800, | |||
| maxmin: false, | |||
| full: false, | |||
| yes: function (index, layero) { | |||
| $.modal.close(index); | |||
| } | |||
| }; | |||
| $.modal.openOptions(options); | |||
| } | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,176 @@ | |||
| <!DOCTYPE html> | |||
| <html lang="zh" xmlns:th="http://www.thymeleaf.org" > | |||
| <head> | |||
| <th:block th:include="include :: header('培训人员详情')" /> | |||
| <link th:href="@{/ruoyi/css/meeting.css}" rel="stylesheet"/> | |||
| </head> | |||
| <body class="white-bg"> | |||
| <div class="wrapper wrapper-content animated fadeInRight ibox-content meeting-content"> | |||
| <!-- <ul class="nav head_top" id="tab">--> | |||
| <!-- <div class="text-right hidden-print" style="float: right">--> | |||
| <!-- <button class="btn btn-unite" >打印签到表</button>--> | |||
| <!-- </div>--> | |||
| <!-- </ul>--> | |||
| <form class="form-horizontal m meeting-content" id="form-information-view" style="margin: 10px;" th:object="${rwkMeeting}"> | |||
| <div> | |||
| <h1 style="font-size: 25px">[[*{meetingName}]]</h1> | |||
| </div> | |||
| <hr> | |||
| <div class="meeting-introdution meeting-add-font"> | |||
| <div style="width:100%;height:auto;white-space: pre-wrap;">[[*{meetingContent}]]</div> | |||
| <div>培训时间:[[*{meetingDate}]]</div> | |||
| </div> | |||
| <hr> | |||
| <div class="inline-meeting-div meeting-edit-files"> | |||
| <table id="bootstrap-table-file"> | |||
| </table> | |||
| </div> | |||
| <div class="inline-meeting-div" style="float: left;width: 33%"> | |||
| <table id="bootstrap-table" ></table> | |||
| </div> | |||
| <div class="inline-meeting-div meeting-pieChart1" > | |||
| <div id="pieChart1" class="pieChart1"></div> | |||
| </div> | |||
| </form> | |||
| </div> | |||
| <th:block th:include="include :: footer" /> | |||
| <th:block th:include="include :: echarts-js" /> | |||
| <script th:inline="javascript"> | |||
| var prefix = ctx + "system/meeting"; | |||
| var rwkMeetingStaffList = [[${rwkMeeting.rwkMeetingStaffList}]]; | |||
| init(); | |||
| //初始化加载 | |||
| function init(){ | |||
| peopleShow(rwkMeetingStaffList); | |||
| pieShow(rwkMeetingStaffList); | |||
| } | |||
| //统计饼图展示 | |||
| function pieShow(data){ | |||
| var totalInvited = data.length; // 受邀人员总数 | |||
| var signedInCount = data.filter(person => person.isSign == 1).length; // 签到人数 | |||
| var pieChart = echarts.init(document.getElementById('pieChart1')); | |||
| var option = { | |||
| tooltip: { | |||
| trigger: 'item' | |||
| }, | |||
| legend: { | |||
| top: '1%', | |||
| left: 'center' | |||
| }, | |||
| series: [ | |||
| { | |||
| name: '签到情况', | |||
| type: 'pie', | |||
| radius: ['40%', '70%'], | |||
| avoidLabelOverlap: false, | |||
| label: { | |||
| show: false, | |||
| position: 'center' | |||
| }, | |||
| emphasis: { | |||
| label: { | |||
| show: true, | |||
| fontSize: 15, | |||
| fontWeight: 'bold' | |||
| } | |||
| }, | |||
| labelLine: { | |||
| show: false | |||
| }, | |||
| data: [ | |||
| { value: signedInCount, name: '签到人数' }, | |||
| { value: totalInvited-signedInCount, name: '未签到人数' } | |||
| ] | |||
| } | |||
| ] | |||
| }; | |||
| pieChart.setOption(option); | |||
| } | |||
| //受邀人员展示 | |||
| function peopleShow(data){ | |||
| const options = { | |||
| height: 325, | |||
| pagination:false, | |||
| sidePagination: "client", | |||
| virtualScroll: true, | |||
| data:data, | |||
| columns: [ | |||
| { | |||
| field: 'id', | |||
| title: '主键id', | |||
| visible: false | |||
| }, | |||
| { | |||
| field: 'personnelName', | |||
| title: '姓名' | |||
| }, | |||
| { | |||
| field: 'isSign', | |||
| title: '签到情况', | |||
| formatter: function (value, row, index) { | |||
| if (value == 1) { | |||
| return '<span class="badge badge-primary">已签到</span> '; | |||
| } else { | |||
| return '<span class="badge badge-danger">未签到</span> '; | |||
| } | |||
| } | |||
| }, | |||
| { | |||
| field: 'mobilePhone', | |||
| title: '手机号' | |||
| }] | |||
| }; | |||
| $.table.init(options); | |||
| } | |||
| $(function() { | |||
| const options = { | |||
| id: 'bootstrap-table-file', | |||
| height: 325, | |||
| pagination:false, | |||
| sidePagination: "client", | |||
| showFooter: false, | |||
| showSearch: false, | |||
| showRefresh: false, | |||
| showToggle: false, | |||
| showColumns: false, | |||
| virtualScroll: true, | |||
| data:[ | |||
| {id:1,name:"<<关于**********教育文件>>"}, | |||
| {id:2,name:"<<关于**********活动文件>>"}, | |||
| {id:4,name:"<<关于**********活动文件>>"}, | |||
| {id:5,name:"<<关于**********活动文件>>"}, | |||
| {id:5,name:"<<关于**********活动文件>>"}, | |||
| {id:5,name:"<<关于**********活动文件>>"}, | |||
| ], | |||
| columns: [ | |||
| { | |||
| field: 'id', | |||
| title: '主键id', | |||
| visible: false | |||
| }, | |||
| { | |||
| field: 'name', | |||
| title: '文件标题' | |||
| }, | |||
| { | |||
| title: '操作', | |||
| align: 'center', | |||
| formatter: function(value, row, index) { | |||
| var actions = []; | |||
| actions.push('<a class="btn btn-unite btn-xs " href="javascript:void(0)" onclick="" >下载</a> '); | |||
| return actions.join(''); | |||
| } | |||
| }] | |||
| }; | |||
| $.table.init(options); | |||
| }); | |||
| </script> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,136 @@ | |||
| package com.rwk.system.domain; | |||
| import java.util.List; | |||
| 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 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| public class RwkMeeting extends BaseEntity | |||
| { | |||
| private static final long serialVersionUID = 1L; | |||
| /** 主键id */ | |||
| private Long id; | |||
| /** 培训名称 */ | |||
| @Excel(name = "培训名称") | |||
| private String meetingName; | |||
| /** 培训内容 */ | |||
| @Excel(name = "培训内容") | |||
| private String meetingContent; | |||
| /** 培训时间 */ | |||
| @Excel(name = "培训时间") | |||
| private String meetingDate; | |||
| /** 培训发起单位 */ | |||
| @Excel(name = "培训发起单位") | |||
| private String meetingByCompany; | |||
| /** 培训人员签到信息 */ | |||
| private List<RwkMeetingStaff> rwkMeetingStaffList; | |||
| private String startDate; | |||
| private String endDate; | |||
| public void setId(Long id) | |||
| { | |||
| this.id = id; | |||
| } | |||
| public Long getId() | |||
| { | |||
| return id; | |||
| } | |||
| public void setMeetingName(String meetingName) | |||
| { | |||
| this.meetingName = meetingName; | |||
| } | |||
| public String getMeetingName() | |||
| { | |||
| return meetingName; | |||
| } | |||
| public void setMeetingContent(String meetingContent) | |||
| { | |||
| this.meetingContent = meetingContent; | |||
| } | |||
| public String getMeetingContent() | |||
| { | |||
| return meetingContent; | |||
| } | |||
| public void setMeetingDate(String meetingDate) | |||
| { | |||
| this.meetingDate = meetingDate; | |||
| } | |||
| public String getMeetingDate() | |||
| { | |||
| return meetingDate; | |||
| } | |||
| public void setMeetingByCompany(String meetingByCompany) | |||
| { | |||
| this.meetingByCompany = meetingByCompany; | |||
| } | |||
| public String getMeetingByCompany() | |||
| { | |||
| return meetingByCompany; | |||
| } | |||
| public List<RwkMeetingStaff> getRwkMeetingStaffList() | |||
| { | |||
| return rwkMeetingStaffList; | |||
| } | |||
| public void setRwkMeetingStaffList(List<RwkMeetingStaff> rwkMeetingStaffList) | |||
| { | |||
| this.rwkMeetingStaffList = rwkMeetingStaffList; | |||
| } | |||
| public String getStartDate() { | |||
| return startDate; | |||
| } | |||
| public void setStartDate(String startDate) { | |||
| this.startDate = startDate; | |||
| } | |||
| public String getEndDate() { | |||
| return endDate; | |||
| } | |||
| public void setEndDate(String endDate) { | |||
| this.endDate = endDate; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | |||
| .append("id", getId()) | |||
| .append("meetingName", getMeetingName()) | |||
| .append("meetingContent", getMeetingContent()) | |||
| .append("meetingDate", getMeetingDate()) | |||
| .append("meetingByCompany", getMeetingByCompany()) | |||
| .append("createTime", getCreateTime()) | |||
| .append("createBy", getCreateBy()) | |||
| .append("rwkMeetingStaffList", getRwkMeetingStaffList()) | |||
| .append("startDate", getStartDate()) | |||
| .append("endDate", getEndDate()) | |||
| .toString(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,112 @@ | |||
| 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_staff | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| public class RwkMeetingStaff extends BaseEntity | |||
| { | |||
| private static final long serialVersionUID = 1L; | |||
| /** 主键id */ | |||
| private Long id; | |||
| /** 教育培训会议标识 */ | |||
| @Excel(name = "教育培训会议标识") | |||
| private Long meetingId; | |||
| /** 人员姓名 */ | |||
| @Excel(name = "人员姓名") | |||
| private String personnelName; | |||
| /** 是否签到(1/0) */ | |||
| @Excel(name = "是否签到(1/0)") | |||
| private Long isSign; | |||
| /** 人员ID */ | |||
| @Excel(name = "人员ID") | |||
| private String personnelId; | |||
| /** 手机号码 */ | |||
| @Excel(name = "手机号码") | |||
| private String mobilePhone; | |||
| public void setId(Long id) | |||
| { | |||
| this.id = id; | |||
| } | |||
| public Long getId() | |||
| { | |||
| return id; | |||
| } | |||
| public void setMeetingId(Long meetingId) | |||
| { | |||
| this.meetingId = meetingId; | |||
| } | |||
| public Long getMeetingId() | |||
| { | |||
| return meetingId; | |||
| } | |||
| public void setPersonnelName(String personnelName) | |||
| { | |||
| this.personnelName = personnelName; | |||
| } | |||
| public String getPersonnelName() | |||
| { | |||
| return personnelName; | |||
| } | |||
| public void setIsSign(Long isSign) | |||
| { | |||
| this.isSign = isSign; | |||
| } | |||
| public Long getIsSign() | |||
| { | |||
| return isSign; | |||
| } | |||
| public void setPersonnelId(String personnelId) | |||
| { | |||
| this.personnelId = personnelId; | |||
| } | |||
| public String getPersonnelId() | |||
| { | |||
| return personnelId; | |||
| } | |||
| public void setMobilePhone(String mobilePhone) | |||
| { | |||
| this.mobilePhone = mobilePhone; | |||
| } | |||
| public String getMobilePhone() | |||
| { | |||
| return mobilePhone; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) | |||
| .append("id", getId()) | |||
| .append("meetingId", getMeetingId()) | |||
| .append("personnelName", getPersonnelName()) | |||
| .append("isSign", getIsSign()) | |||
| .append("personnelId", getPersonnelId()) | |||
| .append("mobilePhone", getMobilePhone()) | |||
| .toString(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,87 @@ | |||
| package com.rwk.system.mapper; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeeting; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| /** | |||
| * 教育培训Mapper接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| public interface RwkMeetingMapper | |||
| { | |||
| /** | |||
| * 查询教育培训 | |||
| * | |||
| * @param id 教育培训主键 | |||
| * @return 教育培训 | |||
| */ | |||
| public RwkMeeting selectRwkMeetingById(Long id); | |||
| /** | |||
| * 查询教育培训列表 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 教育培训集合 | |||
| */ | |||
| public List<RwkMeeting> selectRwkMeetingList(RwkMeeting rwkMeeting); | |||
| /** | |||
| * 新增教育培训 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 结果 | |||
| */ | |||
| public int insertRwkMeeting(RwkMeeting rwkMeeting); | |||
| /** | |||
| * 修改教育培训 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 结果 | |||
| */ | |||
| public int updateRwkMeeting(RwkMeeting rwkMeeting); | |||
| /** | |||
| * 删除教育培训 | |||
| * | |||
| * @param id 教育培训主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingById(Long id); | |||
| /** | |||
| * 批量删除教育培训 | |||
| * | |||
| * @param ids 需要删除的数据主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingByIds(String[] ids); | |||
| /** | |||
| * 批量删除培训人员签到 | |||
| * | |||
| * @param ids 需要删除的数据主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffByMeetingIds(String[] ids); | |||
| /** | |||
| * 批量新增培训人员签到 | |||
| * | |||
| * @param rwkMeetingStaffList 培训人员签到列表 | |||
| * @return 结果 | |||
| */ | |||
| public int batchRwkMeetingStaff(List<RwkMeetingStaff> rwkMeetingStaffList); | |||
| /** | |||
| * 通过教育培训主键删除培训人员签到信息 | |||
| * | |||
| * @param id 教育培训ID | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffByMeetingId(Long id); | |||
| } | |||
| @@ -0,0 +1,61 @@ | |||
| package com.rwk.system.mapper; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| /** | |||
| * 培训人员签到Mapper接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| public interface RwkMeetingStaffMapper | |||
| { | |||
| /** | |||
| * 查询培训人员签到 | |||
| * | |||
| * @param id 培训人员签到主键 | |||
| * @return 培训人员签到 | |||
| */ | |||
| public RwkMeetingStaff selectRwkMeetingStaffById(Long id); | |||
| /** | |||
| * 查询培训人员签到列表 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 培训人员签到集合 | |||
| */ | |||
| public List<RwkMeetingStaff> selectRwkMeetingStaffList(RwkMeetingStaff rwkMeetingStaff); | |||
| /** | |||
| * 新增培训人员签到 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 结果 | |||
| */ | |||
| public int insertRwkMeetingStaff(RwkMeetingStaff rwkMeetingStaff); | |||
| /** | |||
| * 修改培训人员签到 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 结果 | |||
| */ | |||
| public int updateRwkMeetingStaff(RwkMeetingStaff rwkMeetingStaff); | |||
| /** | |||
| * 删除培训人员签到 | |||
| * | |||
| * @param id 培训人员签到主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffById(Long id); | |||
| /** | |||
| * 批量删除培训人员签到 | |||
| * | |||
| * @param ids 需要删除的数据主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffByIds(String[] ids); | |||
| } | |||
| @@ -0,0 +1,61 @@ | |||
| package com.rwk.system.service; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeeting; | |||
| /** | |||
| * 教育培训Service接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| public interface IRwkMeetingService | |||
| { | |||
| /** | |||
| * 查询教育培训 | |||
| * | |||
| * @param id 教育培训主键 | |||
| * @return 教育培训 | |||
| */ | |||
| public RwkMeeting selectRwkMeetingById(Long id); | |||
| /** | |||
| * 查询教育培训列表 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 教育培训集合 | |||
| */ | |||
| public List<RwkMeeting> selectRwkMeetingList(RwkMeeting rwkMeeting); | |||
| /** | |||
| * 新增教育培训 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 结果 | |||
| */ | |||
| public int insertRwkMeeting(RwkMeeting rwkMeeting); | |||
| /** | |||
| * 修改教育培训 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 结果 | |||
| */ | |||
| public int updateRwkMeeting(RwkMeeting rwkMeeting); | |||
| /** | |||
| * 批量删除教育培训 | |||
| * | |||
| * @param ids 需要删除的教育培训主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingByIds(String ids); | |||
| /** | |||
| * 删除教育培训信息 | |||
| * | |||
| * @param id 教育培训主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingById(Long id); | |||
| } | |||
| @@ -0,0 +1,61 @@ | |||
| package com.rwk.system.service; | |||
| import java.util.List; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| /** | |||
| * 培训人员签到Service接口 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| public interface IRwkMeetingStaffService | |||
| { | |||
| /** | |||
| * 查询培训人员签到 | |||
| * | |||
| * @param id 培训人员签到主键 | |||
| * @return 培训人员签到 | |||
| */ | |||
| public RwkMeetingStaff selectRwkMeetingStaffById(Long id); | |||
| /** | |||
| * 查询培训人员签到列表 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 培训人员签到集合 | |||
| */ | |||
| public List<RwkMeetingStaff> selectRwkMeetingStaffList(RwkMeetingStaff rwkMeetingStaff); | |||
| /** | |||
| * 新增培训人员签到 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 结果 | |||
| */ | |||
| public int insertRwkMeetingStaff(RwkMeetingStaff rwkMeetingStaff); | |||
| /** | |||
| * 修改培训人员签到 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 结果 | |||
| */ | |||
| public int updateRwkMeetingStaff(RwkMeetingStaff rwkMeetingStaff); | |||
| /** | |||
| * 批量删除培训人员签到 | |||
| * | |||
| * @param ids 需要删除的培训人员签到主键集合 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffByIds(String ids); | |||
| /** | |||
| * 删除培训人员签到信息 | |||
| * | |||
| * @param id 培训人员签到主键 | |||
| * @return 结果 | |||
| */ | |||
| public int deleteRwkMeetingStaffById(Long id); | |||
| } | |||
| @@ -0,0 +1,129 @@ | |||
| package com.rwk.system.service.impl; | |||
| import java.util.List; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.ArrayList; | |||
| import com.rwk.common.utils.StringUtils; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| import com.rwk.system.mapper.RwkMeetingMapper; | |||
| import com.rwk.system.domain.RwkMeeting; | |||
| import com.rwk.system.service.IRwkMeetingService; | |||
| import com.rwk.common.core.text.Convert; | |||
| /** | |||
| * 教育培训Service业务层处理 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| @Service | |||
| public class RwkMeetingServiceImpl implements IRwkMeetingService | |||
| { | |||
| @Autowired | |||
| private RwkMeetingMapper rwkMeetingMapper; | |||
| /** | |||
| * 查询教育培训 | |||
| * | |||
| * @param id 教育培训主键 | |||
| * @return 教育培训 | |||
| */ | |||
| @Override | |||
| public RwkMeeting selectRwkMeetingById(Long id) | |||
| { | |||
| return rwkMeetingMapper.selectRwkMeetingById(id); | |||
| } | |||
| /** | |||
| * 查询教育培训列表 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 教育培训 | |||
| */ | |||
| @Override | |||
| public List<RwkMeeting> selectRwkMeetingList(RwkMeeting rwkMeeting) | |||
| { | |||
| return rwkMeetingMapper.selectRwkMeetingList(rwkMeeting); | |||
| } | |||
| /** | |||
| * 新增教育培训 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 结果 | |||
| */ | |||
| @Transactional | |||
| @Override | |||
| public int insertRwkMeeting(RwkMeeting rwkMeeting) | |||
| { | |||
| int rows = rwkMeetingMapper.insertRwkMeeting(rwkMeeting); | |||
| insertRwkMeetingStaff(rwkMeeting); | |||
| return rows; | |||
| } | |||
| /** | |||
| * 修改教育培训 | |||
| * | |||
| * @param rwkMeeting 教育培训 | |||
| * @return 结果 | |||
| */ | |||
| @Transactional | |||
| @Override | |||
| public int updateRwkMeeting(RwkMeeting rwkMeeting) | |||
| { | |||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(rwkMeeting.getId()); | |||
| insertRwkMeetingStaff(rwkMeeting); | |||
| return rwkMeetingMapper.updateRwkMeeting(rwkMeeting); | |||
| } | |||
| /** | |||
| * 批量删除教育培训 | |||
| * | |||
| * @param ids 需要删除的教育培训主键 | |||
| * @return 结果 | |||
| */ | |||
| @Transactional | |||
| @Override | |||
| public int deleteRwkMeetingByIds(String ids) | |||
| { | |||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingIds(Convert.toStrArray(ids)); | |||
| return rwkMeetingMapper.deleteRwkMeetingByIds(Convert.toStrArray(ids)); | |||
| } | |||
| /** | |||
| * 删除教育培训信息 | |||
| * | |||
| * @param id 教育培训主键 | |||
| * @return 结果 | |||
| */ | |||
| @Transactional | |||
| @Override | |||
| public int deleteRwkMeetingById(Long id) | |||
| { | |||
| rwkMeetingMapper.deleteRwkMeetingStaffByMeetingId(id); | |||
| return rwkMeetingMapper.deleteRwkMeetingById(id); | |||
| } | |||
| /** | |||
| * 新增培训人员签到信息 | |||
| * | |||
| * @param rwkMeeting 教育培训对象 | |||
| */ | |||
| public void insertRwkMeetingStaff(RwkMeeting rwkMeeting) | |||
| { | |||
| List<RwkMeetingStaff> rwkMeetingStaffList = rwkMeeting.getRwkMeetingStaffList(); | |||
| Long id = rwkMeeting.getId(); | |||
| if (StringUtils.isNotNull(rwkMeetingStaffList)) { | |||
| List<RwkMeetingStaff> list = new ArrayList<>(); | |||
| for (RwkMeetingStaff rwkMeetingStaff : rwkMeetingStaffList) { | |||
| rwkMeetingStaff.setMeetingId(id); | |||
| list.add(rwkMeetingStaff); | |||
| } | |||
| if (!list.isEmpty()) { | |||
| rwkMeetingMapper.batchRwkMeetingStaff(list); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -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.RwkMeetingStaffMapper; | |||
| import com.rwk.system.domain.RwkMeetingStaff; | |||
| import com.rwk.system.service.IRwkMeetingStaffService; | |||
| import com.rwk.common.core.text.Convert; | |||
| /** | |||
| * 培训人员签到Service业务层处理 | |||
| * | |||
| * @author ruoyi | |||
| * @date 2024-12-05 | |||
| */ | |||
| @Service | |||
| public class RwkMeetingStaffServiceImpl implements IRwkMeetingStaffService | |||
| { | |||
| @Autowired | |||
| private RwkMeetingStaffMapper rwkMeetingStaffMapper; | |||
| /** | |||
| * 查询培训人员签到 | |||
| * | |||
| * @param id 培训人员签到主键 | |||
| * @return 培训人员签到 | |||
| */ | |||
| @Override | |||
| public RwkMeetingStaff selectRwkMeetingStaffById(Long id) | |||
| { | |||
| return rwkMeetingStaffMapper.selectRwkMeetingStaffById(id); | |||
| } | |||
| /** | |||
| * 查询培训人员签到列表 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 培训人员签到 | |||
| */ | |||
| @Override | |||
| public List<RwkMeetingStaff> selectRwkMeetingStaffList(RwkMeetingStaff rwkMeetingStaff) | |||
| { | |||
| return rwkMeetingStaffMapper.selectRwkMeetingStaffList(rwkMeetingStaff); | |||
| } | |||
| /** | |||
| * 新增培训人员签到 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int insertRwkMeetingStaff(RwkMeetingStaff rwkMeetingStaff) | |||
| { | |||
| return rwkMeetingStaffMapper.insertRwkMeetingStaff(rwkMeetingStaff); | |||
| } | |||
| /** | |||
| * 修改培训人员签到 | |||
| * | |||
| * @param rwkMeetingStaff 培训人员签到 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int updateRwkMeetingStaff(RwkMeetingStaff rwkMeetingStaff) | |||
| { | |||
| return rwkMeetingStaffMapper.updateRwkMeetingStaff(rwkMeetingStaff); | |||
| } | |||
| /** | |||
| * 批量删除培训人员签到 | |||
| * | |||
| * @param ids 需要删除的培训人员签到主键 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int deleteRwkMeetingStaffByIds(String ids) | |||
| { | |||
| return rwkMeetingStaffMapper.deleteRwkMeetingStaffByIds(Convert.toStrArray(ids)); | |||
| } | |||
| /** | |||
| * 删除培训人员签到信息 | |||
| * | |||
| * @param id 培训人员签到主键 | |||
| * @return 结果 | |||
| */ | |||
| @Override | |||
| public int deleteRwkMeetingStaffById(Long id) | |||
| { | |||
| return rwkMeetingStaffMapper.deleteRwkMeetingStaffById(id); | |||
| } | |||
| } | |||
| @@ -0,0 +1,123 @@ | |||
| <?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.RwkMeetingMapper"> | |||
| <resultMap type="RwkMeeting" id="RwkMeetingResult"> | |||
| <result property="id" column="id" /> | |||
| <result property="meetingName" column="meeting_name" /> | |||
| <result property="meetingContent" column="meeting_content" /> | |||
| <result property="meetingDate" column="meeting_date" /> | |||
| <result property="meetingByCompany" column="meeting_by_company" /> | |||
| <result property="createTime" column="create_time" /> | |||
| <result property="createBy" column="create_by" /> | |||
| <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList"/> | |||
| </resultMap> | |||
| <resultMap id="RwkMeetingRwkMeetingStaffResult" type="RwkMeeting" extends="RwkMeetingResult"> | |||
| <collection property="rwkMeetingStaffList" ofType="RwkMeetingStaff" column="id" select="selectRwkMeetingStaffList" /> | |||
| </resultMap> | |||
| <resultMap type="RwkMeetingStaff" id="RwkMeetingStaffResult"> | |||
| <result property="id" column="id" /> | |||
| <result property="meetingId" column="meeting_id" /> | |||
| <result property="personnelName" column="personnel_name" /> | |||
| <result property="isSign" column="is_sign" /> | |||
| <result property="personnelId" column="personnel_id" /> | |||
| <result property="mobilePhone" column="mobile_phone" /> | |||
| </resultMap> | |||
| <sql id="selectRwkMeetingVo"> | |||
| select id, meeting_name, meeting_content, meeting_date, meeting_by_company, create_time, create_by from rwk_meeting | |||
| </sql> | |||
| <select id="selectRwkMeetingList" parameterType="RwkMeeting" resultMap="RwkMeetingResult"> | |||
| <include refid="selectRwkMeetingVo"/> | |||
| <where> | |||
| <if test="meetingName != null and meetingName != ''"> and meeting_name like concat('%', #{meetingName}, '%')</if> | |||
| <if test="meetingContent != null and meetingContent != ''"> and meeting_content = #{meetingContent}</if> | |||
| <if test="meetingDate != null and meetingDate != ''"> and meeting_date = #{meetingDate}</if> | |||
| <if test="meetingByCompany != null and meetingByCompany != ''"> and meeting_by_company = #{meetingByCompany}</if> | |||
| <if test="startDate != null and startDate != ''"> and to_date(#{startDate},'yyyy-MM-dd') <= meeting_date</if> | |||
| <if test="endDate != null and endDate != ''"> and to_date(#{endDate},'yyyy-MM-dd') >= meeting_date</if> | |||
| </where> | |||
| </select> | |||
| <select id="selectRwkMeetingById" parameterType="Long" resultMap="RwkMeetingRwkMeetingStaffResult"> | |||
| select id, meeting_name, meeting_content, meeting_date, meeting_by_company, create_time, create_by | |||
| from rwk_meeting | |||
| where id = #{id} | |||
| </select> | |||
| <select id="selectRwkMeetingStaffList" resultMap="RwkMeetingStaffResult"> | |||
| select id, meeting_id, personnel_name, is_sign, personnel_id, mobile_phone | |||
| from rwk_meeting_staff | |||
| where meeting_id = #{meeting_id} | |||
| </select> | |||
| <insert id="insertRwkMeeting" parameterType="RwkMeeting" keyProperty="id"> | |||
| insert into rwk_meeting | |||
| <trim prefix="(" suffix=")" suffixOverrides=","> | |||
| <if test="id != null">id,</if> | |||
| <if test="meetingName != null">meeting_name,</if> | |||
| <if test="meetingContent != null">meeting_content,</if> | |||
| <if test="meetingDate != null">meeting_date,</if> | |||
| <if test="meetingByCompany != null">meeting_by_company,</if> | |||
| <if test="createTime != null">create_time,</if> | |||
| <if test="createBy != null">create_by,</if> | |||
| </trim> | |||
| <trim prefix="values (" suffix=")" suffixOverrides=","> | |||
| <if test="id != null">#{id},</if> | |||
| <if test="meetingName != null">#{meetingName},</if> | |||
| <if test="meetingContent != null">#{meetingContent},</if> | |||
| <if test="meetingDate != null">#{meetingDate},</if> | |||
| <if test="meetingByCompany != null">#{meetingByCompany},</if> | |||
| <if test="createTime != null">#{createTime},</if> | |||
| <if test="createBy != null">#{createBy},</if> | |||
| </trim> | |||
| </insert> | |||
| <update id="updateRwkMeeting" parameterType="RwkMeeting"> | |||
| update rwk_meeting | |||
| <trim prefix="SET" suffixOverrides=","> | |||
| <if test="meetingName != null">meeting_name = #{meetingName},</if> | |||
| <if test="meetingContent != null">meeting_content = #{meetingContent},</if> | |||
| <if test="meetingDate != null">meeting_date = #{meetingDate},</if> | |||
| <if test="meetingByCompany != null">meeting_by_company = #{meetingByCompany},</if> | |||
| <if test="createTime != null">create_time = #{createTime},</if> | |||
| <if test="createBy != null">create_by = #{createBy},</if> | |||
| </trim> | |||
| where id = #{id} | |||
| </update> | |||
| <delete id="deleteRwkMeetingById" parameterType="Long"> | |||
| delete from rwk_meeting where id = #{id} | |||
| </delete> | |||
| <delete id="deleteRwkMeetingByIds" parameterType="String"> | |||
| delete from rwk_meeting where id in | |||
| <foreach item="id" collection="array" open="(" separator="," close=")"> | |||
| #{id} | |||
| </foreach> | |||
| </delete> | |||
| <delete id="deleteRwkMeetingStaffByMeetingIds" parameterType="String"> | |||
| delete from rwk_meeting_staff 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> | |||
| <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=","> | |||
| ( #{item.meetingId}, #{item.personnelName}, #{item.isSign}, #{item.personnelId}, #{item.mobilePhone}) | |||
| </foreach> | |||
| </insert> | |||
| </mapper> | |||
| @@ -0,0 +1,77 @@ | |||
| <?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.RwkMeetingStaffMapper"> | |||
| <resultMap type="RwkMeetingStaff" id="RwkMeetingStaffResult"> | |||
| <result property="id" column="id" /> | |||
| <result property="meetingId" column="meeting_id" /> | |||
| <result property="personnelName" column="personnel_name" /> | |||
| <result property="isSign" column="is_sign" /> | |||
| <result property="personnelId" column="personnel_id" /> | |||
| <result property="mobilePhone" column="mobile_phone" /> | |||
| </resultMap> | |||
| <sql id="selectRwkMeetingStaffVo"> | |||
| select id, meeting_id, personnel_name, is_sign, personnel_id, mobile_phone from rwk_meeting_staff | |||
| </sql> | |||
| <select id="selectRwkMeetingStaffList" parameterType="RwkMeetingStaff" resultMap="RwkMeetingStaffResult"> | |||
| <include refid="selectRwkMeetingStaffVo"/> | |||
| <where> | |||
| <if test="meetingId != null "> and meeting_id = #{meetingId}</if> | |||
| <if test="personnelName != null and personnelName != ''"> and personnel_name like concat('%', #{personnelName}, '%')</if> | |||
| <if test="isSign != null "> and is_sign = #{isSign}</if> | |||
| <if test="personnelId != null and personnelId != ''"> and personnel_id = #{personnelId}</if> | |||
| <if test="mobilePhone != null and mobilePhone != ''"> and mobile_phone = #{mobilePhone}</if> | |||
| </where> | |||
| </select> | |||
| <select id="selectRwkMeetingStaffById" parameterType="Long" resultMap="RwkMeetingStaffResult"> | |||
| <include refid="selectRwkMeetingStaffVo"/> | |||
| where id = #{id} | |||
| </select> | |||
| <insert id="insertRwkMeetingStaff" parameterType="RwkMeetingStaff" useGeneratedKeys="true" keyProperty="id"> | |||
| insert into rwk_meeting_staff | |||
| <trim prefix="(" suffix=")" suffixOverrides=","> | |||
| <if test="meetingId != null">meeting_id,</if> | |||
| <if test="personnelName != null">personnel_name,</if> | |||
| <if test="isSign != null">is_sign,</if> | |||
| <if test="personnelId != null">personnel_id,</if> | |||
| <if test="mobilePhone != null">mobile_phone,</if> | |||
| </trim> | |||
| <trim prefix="values (" suffix=")" suffixOverrides=","> | |||
| <if test="meetingId != null">#{meetingId},</if> | |||
| <if test="personnelName != null">#{personnelName},</if> | |||
| <if test="isSign != null">#{isSign},</if> | |||
| <if test="personnelId != null">#{personnelId},</if> | |||
| <if test="mobilePhone != null">#{mobilePhone},</if> | |||
| </trim> | |||
| </insert> | |||
| <update id="updateRwkMeetingStaff" parameterType="RwkMeetingStaff"> | |||
| update rwk_meeting_staff | |||
| <trim prefix="SET" suffixOverrides=","> | |||
| <if test="meetingId != null">meeting_id = #{meetingId},</if> | |||
| <if test="personnelName != null">personnel_name = #{personnelName},</if> | |||
| <if test="isSign != null">is_sign = #{isSign},</if> | |||
| <if test="personnelId != null">personnel_id = #{personnelId},</if> | |||
| <if test="mobilePhone != null">mobile_phone = #{mobilePhone},</if> | |||
| </trim> | |||
| where id = #{id} | |||
| </update> | |||
| <delete id="deleteRwkMeetingStaffById" parameterType="Long"> | |||
| delete from rwk_meeting_staff where id = #{id} | |||
| </delete> | |||
| <delete id="deleteRwkMeetingStaffByIds" parameterType="String"> | |||
| delete from rwk_meeting_staff where id in | |||
| <foreach item="id" collection="array" open="(" separator="," close=")"> | |||
| #{id} | |||
| </foreach> | |||
| </delete> | |||
| </mapper> | |||