package jnpf.limsMapper;
|
|
import jnpf.base.mapper.SuperMapper;
|
import jnpf.limsEntity.LimsBaogaoShouquanEntity;
|
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Select;
|
|
@Mapper
|
public interface LimsBaogaoShouquanMapper extends SuperMapper<LimsBaogaoShouquanEntity> {
|
|
/**
|
* 是否存在一条「未软删 + 启用 + 级别命中 + 用户在被授权列表 + 分类在授权清单」的记录。
|
*
|
* <p>三个判定列均为 JSON 数组:
|
* <ul>
|
* <li>{@code bei_shouquanren}:被授权用户列表 ["userId1","userId2"]</li>
|
* <li>{@code shenhe_jibie}:授权的审核级别集合 ["baogao_zhizhuo","baogao_shenhe","baogao_qianfa"]</li>
|
* <li>{@code shenhe_fenlei}:授权的分类集合 ["CP","ZJP","YY",...]</li>
|
* </ul>
|
* 用 {@code haystack::jsonb @> to_jsonb(needle::text)} 统一判断"单值 needle 是否在数组 haystack 中"
|
* (PostgreSQL 写法;MySQL 时代为 {@code JSON_CONTAINS(haystack, JSON_QUOTE(needle))})。
|
*
|
* <p><b>历史变更(2026-05-21)</b>:早期 {@code shenhe_jibie} 是 PLAIN 单选字符串
|
* (baogao_zhizhuo / baogao_shenhe / baogao_qianfa 三选一),SQL 用 {@code = #{jibie}} 直接等值匹配。
|
* 业务方后续将该字段调整为多选 JSON 数组(一条授权记录可同时覆盖多个审核级别),
|
* 已统一为数组包含判断。<b>不要再退回到等值匹配</b>,否则会漏判数组形态的现网数据;
|
* 历史 PLAIN 单值数据已被业务侧逻辑删除({@code f_delete_mark=1}),不影响。
|
* 注意:三列是 varchar 存 JSON 文本,{@code ::jsonb} 遇非法 JSON 会抛错——若回归时踩到脏数据,
|
* 改用 {@code CASE WHEN pg_input_is_valid(col,'jsonb') THEN ... END} 兜底。
|
*
|
* <p>查 1 条 LIMIT 1,避免重复授权记录把 count 拉大。
|
*/
|
@Select("SELECT COUNT(*) FROM (" +
|
" SELECT 1 FROM lims_baogao_shouquan" +
|
" WHERE (f_delete_mark IS NULL OR f_delete_mark <> 1)" +
|
" AND biz_enabled = 'yes'" +
|
" AND shenhe_jibie::jsonb @> to_jsonb(#{jibie}::text)" +
|
" AND bei_shouquanren::jsonb @> to_jsonb(#{userId}::text)" +
|
" AND shenhe_fenlei::jsonb @> to_jsonb(#{bizType}::text)" +
|
" LIMIT 1" +
|
") AS t")
|
int countAuthority(@Param("userId") String userId,
|
@Param("jibie") String jibie,
|
@Param("bizType") String bizType);
|
}
|