package com.persagy.calendar.service;

import java.util.List;

import com.persagy.calendar.pojo.dto.WorkCalendarRule;
import com.persagy.db.service.ISuperService;

/**
 * 工作历规则表
 * 
 * @version 1.0.0
 * @company persagy 
 * @author zhangqiankun
 * @date 2020-10-02 18:26:14
 */
public interface IWorkCalendarRuleService extends ISuperService<WorkCalendarRule> {
	
	/**
	 * 根据工作历ID查询规则信息
	 * 
	 * @param groupCode
	 * @param calendarId
	 * @param projectId
	 * @param dictTypeLevel 0-集团级别，1-项目级别，2-工作历级别，null-默认工作历级别
	 * @return
	 */
	List<WorkCalendarRule> queryRuleByCalendarId(String groupCode, String calendarId, String projectId, Integer dictTypeLevel);
	
	/**
	 * 查询出与value相同的工作历规则ID，目前IBMS专用，其余方法不要调用
	 * @param workCalendarRule
	 * @param dictTypeLevel 0-集团级别，1-项目级别，2-工作历级别，null-默认工作历级别
	 * @return 
	 */
	String getCalendarRule(WorkCalendarRule workCalendarRule, Integer dictTypeLevel);
	
	/**
	 * @param id 规则ID
	 * 
	 * @return
	 */
	WorkCalendarRule getById(String id);
	
	boolean createWorkCalendarRule(WorkCalendarRule workCalendarRule);
	
	boolean updateWorkCalendarRule(WorkCalendarRule workCalendarRule);
	
	/**
	 * 当规则ID不为空时，主键删除；当工作历ID不为空时，根据工作历ID删除；同时存在，主键删除，逻辑删除
	 * 
	 * @param workCalendarRule
	 * @param dictTypeLevel 0-集团级别，1-项目级别，2-工作历级别，null-默认工作历级别
	 * @return
	 */
	boolean deleteWorkCalendarRule(WorkCalendarRule workCalendarRule, Integer dictTypeLevel);
	
	/**
	 * 当规则ID不为空时，主键删除；当工作历ID不为空时，根据工作历ID删除；同时存在，主键删除，均为物理删除
	 * 
	 * @param groupCode
	 * @param projectId
	 * @param id
	 * @param calendarId
	 * @param dictType
	 * @param dictTypeLevel 0-集团级别，1-项目级别，2-工作历级别，null-默认工作历级别
	 * @return
	 */
	boolean removeWorkCalendarRule(String groupCode, String projectId, String id, String calendarId, String dictType, Integer dictTypeLevel);

	/**
	 * 同工作历类型下，dictType+dictCode 唯一
	 * 
	 * @param groupCode
	 * @param projectId
	 * @param dictType
	 * @param dictCode
	 * @param id 存在为修改，修改略过自身
	 * @param dictTypeLevel 0-集团级别，1-项目级别，2-工作历级别，null-默认工作历级别
	 * @return
	 */
	boolean checkDictRuleValid(String groupCode, String projectId, String calendarId, String dictType, String dictCode, String id, Integer dictTypeLevel);

}

