修复账号禁用及队列场次状态规则
问题与需求:后台禁用员工后旧会话仍可继续访问;实时队列跨天误读昨日场次;项目暂停后需禁止取号但允许叫号。 修复思路:账号权限变更时撤销会话并同步前端登录态;实时查询统一按项目时区当天场次过滤;拆分取号与叫号的状态校验,并补充前后端及 PostgreSQL 回归测试。
This commit is contained in:
@@ -116,12 +116,6 @@ func (s *Server) statusByPhone(w http.ResponseWriter, r *http.Request, limitByCl
|
||||
|
||||
var tickets []model.QueueTicket
|
||||
activeSessionStatuses := []string{"RUNNING", "PAUSED"}
|
||||
latestActiveSession := s.db.Table("queue_sessions AS latest_active_session").
|
||||
Select("latest_active_session.id").
|
||||
Where("latest_active_session.project_id = queue_tickets.project_id").
|
||||
Where("latest_active_session.status IN ?", activeSessionStatuses).
|
||||
Order("latest_active_session.business_date DESC").
|
||||
Limit(1)
|
||||
if err := s.db.WithContext(r.Context()).Model(&model.QueueTicket{}).
|
||||
Joins("JOIN projects ON projects.id = queue_tickets.project_id").
|
||||
Joins("JOIN queue_sessions ON queue_sessions.id = queue_tickets.queue_session_id AND queue_sessions.project_id = queue_tickets.project_id").
|
||||
@@ -130,7 +124,7 @@ func (s *Server) statusByPhone(w http.ResponseWriter, r *http.Request, limitByCl
|
||||
[]string{model.TicketWaiting, model.TicketCalled, model.TicketArrived},
|
||||
activeSessionStatuses,
|
||||
[]string{model.ProjectRunning, model.ProjectPaused}).
|
||||
Where("queue_tickets.queue_session_id = (?)", latestActiveSession).
|
||||
Where("queue_sessions.business_date = (? AT TIME ZONE projects.timezone)::date", s.now()).
|
||||
Order("projects.name ASC, queue_tickets.ticket_number ASC").
|
||||
Find(&tickets).Error; err != nil {
|
||||
writeError(w, err)
|
||||
@@ -306,9 +300,7 @@ func (s *Server) displaySnapshot(w http.ResponseWriter, r *http.Request) {
|
||||
writeError(w, mapNotFound(err, "DISPLAY_NOT_FOUND", "公示屏绑定不存在"))
|
||||
return
|
||||
}
|
||||
var session model.QueueSession
|
||||
err = s.db.WithContext(r.Context()).Where("project_id = ? AND status IN ?", project.ID, []string{"RUNNING", "PAUSED"}).
|
||||
Order("business_date DESC").First(&session).Error
|
||||
session, err := s.currentQueueSession(s.db.WithContext(r.Context()), project)
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
experiencedPeople, metricErr := s.displayedExperiencedPeople(r.Context(), project, nil)
|
||||
if metricErr != nil {
|
||||
|
||||
Reference in New Issue
Block a user