diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingStatsController.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingStatsController.java new file mode 100644 index 0000000..d9286d9 --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/controller/MeetingStatsController.java @@ -0,0 +1,104 @@ +package com.ics.admin.controller; + +import com.ics.admin.service.IMeetingStatsService; +import com.ics.common.core.domain.R; +import com.ics.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.wf.jwtp.annotation.RequiresPermissions; + +import java.util.Date; + +/** + * 会议室预约统计接口 + * created at 2024-9-29 16:15 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@RestController +@RequestMapping({"/admin/ms"}) +public class MeetingStatsController { + + @Autowired + private IMeetingStatsService meetingStatsService; + + /** + * 会议室统计 第一行 + * + * @param day 格式:2024-09-30 + * @return + * alreadyBooking, 已预约会议室数量 + * noBooking,未预约会议室数量 + * going,开会中会议室数量 + * free,空闲中会议室数量 + */ + @RequiresPermissions(value = {"mr:manage:operator"}) + @RequestMapping("roomStats") + public R roomStats(String day) { + return R.ok().put("data", meetingStatsService.roomStats(day)); + } + + /** + * 日历 第二行左 + * + * @param month 月份,格式:2024-09 + */ + @RequiresPermissions(value = {"mr:manage:operator"}) + @RequestMapping("calendar") + public R calendar(String month) { + return R.ok().put("data", meetingStatsService.calendar(month)); + } + + /** + * 会议状态 第二行右上 + * + * @return + * wait, 待开始会议数量 + * going,进行中会议数量 + * closed,已结束会议数量 + */ + @RequiresPermissions(value = {"mr:manage:operator"}) + @RequestMapping("meetingStats") + public R meetingStats() { + return R.ok().put("data", meetingStatsService.meetingStats()); + } + + /** + * 会议待办 第二行右下 + */ + @RequiresPermissions(value = {"mr:manage:operator"}) + @RequestMapping("meetingAudit") + public R meetingAudit() { + return R.ok().put("data", meetingStatsService.meetingAudit()); + } + + /** + * 图表统计数据 + * + * @param startDate 统计数据开始时间,日期格式示例:2024-08-23 + * @param endDate 统计数据结束时间,日期格式示例:2024-09-23 + * @return + * roomRank,会议室使用排名 + * serve,服务情况 + * roomType,会议室形式统计 + * orgMeeting,部门开会情况--top10 + * everyDay,开会情况--按天--top20 + */ + @RequiresPermissions(value = {"mr:manage:operator"}) + @RequestMapping("chartStats") + public R chartStats(String startDate, String endDate) { + Date start, end; + try { + start = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, startDate + " 00:00:00"); + end = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, endDate + " 23:59:59"); + } catch (Exception e) { + return R.error("参数错误"); + } + return R.ok().put("data", meetingStatsService.chartStats(start, end)); + } + + +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingStatsMapper.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingStatsMapper.java new file mode 100644 index 0000000..34c016b --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/mapper/MeetingStatsMapper.java @@ -0,0 +1,78 @@ +package com.ics.admin.mapper; + +import com.ics.admin.vo.MRStatsVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +@Mapper +public interface MeetingStatsMapper { + + /** + * 会议室统计 第一行 + * @param day 格式:2024-09-30 + * @return + */ + List roomStats(@Param("day") String day); + + /** + * 日历 第二行左 + */ + List calendar(@Param("month") String month); + + /** + * 会议状态 第二行右上 + */ + List meetingStats(); + + /** + * 会议待办 第二行右下 + */ + List meetingAudit(); + + /** + * 会议室使用排名 + * + * @param start 开始时间范围 + * @param end 结束时间范围 + * @return + */ + List roomRankStats(@Param("start") Date start, @Param("end") Date end); + + /** + * 服务情况 + * + * @param start 开始时间范围 + * @param end 结束时间范围 + * @return + */ + List serveStats(@Param("start") Date start, @Param("end") Date end); + + /** + * 会议室形式统计 + * + * @param start 开始时间范围 + * @param end 结束时间范围 + * @return + */ + List roomTypeStats(@Param("start") Date start, @Param("end") Date end); + + /** + * 部门开会情况 top10 + * + * @param start 开始时间范围 + * @param end 结束时间范围 + * @return + */ + List orgMeetingStats(@Param("start") Date start, @Param("end") Date end); + /** + * 开会情况 top20 + * + * @param start 开始时间范围 + * @param end 结束时间范围 + * @return + */ + List everyDayStats(@Param("start") Date start, @Param("end") Date end); +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingStatsService.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingStatsService.java new file mode 100644 index 0000000..4fe50c7 --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/IMeetingStatsService.java @@ -0,0 +1,43 @@ +package com.ics.admin.service; + +import com.alibaba.fastjson.JSONObject; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +public interface IMeetingStatsService { + + /** + * 会议室统计 第一行 + * @param day 格式:2024-09-30 + * @return + */ + Map roomStats(String day); + + /** + * 日历 第二行左 + * @param month 月份,格式:2024-09 + */ + Map> calendar(String month); + + /** + * 会议状态 第二行右上 + */ + Map meetingStats(); + + /** + * 会议待办 第二行右下 + */ + List> meetingAudit(); + /** + * 图表统计 + * + * @param start 开始时间范围 + * @param end 结束时间范围 + * @return + */ + Map chartStats(Date start, Date end); + + +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/IMeetingStatsServiceImpl.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/IMeetingStatsServiceImpl.java new file mode 100644 index 0000000..889a9d1 --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/service/impl/IMeetingStatsServiceImpl.java @@ -0,0 +1,166 @@ +package com.ics.admin.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.ics.admin.mapper.MeetingStatsMapper; +import com.ics.admin.service.IMeetingStatsService; +import com.ics.admin.vo.MRStatsVo; +import com.ics.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * created at 2024-9-29 16:32 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@Service +public class IMeetingStatsServiceImpl implements IMeetingStatsService { + @Autowired + private MeetingStatsMapper meetingStatsMapper; + + @Override + public Map roomStats(String day) { + Map map = new HashMap<>(); + List list = meetingStatsMapper.roomStats(day); + if (list.size() > 0) { + MRStatsVo mrStatsVo = list.get(0); + map.put("alreadyBooking", mrStatsVo.getBooking()); + map.put("noBooking", mrStatsVo.getZs() - mrStatsVo.getBooking()); + map.put("going", mrStatsVo.getGoing()); + map.put("free", mrStatsVo.getZs() - mrStatsVo.getGoing()); + } + return map; + } + + @Override + public Map> calendar(String month) { + Map> map = new HashMap<>(); + Date date = DateUtils.dateTime(DateUtils.YYYY_MM_DD, month + "-01"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < lastDay; i++) { + if (i > 0) calendar.add(Calendar.DATE, 1); + String key = DateUtils.dateTime(calendar.getTime()); + map.put(key, new ArrayList<>()); + } + List datas = meetingStatsMapper.calendar(month); + for (MRStatsVo mrStatsVo : datas) { + String key = mrStatsVo.getName(); + JSONObject one = new JSONObject(); + one.put("id", mrStatsVo.getId()); + one.put("sn", mrStatsVo.getSn()); + one.put("title", mrStatsVo.getTitle()); + one.put("time", mrStatsVo.getTime()); + one.put("org", mrStatsVo.getOrg()); + map.get(key).add(one); + } + return map; + } + + @Override + public Map meetingStats() { + Map map = new HashMap<>(); + List list = meetingStatsMapper.meetingStats(); + if (list.size() > 0) { + MRStatsVo mrStatsVo = list.get(0); + map.put("wait", mrStatsVo.getWait()); + map.put("going", mrStatsVo.getGoing()); + map.put("closed", mrStatsVo.getClosed()); + } + return map; + } + + @Override + public List> meetingAudit() { + List> list = new ArrayList<>(); + List datas = meetingStatsMapper.meetingAudit(); + for (MRStatsVo mrStatsVo : datas) { + Map map = new HashMap<>(); + map.put("id", mrStatsVo.getId()); + map.put("title", mrStatsVo.getTitle()); + map.put("time", mrStatsVo.getTime()); + map.put("org", mrStatsVo.getOrg()); + list.add(map); + } + return list; + } + + @Override + public Map chartStats(Date start, Date end) { + Map map = new HashMap<>(); + if (true) { //会议室使用排名 + Map roomRank = new HashMap<>(); + List y = new ArrayList<>(); + List zs = new ArrayList<>(); + List list = meetingStatsMapper.roomRankStats(start, end); + for (MRStatsVo mrStatsVo : list) { + y.add(mrStatsVo.getName()); + zs.add(mrStatsVo.getValue()); + } + roomRank.put("y", y); + roomRank.put("total", zs); + map.put("roomRank", roomRank); + } + if (true) {//服务情况 + List> serve = new ArrayList<>(); + List list = meetingStatsMapper.serveStats(start, end); + for (MRStatsVo mrStatsVo : list) { + serve.add(getMap(mrStatsVo.getName(), mrStatsVo.getValue())); + } + map.put("serve", serve); + } + if (true) {//会议室形式统计 + List> roomType = new ArrayList<>(); + List list = meetingStatsMapper.roomTypeStats(start, end); + for (MRStatsVo mrStatsVo : list) { + roomType.add(getMap(mrStatsVo.getName(), mrStatsVo.getValue())); + } + map.put("roomType", roomType); + } + if (true) {//部门开会情况 + Map orgMeeting = new HashMap<>(); + List x = new ArrayList<>(); + List total = new ArrayList<>(); + List list = meetingStatsMapper.orgMeetingStats(start, end); + for (MRStatsVo mrStatsVo : list) { + x.add(mrStatsVo.getName()); + total.add(mrStatsVo.getValue()); + } + orgMeeting.put("x", x); + orgMeeting.put("total", total); + map.put("orgMeeting", orgMeeting); + } + if (true) {//开会情况--按天--top20 + Map everyDay = new HashMap<>(); + List x = new ArrayList<>(); + List total = new ArrayList<>(); + List list = meetingStatsMapper.everyDayStats(start, end); + for (MRStatsVo mrStatsVo : list) { + x.add(mrStatsVo.getName()); + total.add(mrStatsVo.getValue()); + } + everyDay.put("x", x); + everyDay.put("total", total); + map.put("everyDay", everyDay); + } + return map; + } + + private Map getMap(String name, Object value) { + Map map = new HashMap<>(); + map.put("name", name); + map.put("value", value); + return map; + } +} diff --git a/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MRStatsVo.java b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MRStatsVo.java new file mode 100644 index 0000000..3a944fd --- /dev/null +++ b/shoot-hand/ics-admin/src/main/java/com/ics/admin/vo/MRStatsVo.java @@ -0,0 +1,50 @@ +package com.ics.admin.vo; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * created at 2024-9-29 17:11 + * + * @author lujiang + * @version 1.0.0 + * @since 1.0.0 + */ +@Data +public class MRStatsVo implements Serializable { + private static final long serialVersionUID = -202409291712L; + + private String name; + + private Long value; + + @JsonIgnore + private Date start; + + @JsonIgnore + private Date end; + + //总数 + private Integer zs; + //预约数 + private Integer booking; + //进行中会议数量 + private Integer going; + + //待开始会议数量 + private Integer wait; + + //已结束会议数量 + private Integer closed; + + //---会议待办 + private Long id; + private String sn; + private String title; + private String time; + private String org; + +} diff --git a/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingStatsMapper.xml b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingStatsMapper.xml new file mode 100644 index 0000000..85f63cf --- /dev/null +++ b/shoot-hand/ics-admin/src/main/resources/mapper/admin/MeetingStatsMapper.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/shoot-hand/ics/2024/会议预约.eddx b/shoot-hand/ics/2024/会议预约.eddx index faae4b2..dec88a7 100644 Binary files a/shoot-hand/ics/2024/会议预约.eddx and b/shoot-hand/ics/2024/会议预约.eddx differ diff --git a/shoot-hand/ics/2024/会议预约.png b/shoot-hand/ics/2024/会议预约.png index ad132f7..38431d1 100644 Binary files a/shoot-hand/ics/2024/会议预约.png and b/shoot-hand/ics/2024/会议预约.png differ