1、会议室预约记录排序; 待审核、待开始: 日期正序,时间正序,会议编号正序;其他:日期倒序,时间正序,会议编号正序。

2、会议开始前提醒 2小时更改为提前1小时。
3、向音控人员和服务人员 发送会议开始前提醒,会议取消提醒
This commit is contained in:
lujiang 2025-05-27 20:16:27 +08:00
parent aca1e9452d
commit 951c0fec06
8 changed files with 57 additions and 31 deletions

View File

@ -434,6 +434,7 @@ public class MeetingReservationController extends BaseController {
* capacityNum容纳人数精确查询 * capacityNum容纳人数精确查询
* status预约状态精确查询 * status预约状态精确查询
* filterDate预约日期查询以预约开始时间为准查询指定日期的所有预约 * filterDate预约日期查询以预约开始时间为准查询指定日期的所有预约
* startDate,endDate 日期范围筛选成对出现
* sort,排序 create 以创建时间倒序排列start 以预约会议开始时间倒序排列默认 * sort,排序 create 以创建时间倒序排列start 以预约会议开始时间倒序排列默认
* *
*/ */
@ -443,6 +444,13 @@ public class MeetingReservationController extends BaseController {
startPage(); startPage();
Long userId = getLoginStaffId(); Long userId = getLoginStaffId();
meetingRecordVo.setUserId(userId); meetingRecordVo.setUserId(userId);
if (StringUtils.isNotBlank(meetingRecordVo.getStartDate()) && StringUtils.isNotBlank(meetingRecordVo.getEndDate()) && meetingRecordVo.getStartDate().length() == 10 && meetingRecordVo.getEndDate().length() == 10) {
meetingRecordVo.setStartDate(meetingRecordVo.getStartDate() + " 00:00:00");
meetingRecordVo.setEndDate(meetingRecordVo.getEndDate() + " 23:59:59");
} else {
meetingRecordVo.setStartDate(null);
meetingRecordVo.setEndDate(null);
}
return result(meetingReservationService.selectMeetingReservationList(meetingRecordVo)); return result(meetingReservationService.selectMeetingReservationList(meetingRecordVo));
} }

View File

