package com.xinelu.manage.mapper.labelfieldcontent;

import com.xinelu.manage.domain.labelfieldcontent.LabelFieldContent;
import com.xinelu.manage.vo.labelfieldcontent.GroupingValue;
import com.xinelu.manage.vo.labelfieldcontent.LabelFieldContentVO;
import com.xinelu.manage.vo.labelfieldcontent.LabelFieldInfoContentVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 标签字段内容信息Mapper接口
 *
 * @author xinelu
 * @date 2024-03-11
 */
public interface LabelFieldContentMapper {
    /**
     * 查询标签字段内容信息
     *
     * @param id 标签字段内容信息主键
     * @return 标签字段内容信息
     */
    public LabelFieldContent selectLabelFieldContentById(Long id);

    /**
     *
     * @param patientId
     * @return
     */
    public List<LabelFieldContent>  selectLabelFieldContentByPatientId(Long patientId);

    /**
     *
     * @param patientId
     * @return
     */
    List<LabelFieldContent> selectLabelFieldContentByPatientIds(List<Long> patientId);

    /**
     * 查询标签字段内容信息列表
     *
     * @param labelFieldContent 标签字段内容信息
     * @return 标签字段内容信息集合
     */
    public List<LabelFieldContent> selectLabelFieldContentList(LabelFieldContent labelFieldContent);

    /**
     * 新增标签字段内容信息
     *
     * @param labelFieldContent 标签字段内容信息
     * @return 结果
     */
    public int insertLabelFieldContent(LabelFieldContent labelFieldContent);

    /**
     * 修改标签字段内容信息
     *
     * @param labelFieldContent 标签字段内容信息
     * @return 结果
     */
    public int updateLabelFieldContent(LabelFieldContent labelFieldContent);

    /**
     * 删除标签字段内容信息
     *
     * @param id 标签字段内容信息主键
     * @return 结果
     */
    public int deleteLabelFieldContentById(Long id);

    /**
     * 批量删除标签字段内容信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLabelFieldContentByIds(Long[] ids);

    /**
     * 检查数据库中同一个fieldId下内容名称的重复性
     */
    int existCountByFieldIdAndContentName(@Param("fieldId") Long fieldId, @Param("contentName") String contentName);

    /**
     * 检查除去当前记录外有没有重复内容名称
     */
    int existCountByContentNameExcludingId(@Param("id") Long id, @Param("fieldId") Long fieldId, @Param("contentName") String contentName);

    /**
     * 查询标签信息根据标签字段信息表
     *
     * @param labelFieldIds 标签字段信息表
     * @return LabelFieldContentVO
     */
    List<LabelFieldContentVO> selectLabelFieldContent(@Param("labelFieldIds") List<Long> labelFieldIds, @Param("patientId") Long patientId);

    /**
     * 画像内容查询
     *
     * @param taskPartitionDictId 细分id
     * @param patientId           患者id
     * @param portraitStatus      状态
     * @return GroupingValue
     */
    List<GroupingValue> labelFieldAndPartitionDict(@Param("taskPartitionDictId") Long taskPartitionDictId, @Param("patientId") Long patientId, @Param("portraitStatus") String portraitStatus);

    List<GroupingValue> groupingValue(@Param("taskPartitionDictId") Long taskPartitionDictId, @Param("patientId") Long patientId, @Param("portraitStatus") String portraitStatus);

	/**
	 * 查询患者在用标签字段信息
	 * @param patientId 患者主键
	 * @return 患者标签字段列表
	 */
	List<LabelFieldInfoContentVo> selectByPatientId(Long patientId);

    /**
     * 批量新增
     *
     * @param labelFieldContentList 标签内容
     * @return int
     */
    int insertLabelFieldContentList(List<GroupingValue> labelFieldContentList);

    /**
     * 批量修改 (dev.yml url  &allowMultiQueries=true)
     *
     * @param labelFieldContentList 标签内容
     * @return int
     */
    int updateContentRemarkLabelFieldContentList(List<GroupingValue> labelFieldContentList);

    /**
     * 查询画像sn
     *
     * @param taskPartitionDictIds 细分id
     * @param patientId            患者id
     * @return LabelFieldContent
     */
    List<LabelFieldContent> selectLabelFieldContentPortraitSn(@Param("taskPartitionDictIds") List<Long> taskPartitionDictIds, @Param("patientId") Long patientId);
}
