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; /** * 查询活动报名信息 */ @SuppressWarnings("unchecked") public List listApplications(String name, Long activityId, 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_activity_player ap " + "JOIN t_player p ON p.id = ap.player_id " + "JOIN t_activity a ON a.id = ap.activity_id "; StringBuilder whereClause = new StringBuilder(); boolean hasCondition = false; if (name != null && !name.isEmpty()) { whereClause.append("p.name LIKE CONCAT('%', :name, '%')"); hasCondition = true; } if (activityId != null) { if (hasCondition) { whereClause.append(" AND "); } whereClause.append("ap.activity_id = :activityId"); hasCondition = true; } String where = hasCondition ? "WHERE " + whereClause.toString() + " " : ""; 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 (name != null && !name.isEmpty()) { q.setParameter("name", name); } if (activityId != null) { q.setParameter("activityId", activityId); } 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; } }