Pārlūkot izejas kodu

im修改成异步发送 添加im发送明细报告

xgb 2 nedēļas atpakaļ
vecāks
revīzija
fe9d178997

+ 57 - 0
fs-company/src/main/java/com/fs/app/controller/im/FsImMsgSendLogController.java

@@ -0,0 +1,57 @@
+package com.fs.app.controller.im;
+
+import com.fs.app.service.param.FsImMsgSendLogRequest;
+import com.fs.app.service.param.FsImMsgSendLogResponse;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.im.domain.FsImMsgSendLog;
+import com.fs.im.service.IFsImMsgSendLogService;
+import com.github.pagehelper.PageHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * OpenIM 消息发送记录主表 Controller
+ */
+@RestController
+@RequestMapping("/app/im")
+public class FsImMsgSendLogController extends BaseController {
+
+    @Autowired
+    private IFsImMsgSendLogService fsImMsgSendLogService;
+
+    /**
+     * 查询 OpenIM 消息发送记录列表
+     */
+    @GetMapping("/listImMsgSendLog")
+    public TableDataInfo list(FsImMsgSendLogRequest request) {
+        PageHelper.startPage(request.getPageNum(), request.getPageSize());
+        List<FsImMsgSendLogResponse> list = fsImMsgSendLogService.selectFsImMsgSendLogInfoList(request);
+        return getDataTable(list);
+    }
+
+//    /**
+//     * 导出 OpenIM 消息发送记录列表
+//     */
+//    @GetMapping("/exportImMsgSendLog")
+//    public void export(HttpServletResponse response, FsImMsgSendLogRequest request) {
+//        List<FsImMsgSendLog> list = fsImMsgSendLogService.exportFsImMsgSendLog(request);
+//        ExcelUtil<FsImMsgSendLog> util = new ExcelUtil<>(FsImMsgSendLog.class);
+//        util.exportExcel(response, list, "OpenIM 消息发送记录");
+//    }
+//
+    /**
+     * 获取发送状态统计
+     */
+    @GetMapping("/getImMsgSendStatistics")
+    public R statistics(FsImMsgSendLogRequest request) {
+        return fsImMsgSendLogService.getFsImMsgSendStatistics(request);
+    }
+}

+ 65 - 0
fs-service/src/main/java/com/fs/app/service/param/FsImMsgSendLogRequest.java

@@ -0,0 +1,65 @@
+package com.fs.app.service.param;
+
+import com.fs.common.core.domain.BaseEntity;
+import com.fs.common.core.page.PageDomain;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * OpenIM 消息发送记录请求参数
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsImMsgSendLogRequest extends PageDomain {
+
+    /** 销售 ID */
+    private Long companyUserId;
+
+    /** 公司 ID */
+    private Long companyId;
+
+    /** 课程 ID */
+    private Long courseId;
+
+    /** 课程名称 */
+    private String courseName;
+
+    /** 视频 ID */
+    private Long videoId;
+
+    /** 视频标题 */
+    private String videoName;
+
+    /** 发送内容 */
+    private String sendTitle;
+
+    /** 预计发送开始时间 */
+    private String planSendStartTime;
+
+    /** 预计发送结束时间 */
+    private String planSendEndTime;
+
+    /** 发送类型(1-定时;2-实时) */
+    private Integer sendType;
+
+    /** 发送方式(1-APP;2-销售后台) */
+    private Integer sendMode;
+
+    /** 发送状态(1-已发送;2-待发送) */
+    private Integer sendStatus;
+
+    /** 执行状态 执行状态,0-正常;1-失败*/
+    private Integer status;
+
+    /** 消息类型(1-发课;2-催课) */
+    private Integer msgType;
+
+    /** 项目 ID */
+    private Long projectId;
+
+    /** 创建开始时间 */
+    private String createTimeStartTime;
+
+    /** 创建结束时间 */
+    private String createTimeEndTime;
+}

+ 78 - 0
fs-service/src/main/java/com/fs/app/service/param/FsImMsgSendLogResponse.java