@ -1,6 +1,5 @@
package com.ics.admin.service.impl; package com.ics.admin.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ics.admin.mapper.MeetingStatsMapper; import com.ics.admin.mapper.MeetingStatsMapper;
import com.ics.admin.service.IMeetingStatsService; import com.ics.admin.service.IMeetingStatsService;
@ -105,19 +104,19 @@ public class IMeetingStatsServiceImpl implements IMeetingStatsService {
List<Long> zs = new ArrayList<>(); List<Long> zs = new ArrayList<>();
List<MRStatsVo> list = meetingStatsMapper.roomRankStats(start, end); List<MRStatsVo> list = meetingStatsMapper.roomRankStats(start, end);
System.out.println("会议室使用排名原始数据: " + list.size() + ""); // System.out.println("会议室使用排名原始数据: " + list.size() + "");
for (MRStatsVo mrStatsVo : list) { for (MRStatsVo mrStatsVo : list) {
System.out.println("会议室: " + mrStatsVo.getName() + // System.out.println("会议室: " + mrStatsVo.getName() +
", 楼层: " + mrStatsVo.getFloor() + // ", 楼层: " + mrStatsVo.getFloor() +
", 房间号: " + mrStatsVo.getRoomNum() + // ", 房间号: " + mrStatsVo.getRoomNum() +
", 使用次数: " + mrStatsVo.getValue()); // ", 使用次数: " + mrStatsVo.getValue());
y.add(mrStatsVo.getName()); y.add(mrStatsVo.getName());
zs.add(mrStatsVo.getValue()); zs.add(mrStatsVo.getValue());
} }
roomRank.put("y", y); roomRank.put("y", y);
roomRank.put("total", zs); roomRank.put("total", zs);
map.put("roomRank", roomRank); map.put("roomRank", roomRank);
System.out.println("处理后的会议室使用排名数据: y=" + y + ", total=" + zs); // System.out.println("处理后的会议室使用排名数据: y=" + y + ", total=" + zs);
} }
if (true) {//服务情况 if (true) {//服务情况
List<Map<String, Object>> serve = new ArrayList<>(); List<Map<String, Object>> serve = new ArrayList<>();

View File

@ -22,6 +22,7 @@ import com.ics.admin.utils.MeetingRemindContent;
import com.ics.admin.utils.MrOperate; import com.ics.admin.utils.MrOperate;
import com.ics.admin.vo.MeetingRecordVo; import com.ics.admin.vo.MeetingRecordVo;
import com.ics.admin.vo.MeetingRoomVo; import com.ics.admin.vo.MeetingRoomVo;
import com.ics.admin.vo.MeetingWaiterVo;
import com.ics.common.core.domain.IcsCustomerStaff; import com.ics.common.core.domain.IcsCustomerStaff;
import com.ics.common.utils.DateUtils; import com.ics.common.utils.DateUtils;
import com.ics.common.utils.StringUtils; import com.ics.common.utils.StringUtils;
@ -358,6 +359,15 @@ public class MeetingReservationServiceImpl implements IMeetingReservationService
String.format(meetingRemindContent.getMu2(), remindContent, content), currentUserId, now, "1") String.format(meetingRemindContent.getMu2(), remindContent, content), currentUserId, now, "1")
); );
} }
//会议取消服务人员音控会务服务都有--start
List<MeetingWaiterVo> waiters = meetingWaiterService.selectMeetingWaiterList(meetingReservation.getId());
for (MeetingWaiterVo meetingWaiterVo : waiters) {
list.add(
new RepairRemind(1, meetingReservation.getId(), meetingWaiterVo.getUserId(),
String.format(meetingRemindContent.getMu2(), remindContent, content), currentUserId, now, "1")
);
}
//会议取消服务人员音控会务服务都有--end
} }
if (status == 3) {//驳回 if (status == 3) {//驳回
list.add( list.add(
@ -388,6 +398,15 @@ public class MeetingReservationServiceImpl implements IMeetingReservationService
new RepairRemind(1, meetingReservation.getId(), Long.valueOf(meetingReservation.getCreateBy()), new RepairRemind(1, meetingReservation.getId(), Long.valueOf(meetingReservation.getCreateBy()),
String.format(meetingRemindContent.getCu4(), remindContent), currentUserId, now, "1") String.format(meetingRemindContent.getCu4(), remindContent), currentUserId, now, "1")
); );
//会议开始前提醒服务人员音控会务服务都有--start
List<MeetingWaiterVo> waiters = meetingWaiterService.selectMeetingWaiterList(meetingReservation.getId());
for (MeetingWaiterVo meetingWaiterVo : waiters) {
list.add(
new RepairRemind(1, meetingReservation.getId(), meetingWaiterVo.getUserId(),
String.format(meetingRemindContent.getCu4(), remindContent), currentUserId, now, "1")
);
}
//会议开始前提醒服务人员音控会务服务都有--end
} }
return list; return list;
} }

View File

