package digital.laboratory.platform.entrustment.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import digital.laboratory.platform.common.mybatis.security.service.DLPUser;
import digital.laboratory.platform.entrustment.entity.CaseEvent;
import digital.laboratory.platform.othersys.vo.EntrustDataVo;
import digital.laboratory.platform.entrustment.vo.CaseEventVO;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 案件事件服务类
 *
 * @author Zhang Xiaolong created at  2022-03-22
 * @describe 案件事件服务类
 */
public interface CaseEventService extends IService<CaseEvent> {
	/**
	 * 按查询条件查询案件VO
	 * @param fromDate
	 * @param toDate
	 * @param caseName
	 * @param caseType
	 * @return
	 */
	List<CaseEventVO> getCaseVoList(String fromDate, String toDate, String caseName, String caseType);
	IPage<CaseEventVO> getCaseVoPage(IPage<CaseEvent> page, QueryWrapper<CaseEvent> qw);

	CaseEventVO getCaseVOById(String id);

	/**
	 * 根据案件编号查 Id
	 * @param caseNo
	 * @return
	 */
	CaseEvent getByCaseNo(String caseNo);


	/**
	 * 生成新的案件编码, 本函数仅用于没有现勘系统、没有案事件系统的情况下
	 * 如果有现勘系统, 则使用现勘系统的案件编号。
	 * 如果有案事件系统, 则使用案事件系统的案件编号。
	 *
	 * 格式:
	 * <pre>
	 * A <办案机构 12位> <年月6位> <顺序号4位>
	 * 例如:
	 * A 520101 040000 202203 0002
	 * 合计23位
	 * 以为贵州省为例, 组织机构编码为 12 位长度, 除使用数字(0~9)之外, 还使用了英文字母(A~Z)
	 *</pre>
	 * 作为兼容性考虑, 如果机构编码不足 12 位, 以实际位数为准
	 *
	 * @param caseOwnOrgCode
	 * @param date
	 * @return
	 */
	String getNewCaseCode(String caseOwnOrgCode, LocalDate date);
	/**
	 * 检查案件是否有提交审核以后的委托存在
	 */
	Boolean checkCaseIsEnableModify(String caseId);
	/**
	 * 同步禁毒大数据平台上的案件信息
	 * @param isUpdate true 是更新  false 是插入
	 * @param caseId 更新则需要传案件的id, 如果不是更新则传null
	 * @return
	 */
    Map<String, List<Map<String, String>>> syncCaseEventInfo(EntrustDataVo entrustDataVo, String caseId, Boolean isUpdate);

	boolean postAddObject(CaseEvent caseEvent);

	CaseEvent deleteById(String id, DLPUser dlpUser) throws Exception;
}
