package com.qmth.sop.business.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qmth.sop.business.bean.dto.DataPermissionDto;
import com.qmth.sop.business.bean.result.SopInfoResult;
import com.qmth.sop.business.entity.SysUser;
import com.qmth.sop.business.entity.TBSopInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * sop表 Mapper 接口
 * </p>
 *
 * @author wangliang
 * @since 2023-08-01
 */
public interface TBSopInfoMapper extends BaseMapper<TBSopInfo> {

    /**
     * 查询动态sop表名是否存在
     *
     * @param db
     * @param tableName
     * @return
     */
    int selectSopDynamicExist(@Param("db") String db, @Param("tableName") String tableName);

    /**
     * 保存动态sop信息
     *
     * @param tableName
     * @param fieldName
     * @param fieldValue
     * @return
     */
    Boolean saveDynamicSop(@Param("tableName") String tableName, @Param("fieldName") String fieldName, @Param("fieldValue") String fieldValue);

    /**
     * 更新动态sop信息
     *
     * @param tableName
     * @param flowDeploymentId
     * @param flowId
     * @param fieldValue
     * @return
     */
    Boolean updateDynamicSop(@Param("tableName") String tableName, @Param("flowDeploymentId") String flowDeploymentId, @Param("flowId") Long flowId, @Param("fieldValue") String fieldValue);

    /**
     * 查询动态sop数据
     *
     * @param tableName
     * @param flowDeploymentId
     * @param flowId
     * @return
     */
    int selectDynamicSop(@Param("tableName") String tableName, @Param("flowDeploymentId") String flowDeploymentId, @Param("flowId") Long flowId);

    /**
     * 查询所有列
     *
     * @param dbName
     * @param tableName
     * @return
     */
    @SuppressWarnings("MybatisXMapperMethodInspection")
    List<Map<String, String>> selectDynamicSopAll(@Param("dbName") String dbName, @Param("tableName") String tableName);

    /**
     * sop列表接口
     *
     * @param iPage
     * @param type
     * @param serviceId
     * @param tableName
     * @param fieldName
     * @param fieldValue
     * @param dpr
     * @param fieldOrder
     * @return
     */
    @SuppressWarnings("MybatisXMapperMethodInspection")
    IPage<Map> list(IPage<Map> iPage, @Param("type") String type, @Param("serviceId") Long serviceId, @Param("tableName") String tableName, @Param("fieldName") String fieldName, @Param("fieldValue") String fieldValue, @Param("dpr") DataPermissionDto dpr, @Param("fieldOrder") String fieldOrder);

    /**
     * 根据crmNo查询在途的sop信息
     *
     * @param crmNo
     * @param userId
     * @param roleType
     * @return
     */
    List<String> findFlowPassageByCrmNo(@Param("crmNo") String crmNo, @Param("userId") Long userId, @Param("roleType") String roleType);

    /**
     * 根据serviceId和userId查询所有sop信息
     *
     * @param serviceId
     * @param userId
     * @param roleType
     * @return
     */
    List<SopInfoResult> findFlowByServiceId(@Param("serviceId") Long serviceId, @Param("userId") Long userId, @Param("roleType") String roleType);

    List<SysUser> userList(@Param("id") Long id);

    /**
     * 根据服务单元查找在途的区域协调人、实施工程师、助理工程师
     *
     * @param serviceId
     * @return
     */
    List<Map<String, Object>> findSopPassage(@Param("serviceId") Long serviceId);
}