@ -97,13 +97,13 @@
<!-- 分页列表 --> <!-- 分页列表 -->
<select id="selectMeetingReservationList" parameterType="com.ics.admin.vo.MeetingRecordVo" resultType="com.ics.admin.vo.MeetingRecordVo"> <select id="selectMeetingReservationList" parameterType="com.ics.admin.vo.MeetingRecordVo" resultType="com.ics.admin.vo.MeetingRecordVo">
SELECT mr.id, sn, room_id, start, `end`, time_format, title, person_num, leader, booking_user_name, booking_user_phone, user_org_id, user_org, status, operate, mr.remark, mr.ext1, mr.ext2, mr.ext3, mr.create_time createTime,mr.update_time updateTime, SELECT mr.id, sn, room_id, start, `end`, time_format, title, person_num, leader, booking_user_name, booking_user_phone, user_org_id, user_org, status, operate, mr.remark, mr.ext1, mr.ext2, mr.ext3, mr.create_time createTime,mr.update_time updateTime,
floor_id, floor, name, type_id, type_name, device, room_num, area, capacity_num, content, enable, room.ext1 roomExt1, room.ext2 roomExt2, room.ext3 roomExt3, room.remark roomRemark floor_id, floor, name, type_id, type_name, device, room_num, area, capacity_num, content, enable, room.ext1 roomExt1, room.ext2 roomExt2, room.ext3 roomExt3, room.remark roomRemark
from ics_meeting_reservation mr inner join ics_meeting_room room on mr.room_id=room.id from ics_meeting_reservation mr inner join ics_meeting_room room on mr.room_id=room.id
<if test="role == 3"> <if test="role == 3">
inner join ics_meeting_waiter wa on mr.id=wa.rid inner join ics_meeting_waiter wa on mr.id=wa.rid
</if> </if>
where where
mr.delete_flag=0 and room.delete_flag=0 mr.delete_flag=0 and room.delete_flag=0
<if test="role == 3"> <if test="role == 3">
and wa.delete_flag=0 and wa.user_id=#{userId} and wa.delete_flag=0 and wa.user_id=#{userId}
</if> </if>
@ -119,23 +119,23 @@
<if test="device != null and device != ''"> AND room.device LIKE CONCAT('%', #{device}, '%')</if> <if test="device != null and device != ''"> AND room.device LIKE CONCAT('%', #{device}, '%')</if>
<if test="capacityNum != null"> AND capacity_num &lt;= #{capacityNum}</if> <if test="capacityNum != null"> AND capacity_num &lt;= #{capacityNum}</if>
<if test="status != null"> AND status = #{status}</if> <if test="status != null"> AND status = #{status}</if>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''"> <if test="filterDate != null and filterDate != ''"> AND start LIKE CONCAT(#{filterDate}, '%')</if>
AND (start &gt;= CONCAT(#{startDate}, ' 00:00:00') AND start &lt;= CONCAT(#{endDate}, ' 23:59:59'))
</if>
<if test="filterDate != null and filterDate != '' and (startDate == null or startDate == '')">
AND start LIKE CONCAT(#{filterDate}, '%')
</if>
<if test="ext1 != null and ext1 != ''"> AND mr.ext1 is null</if> <if test="ext1 != null and ext1 != ''"> AND mr.ext1 is null</if>
<if test="startDate != null and startDate != '' and endDate != null and endDate != ''">
AND start between #{startDate} AND #{endDate}
</if>
<choose> <choose>
<when test="sort != null and sort == 'create'"> order by mr.create_time desc,status</when> <when test="sort != null and sort == 'create'"> order by mr.create_time desc,status</when>
<otherwise> <otherwise>
/* 按距离当前日期的接近程度排序,最接近的在前面 */ <choose>
order by ABS(DATEDIFF(DATE(start), CURDATE())), <!-- 待开始、待审核按照日期正序排列,其他为倒序;时间都为正序,会议室编号都为正序,状态都为正序 -->
/* 按时间段早晚排序,最早的排在前面 */ <when test="status == 5 or status == 7">
TIME(start) ASC, order by start asc,room_num asc,status
/* 按会议室编号排序 */ </when>
room_num + 0 ASC, <otherwise>
status order by date(start) desc,time(start) ASC,room_num asc,status
</otherwise>
</choose>
</otherwise> </otherwise>
</choose> </choose>
</select> </select>
@ -156,11 +156,11 @@
</if> </if>
</select> </select>
<!-- 即将开始的会议预约,开始时间小于2小时预约,只提醒一次 --> <!-- 即将开始的会议预约,开始时间小于1小时预约,只提醒一次 -->
<select id="getSoonMeetingReservation" resultMap="MeetingReservationResult"> <select id="getSoonMeetingReservation" resultMap="MeetingReservationResult">
<include refid="selectMeetingReservationVo"/> <include refid="selectMeetingReservationVo"/>
<![CDATA[ <![CDATA[
WHERE delete_flag = 0 and status=7 and TIMESTAMPDIFF(MINUTE,now(),start) <= 120 and TIMESTAMPDIFF(MINUTE,now(),start) >= 115 WHERE delete_flag = 0 and status=7 and TIMESTAMPDIFF(MINUTE,now(),start) <= 60 and TIMESTAMPDIFF(MINUTE,now(),start) >= 55
]]> ]]>
</select> </select>
<!-- 审核通过的会议预约变成进行中 --> <!-- 审核通过的会议预约变成进行中 -->

View File

@ -69,7 +69,7 @@
(select ms.value value,mr.id id (select ms.value value,mr.id id
from ics_meeting_serve ms,ics_meeting_reservation mr where ms.rid=mr.id and ms.delete_flag=0 and mr.delete_flag=0 and mr.status>7 and mr.start between #{start} and #{end} from ics_meeting_serve ms,ics_meeting_reservation mr where ms.rid=mr.id and ms.delete_flag=0 and mr.delete_flag=0 and mr.status>7 and mr.start between #{start} and #{end}
) zj on type.dict_value=zj.value ) zj on type.dict_value=zj.value
where type.dict_type='mm_service' and type.status=0 group by type.dict_label, type.dict_sort order by type.dict_sort where type.dict_type='mm_service' and type.status=0 group by type.dict_label order by type.dict_sort
]]> ]]>
</select> </select>
@ -82,7 +82,7 @@
and mr.status>7 and mr.start between #{start} and #{end}) jl and mr.status>7 and mr.start between #{start} and #{end}) jl
on type.dict_value=jl.typeid on type.dict_value=jl.typeid
where type.dict_type='mm_type' and type.status=0 where type.dict_type='mm_type' and type.status=0
group by type.dict_label, type.dict_sort order by type.dict_sort group by type.dict_label order by type.dict_sort
]]> ]]>
</select> </select>