@@ -0,0 +1,78 @@
+package com.fs.app.service.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * OpenIM 消息发送记录响应参数
+ */
+@Data
+public class FsImMsgSendLogResponse {
+
+    /** 发送记录 id */
+    private Long logId;
+
+    /** 用户 ID(从详情表获取) */
+    private Long userId;
+
+    /** 销售 id(发送人 id) */
+    private Long companyUserId;
+
+    /** 公司 id */
+    private Long companyId;
+
+    /** 课程 id */
+    private Long courseId;
+
+    /** 课程名称 */
+    private String courseName;
+
+    /** 视频 id */
+    private Long videoId;
+
+    /** 视频标题 */
+    private String videoName;
+
+    /** 项目 ID */
+    private Long projectId;
+
+    /** 发送内容 */
+    private String sendTitle;
+
+    /** 预计发送时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date planSendTime;
+
+    /** 发送类型,1-定时;2-实时 */
+    private Integer sendType;
+
+    /** 发送方式,1-app;2-销售后台 */
+    private Integer sendMode;
+
+    /** 是否催课,1-是;0-否 */
+    private Boolean isUrgeCourse;
+
+    /** 消息类型,1-发课;2-催课 */
+    private Integer msgType;
+
+    /** 发送状态,1-已发送;2-待发送 */
+    private Integer sendStatus;
+
+    /** 执行状态,0-正常;1-失败 */
+    private Integer status;
+
+    /** 重试次数 */
+    private Integer count;
+
+    /** 执行结果 */
+    private String resultMessage;
+
+    /** 异常信息 */
+    private String exceptionInfo;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 23 - 0
fs-service/src/main/java/com/fs/app/service/param/FsImMsgSendLogStatisticsResponse.java

@@ -0,0 +1,23 @@
+package com.fs.app.service.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * OpenIM 消息发送记录响应参数
+ */
+@Data
+public class FsImMsgSendLogStatisticsResponse {
+    // 总数
+    private Long total;
+    // 已发送
+    private Long sent;
+    // 等待中
+    private Long pending;
+    // 异常
+    private Long failed;
+
+
+}

+ 6 - 0
fs-service/src/main/java/com/fs/im/mapper/FsImMsgSendLogMapper.java

@@ -4,6 +4,9 @@ import java.util.List;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.app.service.param.FsImMsgSendLogRequest;
+import com.fs.app.service.param.FsImMsgSendLogResponse;
+import com.fs.app.service.param.FsImMsgSendLogStatisticsResponse;
 import com.fs.course.vo.newfs.FsImSendLogVO;
 import com.fs.im.domain.FsImMsgSendLog;
 import org.apache.ibatis.annotations.Param;
@@ -72,4 +75,7 @@ public interface FsImMsgSendLogMapper extends BaseMapper<FsImMsgSendLog>{
 
     List<FsImMsgSendLog> selectSendLogListByDetailId(@Param("params") Map<String, Object> params);
 
+    List<FsImMsgSendLogResponse> selectFsImMsgSendLogInfoList(FsImMsgSendLogRequest request);
+
+    FsImMsgSendLogStatisticsResponse getFsImMsgSendStatistics(FsImMsgSendLogRequest request);
 }

+ 32 - 0
fs-service/src/main/java/com/fs/im/service/IFsImMsgSendLogService.java

@@ -4,6 +4,9 @@ import java.util.List;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.app.service.param.FsImMsgSendLogRequest;
+import com.fs.app.service.param.FsImMsgSendLogResponse;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.course.vo.newfs.FsImSendLogVO;
 import com.fs.im.domain.FsImMsgSendLog;
@@ -91,4 +94,33 @@ public interface IFsImMsgSendLogService extends IService<FsImMsgSendLog>{
      */
     FsImMsgSendLogVO selectFsImMsgSendLogDetail(Long logId);
 
+    /**
+     * 查询 OpenIM 消息发送记录信息列表
+     * @param request 请求参数
+     * @return 消息发送记录列表
+     */
+    List<FsImMsgSendLogResponse> selectFsImMsgSendLogInfoList(FsImMsgSendLogRequest request);
+
+    R getFsImMsgSendStatistics(FsImMsgSendLogRequest request);
+
+//    /**
+//     * 导出 OpenIM 消息发送记录
+//     * @param request 请求参数
+//     * @return 消息发送记录列表
+//     */
+//    List<FsImMsgSendLog> exportFsImMsgSendLog(FsImMsgSendLogRequest request);
+//
+//    /**
+//     * 查询消息发送详情列表
+//     * @param fsImMsgSendDetail 查询参数
+//     * @return 消息发送详情列表
+//     */
+//    List<FsImMsgSendDetail> selectFsImMsgSendDetailList(FsImMsgSendDetail fsImMsgSendDetail);
+//
+//    /**
+//     * 获取发送状态统计
+//     * @param request 请求参数
+//     * @return 统计信息
+//     */
+//    Map<String, Object> getFsImMsgSendStatistics(FsImMsgSendLogRequest request);
 }

+ 20 - 0
fs-service/src/main/java/com/fs/im/service/impl/FsImMsgSendLogServiceImpl.java

@@ -1,10 +1,15 @@
 package com.fs.im.service.impl;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fs.app.service.param.FsImMsgSendLogRequest;
+import com.fs.app.service.param.FsImMsgSendLogResponse;
+import com.fs.app.service.param.FsImMsgSendLogStatisticsResponse;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
@@ -191,4 +196,19 @@ public class FsImMsgSendLogServiceImpl extends ServiceImpl<FsImMsgSendLogMapper,
         fsImMsgSendLogVO.setDetailList(fsImMsgSendDetails);
         return fsImMsgSendLogVO;
     }
