Interface QueueMemberRepository

All Superinterfaces:
org.springframework.data.repository.CrudRepository<QueueMemberEntity,Long>, org.springframework.data.jpa.repository.JpaRepository<QueueMemberEntity,Long>, org.springframework.data.jpa.repository.JpaSpecificationExecutor<QueueMemberEntity>, org.springframework.data.repository.ListCrudRepository<QueueMemberEntity,Long>, org.springframework.data.repository.ListPagingAndSortingRepository<QueueMemberEntity,Long>, org.springframework.data.repository.PagingAndSortingRepository<QueueMemberEntity,Long>, org.springframework.data.repository.query.QueryByExampleExecutor<QueueMemberEntity>, org.springframework.data.repository.Repository<QueueMemberEntity,Long>

public interface QueueMemberRepository extends org.springframework.data.jpa.repository.JpaRepository<QueueMemberEntity,Long>, org.springframework.data.jpa.repository.JpaSpecificationExecutor<QueueMemberEntity>
  • Method Details

    • findByUid

    • findByOrgUidAndCreatedAtBetweenAndResolved

      List<QueueMemberEntity> findByOrgUidAndCreatedAtBetweenAndResolved(String orgUid, ZonedDateTime startTime, ZonedDateTime endTime, boolean resolved)
    • findByOrgUidAndCreatedAtBetweenAndAgentAcceptType

      List<QueueMemberEntity> findByOrgUidAndCreatedAtBetweenAndAgentAcceptType(String orgUid, ZonedDateTime startTime, ZonedDateTime endTime, String acceptType)
    • findByThreadUid

      @Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.thread.uid = :threadUid AND qm.deleted = false") Optional<QueueMemberEntity> findByThreadUid(@Param("threadUid") String threadUid)
    • countByOrgUidAndDateBetween

      @Query("SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.orgUid = :orgUid AND qm.createdAt >= :startDate AND qm.createdAt <= :endDate") Long countByOrgUidAndDateBetween(@Param("orgUid") String orgUid, @Param("startDate") ZonedDateTime startDate, @Param("endDate") ZonedDateTime endDate)
    • countByWorkgroupUidAndDateBetween

      @Query("SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.orgUid = :orgUid AND qm.workgroupQueue IS NOT NULL AND qm.createdAt >= :startDate AND qm.createdAt <= :endDate") Long countByWorkgroupUidAndDateBetween(@Param("orgUid") String orgUid, @Param("workgroupUid") String workgroupUid, @Param("startDate") ZonedDateTime startDate, @Param("endDate") ZonedDateTime endDate)
    • countByAgentUidAndDateBetween

      @Query("SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.thread.agent LIKE CONCAT(\'%\', :agentUid, \'%\') AND qm.createdAt >= :startDate AND qm.createdAt <= :endDate") Long countByAgentUidAndDateBetween(@Param("agentUid") String agentUid, @Param("startDate") ZonedDateTime startDate, @Param("endDate") ZonedDateTime endDate)
    • countByRobotUidAndDateBetween

      @Query("SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.orgUid = :orgUid AND qm.robotQueue IS NOT NULL AND qm.createdAt >= :startDate AND qm.createdAt <= :endDate") Long countByRobotUidAndDateBetween(@Param("orgUid") String orgUid, @Param("robotUid") String robotUid, @Param("startDate") ZonedDateTime startDate, @Param("endDate") ZonedDateTime endDate)
    • findIdleBefore

      @Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.visitorMessageCount = 0 AND qm.deleted = false AND qm.visitorEnqueueAt < :threshold") List<QueueMemberEntity> findIdleBefore(@Param("threshold") ZonedDateTime threshold)
      查找在指定时间之前仍未发送任何访客消息(visitorMessageCount=0)的排队成员
    • findFirstAgentQueueMemberByThreadStatus

      @Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.agentQueue.uid = :agentQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus ORDER BY qm.queueNumber ASC") Optional<QueueMemberEntity> findFirstAgentQueueMemberByThreadStatus(@Param("agentQueueUid") String agentQueueUid, @Param("threadStatus") String threadStatus)
    • findAgentQueueHeadForUpdate

      @Lock(PESSIMISTIC_WRITE) @Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.agentQueue.uid = :agentQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus ORDER BY qm.queueNumber ASC") List<QueueMemberEntity> findAgentQueueHeadForUpdate(@Param("agentQueueUid") String agentQueueUid, @Param("threadStatus") String threadStatus, org.springframework.data.domain.Pageable pageable)
    • findFirstWorkgroupQueueMemberByThreadStatus

      @Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.workgroupQueue.uid = :workgroupQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus ORDER BY qm.queueNumber ASC") Optional<QueueMemberEntity> findFirstWorkgroupQueueMemberByThreadStatus(@Param("workgroupQueueUid") String workgroupQueueUid, @Param("threadStatus") String threadStatus)
    • findWorkgroupQueueMembersByThreadStatus

      @Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.workgroupQueue.uid = :workgroupQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus ORDER BY qm.queueNumber ASC") List<QueueMemberEntity> findWorkgroupQueueMembersByThreadStatus(@Param("workgroupQueueUid") String workgroupQueueUid, @Param("threadStatus") String threadStatus)
    • findFirstRobotQueueMemberByThreadStatus

      @Query("SELECT qm FROM QueueMemberEntity qm WHERE qm.robotQueue.uid = :robotQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus ORDER BY qm.queueNumber ASC") Optional<QueueMemberEntity> findFirstRobotQueueMemberByThreadStatus(@Param("robotQueueUid") String robotQueueUid, @Param("threadStatus") String threadStatus)
    • findAgentQueueMembersByThreadStatus

      @Query(value="SELECT qm FROM QueueMemberEntity qm WHERE qm.agentQueue.uid = :agentQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus ORDER BY qm.queueNumber ASC", countQuery="SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.agentQueue.uid = :agentQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus") org.springframework.data.domain.Page<QueueMemberEntity> findAgentQueueMembersByThreadStatus(@Param("agentQueueUid") String agentQueueUid, @Param("threadStatus") String threadStatus, org.springframework.data.domain.Pageable pageable)
    • findMaxQueueNumberForQueue

      @Lock(PESSIMISTIC_WRITE) @Query("SELECT COALESCE(MAX(qm.queueNumber), 0) FROM QueueMemberEntity qm WHERE qm.deleted = false AND ((:queueType = \'AGENT\' AND qm.agentQueue = :queue) OR (:queueType = \'WORKGROUP\' AND qm.workgroupQueue = :queue) OR (:queueType = \'ROBOT\' AND qm.robotQueue = :queue))") Integer findMaxQueueNumberForQueue(@Param("queue") QueueEntity queue, @Param("queueType") String queueType)
    • countUnassignedQueuingByWorkgroupQueueUids

      @Query("SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.workgroupQueue.uid IN :workgroupQueueUids AND qm.agentQueue IS NULL AND qm.deleted = false AND qm.thread.status = :threadStatus") int countUnassignedQueuingByWorkgroupQueueUids(@Param("workgroupQueueUids") List<String> workgroupQueueUids, @Param("threadStatus") String threadStatus)
      统计指定工作组队列UIDs中未分配客服(agentQueue 为 null)且处于排队状态的会话数 用于计算某个客服所在工作组中等待分配的排队人数
      Parameters:
      workgroupQueueUids - 工作组队列UID列表
      threadStatus - 线程状态(如 QUEUING)
      Returns:
      未分配客服的排队会话数
    • countQueuingByAgentQueueUid

      @Query("SELECT COUNT(qm) FROM QueueMemberEntity qm WHERE qm.agentQueue.uid = :agentQueueUid AND qm.deleted = false AND qm.thread.status = :threadStatus") int countQueuingByAgentQueueUid(@Param("agentQueueUid") String agentQueueUid, @Param("threadStatus") String threadStatus)
      统计指定客服队列中处于排队状态的会话数
      Parameters:
      agentQueueUid - 客服队列UID
      threadStatus - 线程状态(如 QUEUING)
      Returns:
      排队会话数