package com.rongyichuang.player.service; import com.rongyichuang.player.dto.response.ActivityPlayerApplicationResponse; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class PlayerApplicationService { @PersistenceContext private EntityManager em; /** * 读取报名申请,按报名时间倒序 * 注意:实际库表为 t_avtivity_player(拼写以库为准) */ @SuppressWarnings("unchecked") public List listApplications(String name, Integer page, Integer size) { String baseSql = "SELECT ap.id, p.name AS player_name, a.name AS activity_name, p.phone AS phone, ap.create_time AS apply_time, p.audit_state AS state " + "FROM t_avtivity_player ap " + "JOIN t_player p ON p.id = ap.player_id " + "JOIN t_activity a ON a.id = ap.activity_id "; String where = ""; if (name != null && !name.isEmpty()) { where = "WHERE p.name LIKE CONCAT('%', :name, '%') "; } String order = "ORDER BY ap.create_time DESC "; String limit = ""; if (page != null && size != null && page > 0 && size > 0) { int offset = (page - 1) * size; limit = "LIMIT " + size + " OFFSET " + offset + " "; } var q = em.createNativeQuery(baseSql + where + order + limit); if (!where.isEmpty()) { q.setParameter("name", name); } List rows = q.getResultList(); List list = new ArrayList<>(); for (Object[] r : rows) { ActivityPlayerApplicationResponse dto = new ActivityPlayerApplicationResponse(); dto.setId(r[0] != null ? Long.valueOf(r[0].toString()) : null); // activity_player_id dto.setPlayerName(r[1] != null ? r[1].toString() : ""); dto.setActivityName(r[2] != null ? r[2].toString() : ""); dto.setPhone(r[3] != null ? r[3].toString() : ""); dto.setApplyTime(r[4] != null ? r[4].toString() : ""); // 映射状态:使用 t_player.audit_state(0=未审核,1=进行中,2=已驳回,3=结束) dto.setState(r[5] != null ? Integer.valueOf(r[5].toString()) : 0); list.add(dto); } return list; } }