+
+    /**
+     * 查询 OpenIM 消息发送记录信息列表
+     */
+    @Override
+    public List<FsImMsgSendLogResponse> selectFsImMsgSendLogInfoList(FsImMsgSendLogRequest request) {
+       return baseMapper.selectFsImMsgSendLogInfoList(request);
+    }
+
+    @Override
+    public R getFsImMsgSendStatistics(FsImMsgSendLogRequest request) {
+        FsImMsgSendLogStatisticsResponse log=baseMapper.getFsImMsgSendStatistics(request);
+
+        return null;
+    }
 }

+ 63 - 0
fs-service/src/main/resources/mapper/im/FsImMsgSendLogMapper.xml

@@ -207,6 +207,69 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 #{logDetailId}
             </foreach>
     </select>
+    <select id="selectFsImMsgSendLogInfoList" resultType="com.fs.app.service.param.FsImMsgSendLogResponse">
+        SELECT
+        d.log_id AS logId,
+        l.company_user_id AS companyUserId,
+        l.company_id AS companyId,
+        l.course_id AS courseId,
+        l.course_name AS courseName,
+        l.video_id AS videoId,
+        l.video_name AS videoName,
+        l.project_id AS projectId,
+        l.send_title AS sendTitle,
+        l.plan_send_time AS planSendTime,
+        l.send_type AS sendType,
+        l.send_mode AS sendMode,
+        l.is_urge_course AS isUrgeCourse,
+        l.msg_type AS msgType,
+        l.send_status AS sendStatus,
+        l.count AS count,
+        l.create_time AS createTime,
+        d.user_id AS userId,
+        d.status AS status,
+        d.exception_info AS exceptionInfo
+        FROM fs_im_msg_send_log l
+        LEFT JOIN fs_im_msg_send_detail d ON l.log_id = d.log_id
+        <where>
+            <if test="companyUserId != null"> AND l.company_user_id = #{companyUserId}</if>
+            <if test="companyId != null"> AND l.company_id = #{companyId}</if>
+            <if test="courseId != null"> AND l.course_id = #{courseId}</if>
+            <if test="courseName != null and courseName != ''"> AND l.course_name like concat('%', #{courseName}, '%')</if>
+            <if test="videoId != null"> AND l.video_id = #{videoId}</if>
+            <if test="videoName != null and videoName != ''"> AND l.video_name like concat('%', #{videoName}, '%')</if>
+            <if test="sendTitle != null and sendTitle != ''"> AND l.send_title like concat('%', #{sendTitle}, '%')</if>
+            <if test="planSendStartTime != null and planSendEndTime != null">
+                AND l.plan_send_time between #{planSendStartTime} and #{planSendEndTime}
+            </if>
+            <if test="sendType != null"> AND l.send_type = #{sendType}</if>
+            <if test="sendMode != null"> AND l.send_mode = #{sendMode}</if>
+            <if test="sendStatus != null"> AND l.send_status = #{sendStatus}</if>
+            <if test="msgType != null"> AND l.msg_type = #{msgType}</if>
+            <if test="projectId != null"> AND l.project_id = #{projectId}</if>
+            <if test="createTimeStartTime != null and createTimeEndTime != null">
+                AND d.create_time between #{createTimeStartTime} and #{createTimeEndTime}
+            </if>
+            <if test="status != null"> AND d.status = #{status}</if>
+        </where>
+        ORDER BY l.create_time DESC
+    </select>
+
+    <select id="getFsImMsgSendStatistics" resultType="com.fs.app.service.param.FsImMsgSendLogStatisticsResponse">
+        SELECT
+            count(d.log_id) as total,
+            sum(case when d.status = 0 then 1 else 0 end) as sent,
+            sum(case when d.send_status = 2 then 1 else 0 end) as pending,
+            sum(case when d.status = 1 then 1 else 0 end) as failed,
+
+            COUNT(DISTINCT log.log_id) AS total,
+            COUNT(DISTINCT log.log_id) FILTER (WHERE log.send_status = 1) AS sent,
+            COUNT(DISTINCT log.log_id) FILTER (WHERE log.send_status = 2) AS pending,
+            COUNT(DISTINCT log.log_id) FILTER (WHERE log.send_status = 3) AS failed
+        FROM
+            FROM fs_im_msg_send_log l
+        LEFT JOIN fs_im_msg_send_detail d ON l.log_id = d.log_id
+    </select>
 
 
 </mapper>