提交 1ef8cb83 作者: 张开石

1、添加会议纪要使用情况统计接口

父级 7728651c
package com.cmeeting.controller;
import com.cmeeting.service.MeetingInfoService;
import com.cmeeting.service.MeetingRecordTemplateService;
import com.cmeeting.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.netty.http.server.HttpServerResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @Description
* @Author zhang kaishi
* @Date 2025/7/18 9:36
**/
@RestController
@RequestMapping("/statistics")
public class StatisticsController {
@Autowired
private MeetingRecordTemplateService meetingRecordTemplateService;
@Autowired
private MeetingInfoService meetingInfoService;
/**
* 纪要模板使用情况的统计
* @param searchValue 用户部门或工号
* @param createTimeStart 开始时间
* @param createTimeEnd 结束时间
* @return
*/
@GetMapping("/recordTemplateUsingInfo")
public R recordTemplateUsingInfo(String searchValue,
@RequestParam("createTimeStart") Date createTimeStart,
@RequestParam("createTimeEnd") Date createTimeEnd) {
List<Map<String, String>> list =meetingInfoService.statistics(searchValue, createTimeStart, createTimeEnd);
return R.ok(list);
}
}
...@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.vo.MeetingInfoVO; import com.cmeeting.vo.MeetingInfoVO;
import com.cmeeting.vo.TencentMeetingVO; import com.cmeeting.vo.TencentMeetingVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Map;
@Mapper @Mapper
public interface MeetingInfoMapper extends BaseMapper<MeetingInfo> { public interface MeetingInfoMapper extends BaseMapper<MeetingInfo> {
...@@ -16,6 +18,19 @@ public interface MeetingInfoMapper extends BaseMapper<MeetingInfo> { ...@@ -16,6 +18,19 @@ public interface MeetingInfoMapper extends BaseMapper<MeetingInfo> {
List<TencentMeetingVO.SimpleMeetingInfo> getAllMeetingIds(); List<TencentMeetingVO.SimpleMeetingInfo> getAllMeetingIds();
/**
* 统计
* @param startTime
* @param endTime
* @param dateList
* @return
*/
@MapKey("host_uid")
List<Map<String, String>> statistics(@Param("startTime") String startTime,
@Param("endTime") String endTime,
@Param("dateList") List<String> dateList);
// List<MeetingInfo> selectList(MeetingInfoVO vo); // List<MeetingInfo> selectList(MeetingInfoVO vo);
} }
\ No newline at end of file
...@@ -7,10 +7,12 @@ import com.cmeeting.ad.entity.SysUserSync; ...@@ -7,10 +7,12 @@ import com.cmeeting.ad.entity.SysUserSync;
import com.cmeeting.dto.PermissionCheckedDTO; import com.cmeeting.dto.PermissionCheckedDTO;
import com.cmeeting.dto.SysUserSyncDTO; import com.cmeeting.dto.SysUserSyncDTO;
import com.cmeeting.dto.UserDTO; import com.cmeeting.dto.UserDTO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
import java.util.Map;
@Mapper @Mapper
public interface SysUserSysMapper extends BaseMapper<SysUserSync> { public interface SysUserSysMapper extends BaseMapper<SysUserSync> {
...@@ -39,4 +41,12 @@ public interface SysUserSysMapper extends BaseMapper<SysUserSync> { ...@@ -39,4 +41,12 @@ public interface SysUserSysMapper extends BaseMapper<SysUserSync> {
Page<SysUserSyncDTO> selectByDeptId(@Param("deptIds") List<String> deptIds, @Param("tenantId") String tenantId, Page<SysUserSyncDTO> selectByDeptId(@Param("deptIds") List<String> deptIds, @Param("tenantId") String tenantId,
@Param("page") Page page, @Param("search") String search); @Param("page") Page page, @Param("search") String search);
/**
* 获取用户信息
* @param userIdList
* @return
*/
@MapKey("userId")
List<Map<String, String>> selectParamByUserIdList(@Param("userIdList") List<String> userIdList);
} }
...@@ -5,10 +5,24 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -5,10 +5,24 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.vo.MeetingInfoVO; import com.cmeeting.vo.MeetingInfoVO;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface MeetingInfoService extends IService<MeetingInfo> { public interface MeetingInfoService extends IService<MeetingInfo> {
IPage<MeetingInfo> getPage(MeetingInfoVO vo); IPage<MeetingInfo> getPage(MeetingInfoVO vo);
boolean updateRecordXml(MeetingInfoVO vo); boolean updateRecordXml(MeetingInfoVO vo);
boolean regenerateXml(MeetingInfoVO vo); boolean regenerateXml(MeetingInfoVO vo);
/**
* 统计
*
* @param searchValue 查询值
* @param createTimeStart 起始时间
* @param createTimeEnd 截止时间
* @return
*/
List<Map<String, String>> statistics(String searchValue, Date createTimeStart, Date createTimeEnd);
} }
...@@ -6,7 +6,8 @@ import cn.chatbot.openai.completion.chat.ChatMessageRole; ...@@ -6,7 +6,8 @@ import cn.chatbot.openai.completion.chat.ChatMessageRole;
import cn.chatbot.openai.completion.chat.Message; import cn.chatbot.openai.completion.chat.Message;
import cn.chatbot.openai.service.LLMService; import cn.chatbot.openai.service.LLMService;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
...@@ -24,14 +25,13 @@ import com.cmeeting.log.service.ProcessLogService; ...@@ -24,14 +25,13 @@ import com.cmeeting.log.service.ProcessLogService;
import com.cmeeting.mapper.primary.MeetingInfoMapper; import com.cmeeting.mapper.primary.MeetingInfoMapper;
import com.cmeeting.mapper.primary.MeetingRecordTemplateMapper; import com.cmeeting.mapper.primary.MeetingRecordTemplateMapper;
import com.cmeeting.mapper.primary.UserIdMapper; import com.cmeeting.mapper.primary.UserIdMapper;
import com.cmeeting.mapper.secondary.SysUserSysMapper;
import com.cmeeting.pojo.MeetingInfo; import com.cmeeting.pojo.MeetingInfo;
import com.cmeeting.pojo.MeetingRecordTemplate; import com.cmeeting.pojo.MeetingRecordTemplate;
import com.cmeeting.pojo.UserId; import com.cmeeting.pojo.UserId;
import com.cmeeting.service.MeetingInfoService; import com.cmeeting.service.MeetingInfoService;
import com.cmeeting.util.MinioUtils; import com.cmeeting.util.MinioUtils;
import com.cmeeting.vo.EmailPush;
import com.cmeeting.vo.MeetingInfoVO; import com.cmeeting.vo.MeetingInfoVO;
import com.deepoove.poi.XWPFTemplate;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.tencentcloudapi.wemeet.Client; import com.tencentcloudapi.wemeet.Client;
...@@ -47,8 +47,8 @@ import lombok.extern.slf4j.Slf4j; ...@@ -47,8 +47,8 @@ import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -61,7 +61,6 @@ import java.security.SecureRandom; ...@@ -61,7 +61,6 @@ import java.security.SecureRandom;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -92,6 +91,9 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti ...@@ -92,6 +91,9 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti
private MeetingInfoMapper meetingInfoMapper; private MeetingInfoMapper meetingInfoMapper;
@Resource @Resource
private UserIdMapper userIdMapper; private UserIdMapper userIdMapper;
@Autowired
private SysUserSysMapper sysUserSysMapper;
@Override @Override
public IPage<MeetingInfo> getPage(MeetingInfoVO vo) { public IPage<MeetingInfo> getPage(MeetingInfoVO vo) {
...@@ -252,6 +254,38 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti ...@@ -252,6 +254,38 @@ public class MeetingInfoServiceImpl extends ServiceImpl<MeetingInfoMapper, Meeti
} }
/** /**
* 统计
*
* @param searchValue 查询值
* @param createTimeStart 起始时间
* @param createTimeEnd 截止时间
* @return
*/
@Override
public List<Map<String, String>> statistics(String searchValue, Date createTimeStart, Date createTimeEnd) {
List<String> dateList = DateUtil.rangeToList(createTimeStart, createTimeEnd, DateField.DAY_OF_YEAR).stream()
.map(date -> DateUtil.format(date, "yyyy-MM-dd"))
.collect(Collectors.toList());
String startTime = DateUtil.format(createTimeStart, "yyyy-MM-dd");
String endTime = DateUtil.format(createTimeEnd, "yyyy-MM-dd");
List<Map<String, String>> list = meetingInfoMapper.statistics(startTime, endTime, dateList);
List<String> userIdList = list.stream().map(map -> map.get("userId")).collect(Collectors.toList());
List<Map<String, String>> userInfoList = sysUserSysMapper.selectParamByUserIdList(userIdList);
for (Map<String, String> map : list) {
String userId = map.get("userId");
userInfoList.stream().filter(userInfo -> userInfo.get("userId").equals(userId)).findFirst().ifPresent(userInfo -> {
map.put("name", userInfo.get("name"));
map.put("deptName", userInfo.get("deptName"));
});
}
// TODO 加和
return list;
}
/**
* 保存会议纪要相关的文件 * 保存会议纪要相关的文件
* @param content 大模型返回的不规则xml * @param content 大模型返回的不规则xml
* @param recordData 转录文本 * @param recordData 转录文本
......
...@@ -33,4 +33,29 @@ ...@@ -33,4 +33,29 @@
<select id="getAllMeetingIds" resultType="com.cmeeting.vo.TencentMeetingVO$SimpleMeetingInfo"> <select id="getAllMeetingIds" resultType="com.cmeeting.vo.TencentMeetingVO$SimpleMeetingInfo">
select meeting_id,sub_meeting_id from cmt_meeting_info select meeting_id,sub_meeting_id from cmt_meeting_info
</select> </select>
<select id="statistics" resultType="java.util.Map">
SELECT
userid.wid as userId,
t.host_uid,
<foreach collection="dateList" item="d" separator=",">
MAX(CASE WHEN sync_time = #{d} THEN cnt ELSE 0 END) AS `${d}`
</foreach>
FROM (
SELECT
host_uid,
date_format(sync_time, '%Y-%m-%d') as sync_time,
SUM(CASE WHEN is_pushed = 1 THEN 1 ELSE 0 END) AS cnt
FROM
cmt_meeting_info
WHERE
date_format(sync_time, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
GROUP BY host_uid, date_format(sync_time, '%Y-%m-%d')
) AS t
join userid ON userid.tid COLLATE utf8mb4_general_ci = t.host_uid COLLATE utf8mb4_general_ci
GROUP BY t.host_uid, userid.wid
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -145,4 +145,24 @@ ...@@ -145,4 +145,24 @@
and (t1.user_id like concat('%',#{search},'%') or t1.name like concat('%',#{search},'%') or t1.nick_name like concat('%',#{search},'%')) and (t1.user_id like concat('%',#{search},'%') or t1.name like concat('%',#{search},'%') or t1.nick_name like concat('%',#{search},'%'))
</if> </if>
</select> </select>
<select id="selectParamByUserIdList" resultType="java.util.Map">
SELECT
sys_user_sync.user_id as userId,
sys_user_sync.`name`,
sys_user_sync_category.`name` as deptName
FROM
sys_user_sync,
sys_user_sync_category
<where>
and sys_user_sync.dept_id = sys_user_sync_category.dept_id
<if test="userIdList.size > 0">
and sys_user_sync.user_id in
<foreach item="userId" collection="userIdList" index="index" separator="," close=")" open="(">
#{userId}
</foreach>
</if>
</where>
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论