View File

@ -25,7 +25,7 @@ public class MyParkLineHandler implements TenantLineHandler {
"ics_apply_settle_file", "ics_apply_move_in_file", "ics_activity","ics_customer_staff","ics_customer","tb_customer_ticket","tb_reservation","tb_reservation_person", "ics_apply_settle_file", "ics_apply_move_in_file", "ics_activity","ics_customer_staff","ics_customer","tb_customer_ticket","tb_reservation","tb_reservation_person",
"tb_room_content","tb_room_item","tb_room_item_by_room","tb_room_serve_by_room","tb_room_serve","tb_equipment","tb_staff_customer", "tb_room_content","tb_room_item","tb_room_item_by_room","tb_room_serve_by_room","tb_room_serve","tb_equipment","tb_staff_customer",
"tb_room_equipment","tb_room_record","tb_room_serve","tb_showroom","tb_showroom_record","tb_ticket","tb_user_equipment","tb_visitor_person", "tb_room_equipment","tb_room_record","tb_room_serve","tb_showroom","tb_showroom_record","tb_ticket","tb_user_equipment","tb_visitor_person",
"ics_repair","ics_repair_remind","ics_repair_address_floor","ics_meeting_reservation","ics_meeting_room" "ics_repair","ics_repair_remind","ics_repair_address_floor","ics_meeting_reservation","ics_meeting_room","ics_meeting_waiter"
}; };
/** /**

View File

@ -25,7 +25,7 @@ public class MyTenantLineHandler implements TenantLineHandler {
"ics_apply_settle_file", "ics_apply_move_in_file", "ics_activity","ics_customer_staff","ics_customer","tb_customer_ticket","tb_reservation","tb_reservation_person", "ics_apply_settle_file", "ics_apply_move_in_file", "ics_activity","ics_customer_staff","ics_customer","tb_customer_ticket","tb_reservation","tb_reservation_person",
"tb_room_content","tb_room_item","tb_room_item_by_room","tb_room_serve_by_room","tb_room_serve","tb_equipment","tb_staff_customer", "tb_room_content","tb_room_item","tb_room_item_by_room","tb_room_serve_by_room","tb_room_serve","tb_equipment","tb_staff_customer",
"tb_room_equipment","tb_room_record","tb_room_serve","tb_showroom","tb_showroom_record","tb_ticket","tb_user_equipment","tb_visitor_person", "tb_room_equipment","tb_room_record","tb_room_serve","tb_showroom","tb_showroom_record","tb_ticket","tb_user_equipment","tb_visitor_person",
"ics_repair","ics_repair_remind","ics_repair_address_floor","ics_meeting_reservation","ics_meeting_room" "ics_repair","ics_repair_remind","ics_repair_address_floor","ics_meeting_reservation","ics_meeting_room","ics_meeting_waiter"
}; };
/** /**

View File

@ -20,7 +20,7 @@ spring:
# url: jdbc:mysql://192.168.0.50:3306/dbd-meeting?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # url: jdbc:mysql://192.168.0.50:3306/dbd-meeting?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
# username: root # username: root
# password: boyuekeji2023 # password: boyuekeji2023
url: jdbc:mysql://222.184.49.22:3306/shoot-hand?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://222.184.49.22:3306/shoot-hand-prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root username: root
password: boyue1!Z password: boyue1!Z
# 从库数据源 # 从库数据源