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; /** * 查询活动报名信息 * 当传入activityId时,查询该比赛下第一个阶段(sort_order=1)的报名项目 */ @SuppressWarnings("unchecked") public List listApplications(String name, Long activityId, Integer state, Integer page, Integer size) { String baseSql = "SELECT ap.id, p.name AS player_name, stage.name AS activity_name, ap.project_name AS project_name, p.phone AS phone, ap.create_time AS apply_time, ap.state AS state " + "FROM t_activity_player ap " + "JOIN t_player p ON p.id = ap.player_id " + "JOIN t_activity stage ON stage.id = ap.stage_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 "); } // 查询指定主比赛的第一阶段报名项目:activity_id=主比赛ID, stage_id=第一阶段ID whereClause.append("ap.activity_id = :activityId AND stage.pid = :activityId AND stage.sort_order = 1"); hasCondition = true; } if (state != null) { if (hasCondition) { whereClause.append(" AND "); } whereClause.append("ap.state = :state"); 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); } if (state != null) { q.setParameter("state", state); } 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.setProjectName(r[3] != null ? r[3].toString() : ""); // project_name dto.setPhone(r[4] != null ? r[4].toString() : ""); dto.setApplyTime(r[5] != null ? r[5].toString() : ""); // 映射状态:使用 t_activity_player.state(0=未审核,1=审核通过,2=审核驳回) dto.setState(r[6] != null ? Integer.valueOf(r[6].toString()) : 0); list.add(dto); } return list; } }