杜洪波
2025-09-29 84282c0bed4337bdeb0c8bc3e240c593398fbef4
会议看板代码提交
已修改4个文件
448 ■■■■ 文件已修改
src/main/java/com/product/administration/config/CmnConst.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/administration/controller/ConferenceManagerController.java 294 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/administration/service/ConferenceManagerService.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/administration/service/ide/IConferenceManagerService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/administration/config/CmnConst.java
@@ -3,9 +3,9 @@
public class CmnConst {
    //表名常量定义
    public static final String PRODUCT_SYS_MODULES = "product_sys_modules";        //模块表名
    public static final String PRODUCT_SYS_DICT = "product_sys_dict";    //数据字典表
    public static final String PRODUCT_SYS_USERS = "product_sys_users";    //登录用户表
    public static final String PRODUCT_SYS_PROMPT = "product_sys_prompt";    //高级参照表
src/main/java/com/product/administration/controller/ConferenceManagerController.java
@@ -11,6 +11,7 @@
import com.product.administration.service.ide.IConferenceManagerService;
import com.product.core.config.CoreConst;
import com.product.core.controller.support.AbstractBaseController;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.entity.RequestParameterEntity;
import com.product.core.exception.BaseException;
@@ -60,20 +61,7 @@
    public String listConferenceRoom(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG);
            // 判断分页参数是否正常
            if (StringUtils.isEmpty(fse.getString(CmnConst.PAGESIZE))
                    || StringUtils.isEmpty(fse.getString(CmnConst.CPAGE))) {
@@ -104,20 +92,7 @@
    public String findCconferenceRoom(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG);
            // 判断uuid是否正常
            if (StringUtils.isEmpty(fse.getUUID())) {
                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
@@ -146,21 +121,7 @@
    @ApiVersion(1)
    public String saveCconferenceRoom(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG);
            //数据操作的权限验证
            if (!permissionService.validDataPermission(fse, CoreConst.DATA_PERMISSION_VALID_TYPE_ORG)) {
                return this.error(SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getValue(), SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText());
@@ -187,20 +148,7 @@
    public String deleteCconferenceRoom(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG);
            // 判断uuid是否正常
            if (StringUtils.isEmpty(fse.getUUID())) {
                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
@@ -222,7 +170,7 @@
    /**
     * 会议申请
     * 会议室申请
     *
     * @param request
     * @return
@@ -232,20 +180,7 @@
    public String listConferenceApply(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_APPLY.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_APPLY);
            // 判断分页参数是否正常
            if (StringUtils.isEmpty(fse.getString(CmnConst.PAGESIZE))
                    || StringUtils.isEmpty(fse.getString(CmnConst.CPAGE))) {
@@ -277,20 +212,7 @@
    public String findCconferenceApply(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_APPLY.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_APPLY);
            // 判断uuid是否正常
            if (StringUtils.isEmpty(fse.getUUID())) {
                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
@@ -311,7 +233,7 @@
    }
    /**
     * 会议室保存
     * 会议室申请保存
     *
     * @param request
     * @return
@@ -320,21 +242,7 @@
    @ApiVersion(1)
    public String saveCconferenceApply(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_APPLY.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_APPLY);
            //数据操作的权限验证
            if (!permissionService.validDataPermission(fse, CoreConst.DATA_PERMISSION_VALID_TYPE_ORG)) {
                return this.error(SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getValue(), SystemErrorCode.SYSTEM_NOT_OPER_PERMISSION.getText());
@@ -351,7 +259,7 @@
    }
    /**
     * 会议室删除
     * 会议室申请删除
     *
     * @param request
     * @return
@@ -360,21 +268,7 @@
    @ApiVersion(1)
    public String deleteCconferenceApply(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_APPLY.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_APPLY);
            // 判断uuid是否正常
            if (StringUtils.isEmpty(fse.getUUID())) {
                return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
@@ -405,22 +299,30 @@
    @ApiVersion(1)
    public String conferenceRoomUsage(HttpServletRequest request) {
        try {
            //获取参数
            FieldSetEntity fse = null;
            Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
            if (bean != null) {
                RequestParameterEntity reqp = (RequestParameterEntity) bean;
                fse = reqp.getFormData();
            }
            //判断参数是否为空
            if (bean == null || fse == null) {
                return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
            }
            // 判断表名是否正常
            if (fse.getTableName() == null || !CmnConst.PRODUCT_OA_CONFERENCE_APPLY.equals(fse.getTableName())) {
                return this.error(SystemCode.SYSTEM_TABLE_NODATA.getValue(), SystemCode.SYSTEM_TABLE_NODATA.getText());
            }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_OA_CONFERENCE_APPLY);
            return conferenceManagerService.getConferenceRoomUsage(fse);
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e.getCode(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.CONFERENCE_ROOM_GET_FIAL.getValue(), SystemCode.CONFERENCE_ROOM_GET_FIAL.getText() + e.getMessage());
        }
    }
    /**
     * 会议预约看板功能
     * @param request
     * @return
     */
    @PostMapping("/meeting-kanban/{version}")
    @ApiVersion(1)
   public String getKanbanData(HttpServletRequest request){
        try {
            //获取参数
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
            DataTableEntity dtKanban = conferenceManagerService.getKanBanData(fse);
            return OK_List(dtKanban);
        } catch (BaseException e) {
            e.printStackTrace();
            return this.error(e.getCode(), e.getMessage());
@@ -438,22 +340,18 @@
    @PostMapping("/get_kb_Data/{version}")
    @ApiVersion(1)
   public String getkbData(HttpServletRequest request){
        try {
        //获取参数
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
        }
        //判断参数是否为空
        if (bean == null || fse == null) {
            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
        }
        List kbData = conferenceManagerService.getKbData(fse);
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
            List kbData = conferenceManagerService.getkbData(fse);
        return OK(kbData);
        }  catch (BaseException e) {
            e.printStackTrace();
            return this.error(e.getCode(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.CONFERENCE_ROOM_GET_FIAL.getValue(), SystemCode.CONFERENCE_ROOM_GET_FIAL.getText() + e.getMessage());
        }
    }
    /**
@@ -464,20 +362,18 @@
    @PostMapping("/get_Meeting_Details/{version}")
    @ApiVersion(1)
    public String getMeetingDetails(HttpServletRequest request){
        try {
        //获取参数
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
        }
        //判断参数是否为空
        if (bean == null || fse == null) {
            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
        }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
        List meetingDetails = conferenceManagerService.getMeetingDetails(fse);
        return  OK(meetingDetails);
        }  catch (BaseException e) {
            e.printStackTrace();
            return this.error(e.getCode(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.CONFERENCE_ROOM_GET_FIAL.getValue(), SystemCode.CONFERENCE_ROOM_GET_FIAL.getText() + e.getMessage());
        }
    }
    /**
@@ -489,21 +385,18 @@
    @PostMapping("/save_or_update_meeting_info/{version}")
    @ApiVersion(1)
    public String saveOrUpdateMeetingInfo(HttpServletRequest request){
        try {
        //获取参数
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
        }
        //判断参数是否为空
        if (bean == null || fse == null) {
            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
        }
            FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
        HashMap hashMap = conferenceManagerService.saveOrUpdateMeetingInfo(fse);
        return OK(hashMap);
        }  catch (BaseException e) {
            e.printStackTrace();
            return this.error(e.getCode(), e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            return this.error(SystemCode.CONFERENCE_ROOM_GET_FIAL.getValue(), SystemCode.CONFERENCE_ROOM_GET_FIAL.getText() + e.getMessage());
        }
    }
@@ -519,13 +412,8 @@
    public void getQrCode(HttpServletRequest request, HttpServletResponse response) throws IOException, WriterException {
        //获取参数
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
            if(fse!=null &&  !StringUtils.isEmpty(fse.getString("uuid"))){
        FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
        if(!StringUtils.isEmpty(fse.getString("uuid"))){
                String uuid = fse.getString("uuid");
                // 设置响应流信息
                response.setContentType("image/jpg");
@@ -548,9 +436,6 @@
           }
        }
    }
    /**
     * 预约会议取消开启功能
     * @param request
@@ -560,16 +445,7 @@
    @ApiVersion(1)
    public  String CancelAndStart(HttpServletRequest request){
        //获取参数
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
        }
        //判断参数是否为空
        if (bean == null || fse == null) {
            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
        }
        FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
        conferenceManagerService.CancelAndStart(fse);
        return OK();
    }
@@ -585,16 +461,7 @@
    @ApiVersion(1)
    public  String ConferenceSign(HttpServletRequest request) throws ParseException {
        //获取参数
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
        }
        //判断参数是否为空
        if (bean == null || fse == null) {
            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
        }
        FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
        String s = conferenceManagerService.ConferenceSign(fse);
        return OK(s);
    }
@@ -608,20 +475,9 @@
    @PostMapping("/get_signOrVisit_info/{version}")
    @ApiVersion(1)
    public String getSignOrVisitInfo(HttpServletRequest request){
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
        }
        //判断参数是否为空
        if (bean == null || fse == null) {
            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
        }
        FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
        HashMap signInfo = conferenceManagerService.getSignOrVisitInfo(fse);
        return OK(signInfo);
    }
    /**
@@ -632,20 +488,8 @@
    @PostMapping("/sendMsg/{version}")
    @ApiVersion(1)
    public String sendMsg(HttpServletRequest request){
        FieldSetEntity fse = null;
        Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
        if (bean != null) {
            RequestParameterEntity reqp = (RequestParameterEntity) bean;
            fse = reqp.getFormData();
        }
        //判断参数是否为空
        if (bean == null || fse == null) {
            return this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText());
        }
        FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
        conferenceManagerService.sendMsg(fse);
        return OK();
    }
}
src/main/java/com/product/administration/service/ConferenceManagerService.java
@@ -36,6 +36,9 @@
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
@@ -214,8 +217,135 @@
    @Override
    @Transactional
    public List getKbData(FieldSetEntity fse) throws BaseException {
    public DataTableEntity getKanBanData(FieldSetEntity fse) {
        String queryStartDate = fse.getString("query_start_date");
        String queryEndDate = fse.getString("query_end_date");
        StringBuilder sbSql = new StringBuilder();
        sbSql.append("SELECT \n");
        sbSql.append("    A.meeting_room AS meeting_room_uuid, \n");
        sbSql.append("    start_time, \n");
        sbSql.append("    end_time, \n");
        sbSql.append("    DATE(start_time) as start_date, \n");
        sbSql.append("    DATE(end_time) as end_date, \n");
        sbSql.append("    TIME(start_time) as start_time_part, \n");
        sbSql.append("    TIME(end_time) as end_time_part, \n");
        sbSql.append("    HOUR(start_time) as start_hour, \n");
        sbSql.append("    HOUR(end_time) as end_hour, \n");
        sbSql.append("    DATEDIFF(end_time, start_time) AS diff_day, \n");
        sbSql.append("    (SELECT room_name FROM product_oa_conference_room_config WHERE uuid = A.meeting_room) as meeting_room \n");
        sbSql.append("FROM product_oa_conference_apply A \n");
        sbSql.append("WHERE (end_time >= ? AND start_time <= ?)");
        DataTableEntity dtRecord = baseDao.listTable(sbSql.toString(), new Object[] {queryStartDate, queryEndDate + " 23:59:59"});
        DataTableEntity dtRoom = baseDao.listTable(CmnConst.PRODUCT_OA_CONFERENCE_ROOM_CONFIG, "");
        // 初始化会议室记录
        Map<String, FieldSetEntity> roomRecord = new HashMap<>();
        for (int i = 0; i < dtRoom.getRows(); i++) {
            FieldSetEntity fseRoom = dtRoom.getFieldSetEntity(i);
            FieldSetEntity fseRoomMeeting = new FieldSetEntity(CmnConst.PRODUCT_OA_CONFERENCE_APPLY);
            fseRoomMeeting.setValue("room_name", fseRoom.getString("room_name"));
            fseRoomMeeting.setValue("room_uuid", fseRoom.getString("uuid"));
            roomRecord.put(fseRoom.getString("room_name"), fseRoomMeeting);
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate queryStart = LocalDate.parse(queryStartDate, formatter);
        LocalDate queryEnd = LocalDate.parse(queryEndDate, formatter);
        // 处理会议记录
        for (int i = 0; i < dtRecord.getRows(); i++) {
            FieldSetEntity record = dtRecord.getFieldSetEntity(i);
            String meetingRoom = record.getString("meeting_room");
            if (!roomRecord.containsKey(meetingRoom)) continue;
            FieldSetEntity roomMeeting = roomRecord.get(meetingRoom);
            String startDateStr = record.getString("start_date");
            String endDateStr = record.getString("end_date");
            String startTime = record.getString("start_time_part");
            String endTime = record.getString("end_time_part");
            int startHour = record.getInteger("start_hour");
            int endHour = record.getInteger("end_hour");
            int diffDay = record.getInteger("diff_day");
            LocalDate startDate = LocalDate.parse(startDateStr, formatter);
            LocalDate endDate = LocalDate.parse(endDateStr, formatter);
            if (diffDay > 0) {
                // 跨天会议 - 处理每一天
                LocalDate currentDate = startDate.isBefore(queryStart) ? queryStart : startDate;
                LocalDate lastDate = endDate.isAfter(queryEnd) ? queryEnd : endDate;
                while (!currentDate.isAfter(lastDate)) {
                    DayOfWeek dayOfWeek = currentDate.getDayOfWeek();
                    boolean isFirstDay = currentDate.equals(startDate);
                    boolean isLastDay = currentDate.equals(endDate);
                    if (isFirstDay) {
                        // 开始日
                        if (startHour < 12) {
                            // 上午开始,拆分成上午段和下午全天
                            addTimeSlot(roomMeeting, dayOfWeek + "_AM", startTime + "-12:00:00");
                            addTimeSlot(roomMeeting, dayOfWeek + "_PM", "12:00:00-00:00:00");
                        } else {
                            // 下午开始,只有下午段
                            addTimeSlot(roomMeeting, dayOfWeek + "_PM", startTime + "-00:00:00");
                        }
                    } else if (isLastDay) {
                        // 结束日
                        // 上午全天
                        addTimeSlot(roomMeeting, dayOfWeek + "_AM", "00:00:00-12:00:00");
                        if (endHour >= 12) {
                            // 结束在下午,拆分成上午全天和下午段
                            addTimeSlot(roomMeeting, dayOfWeek + "_PM", "12:00:00-" + endTime);
                        }
                    } else {
                        // 中间日 - 全天
                        addTimeSlot(roomMeeting, dayOfWeek + "_AM", "00:00:00-12:00:00");
                        addTimeSlot(roomMeeting, dayOfWeek + "_PM", "12:00:00-00:00:00");
                    }
                    currentDate = currentDate.plusDays(1);
                }
            } else {
                // 单天会议
                LocalDate date = LocalDate.parse(startDateStr, formatter);
                DayOfWeek dayOfWeek = date.getDayOfWeek();
                if (startHour < 12 && endHour > 12) {
                    // 跨上下午的会议,拆分成上午段和下午段
                    addTimeSlot(roomMeeting, dayOfWeek + "_AM", startTime + "-12:00:00");
                    addTimeSlot(roomMeeting, dayOfWeek + "_PM", "12:00:00-" + endTime);
                } else if (startHour < 12) {
                    // 纯上午会议
                    addTimeSlot(roomMeeting, dayOfWeek + "_AM", startTime + "-" + endTime);
                } else {
                    // 纯下午会议
                    addTimeSlot(roomMeeting, dayOfWeek + "_PM", startTime + "-" + endTime);
                }
            }
        }
        DataTableEntity dtKanBan = new DataTableEntity();
        for (FieldSetEntity fseKanban : roomRecord.values()) {
            dtKanBan.addFieldSetEntity(fseKanban);
        }
        return dtKanBan;
    }
    private void addTimeSlot(FieldSetEntity roomMeeting, String field, String timeSlot) {
        String existing = roomMeeting.getString(field);
        if (StringUtils.isEmpty(existing)) {
            roomMeeting.setValue(field, timeSlot);
        } else {
            roomMeeting.setValue(field, existing + "," + timeSlot);
        }
    }
    @Override
    @Transactional
    public List getkbData(FieldSetEntity fse) throws BaseException {
        List<Object>param=new ArrayList<>();
        String meeting_date= fse.getString("meeting_date");
        String meeting_date_end= fse.getString("meeting_date_end");
@@ -232,11 +362,8 @@
                }else {
                    replace_meeting_resource=replace_meeting_resource+"y.meeting_resource like '%"+split[i]+"%'";
                }
            }
        }
        StringBuilder bs=new StringBuilder();
        bs.append(" SELECT DISTINCT  g.room_name,g.uuid as meet_room_uuid,DATE_FORMAT(y.start_time, \"%d-%m-%Y %H:%i\")  start_time_format,DATE_FORMAT(y.end_time, \"%d-%m-%Y %H:%i\")  end_time_format,y.* ");
        bs.append(" FROM product_oa_conference_room_config g");
@@ -329,8 +456,8 @@
    @Override
    public List getMeetingDetails(FieldSetEntity fse) throws BaseException {
        String meeting_room = fse.getString("meeting_room");
        String meeting_date = fse.getString("meeting_date");
        String meeting_date_end = fse.getString("meeting_date_end");
        String meeting_start_date = fse.getString("meeting_start_date");
        String meeting_end_date = fse.getString("meeting_end_date");
        String meeting_resource = fse.getString("meeting_resource");
        String replace_meeting_resource="";
        if(!StringUtils.isEmpty(meeting_resource)){
@@ -342,16 +469,13 @@
                }else {
                    replace_meeting_resource=replace_meeting_resource+"T1.meeting_resource like '%"+split[i]+"%'";
                }
            }
        }
        if(!StringUtils.isEmpty(meeting_room)&&!StringUtils.isEmpty(meeting_date)&&!StringUtils.isEmpty(meeting_date_end)){
        if(!StringUtils.isEmpty(meeting_room)&&!StringUtils.isEmpty(meeting_start_date)&&!StringUtils.isEmpty(meeting_end_date)){
            List<Object>param=new ArrayList<>();
            param.add(meeting_room);
            param.add(meeting_date);
            param.add(meeting_date_end);
            param.add(meeting_start_date);
            param.add(meeting_end_date);
            StringBuilder sb=new StringBuilder();
            sb.append(" SELECT b.uuid,DATE_FORMAT(b.start_time, \"%Y-%m-%d\")  start_time,b.start_time start_time1,b.end_time,b.meeting_topic,b.status,b.record_man as record_man_uuid, ");
            sb.append(" (select user_name from product_sys_users where user_id=b.record_man) as record_man,");
src/main/java/com/product/administration/service/ide/IConferenceManagerService.java
@@ -37,7 +37,9 @@
    boolean delConferenceApply(FieldSetEntity fse)throws BaseException;
    List getKbData(FieldSetEntity fse)throws  BaseException;
    List getkbData(FieldSetEntity fse)throws  BaseException;
    DataTableEntity getKanBanData(FieldSetEntity fse)throws  BaseException;
    List getMeetingDetails(FieldSetEntity fse)throws  BaseException;