shinnosuke
2026-09-21 7844f5af457ff3b7d3f8eeac8799e8d281e635a1
talent-card-server/src/main/java/com/talentcard/server/service/TicketPackageAdminService.java
@@ -45,6 +45,7 @@
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -59,6 +60,7 @@
    private final BenefitMerchantMapper merchantMapper;
    private final TicketPackageMerchantMapper packageMerchantMapper;
    private final TicketPackageLevelRuleMapper levelRuleMapper;
    private final JdbcTemplate jdbcTemplate;
    public TicketPackageAdminService(
            TicketPackageMapper packageMapper,
@@ -66,7 +68,8 @@
            TicketPackageClaimMapper claimMapper,
            BenefitMerchantMapper merchantMapper,
            TicketPackageMerchantMapper packageMerchantMapper,
            TicketPackageLevelRuleMapper levelRuleMapper
            TicketPackageLevelRuleMapper levelRuleMapper,
            JdbcTemplate jdbcTemplate
    ) {
        this.packageMapper = packageMapper;
        this.codeMapper = codeMapper;
@@ -74,6 +77,35 @@
        this.merchantMapper = merchantMapper;
        this.packageMerchantMapper = packageMerchantMapper;
        this.levelRuleMapper = levelRuleMapper;
        this.jdbcTemplate = jdbcTemplate;
    }
    /**
     * 票包表单的「适用商家」下拉选项:只回启用的观影服务商家(id + 名称)。
     *
     * <p>单独开这个只读接口,是为了让「电影票管理」这个权限自己够用——之前页面复用
     * {@code /api/admin/business/merchants},票包运营账号没有「商家查询」权限就整页报错。
     */
    @Transactional(readOnly = true)
    public List<Map<String, Object>> merchantOptions(String keyword) {
        StringBuilder sql = new StringBuilder("""
                select id, merchant_name, merchant_type
                from merchant
                where deleted = 0 and status = 1 and merchant_type_code = 'cinema'
                """);
        List<Object> arguments = new ArrayList<>();
        if (keyword != null && !keyword.isBlank()) {
            sql.append(" and merchant_name like ?");
            arguments.add("%" + keyword.trim() + "%");
        }
        sql.append(" order by sort_no desc, id asc");
        return jdbcTemplate.queryForList(sql.toString(), arguments.toArray()).stream().map(row -> {
            Map<String, Object> option = new LinkedHashMap<>();
            option.put("id", row.get("id"));
            option.put("merchantName", row.get("merchant_name"));
            option.put("merchantType", row.get("merchant_type"));
            return option;
        }).toList();
    }
    @Transactional(readOnly = true)