package com.prolog.rdc.tms.service;

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

import com.prolog.framework.core.pojo.Page;
import com.prolog.rdc.tms.model.entity.SysCodeengineModel;
import com.prolog.rdc.tms.model.vo.SysCodeengineDeleteVO;
import com.prolog.rdc.tms.model.vo.SysCodeengineQueryVO;
import com.prolog.rdc.tms.model.vo.SysCodeengineSaveVO;
import com.prolog.rdc.tms.model.vo.SysCodeengineUpdateVO;

/**
 * 
 *
 * 号码管理器服务层
 *
 * @className :SysCodeengineService
 * @author :fanzw
 * @creationTime :2021/04/21
 * @description :
 * @modifier :fanzw
 * @modifyTime :2021/04/21
 * @reviseRemarks:
 *
 * @version :1.0.0
 *
 */
public interface SysCodeengineService {
	/**
	 * 号码管理器分页查询
	 * 
	 * @param sysCodeengineQueryVO
	 * @return
	 * @throws Exception
	 */
	Page<SysCodeengineModel> listSysCodeengineData(SysCodeengineQueryVO sysCodeengineQueryVO) throws Exception;

	/**
	 * 号码管理器新增
	 * 
	 * @param sysCodeengineSaveVO
	 * @throws Exception
	 */
	void saveSysCodeengineData(SysCodeengineSaveVO sysCodeengineSaveVO) throws Exception;

	/**
	 * 号码管理器修改
	 * 
	 * @param sysCodeengineUpdateVO
	 * @throws Exception
	 */
	void updateSysCodeengineData(SysCodeengineUpdateVO sysCodeengineUpdateVO) throws Exception;

	/**
	 * 号码管理器删除
	 * 
	 * @param sysCodeengineDeleteVOs
	 * @throws Exception
	 */
	void deleteSysCodeengineData(List<SysCodeengineDeleteVO> sysCodeengineDeleteVOs) throws Exception;

	/**
	 * 查询编码表
	 * 
	 * @param condition 编码
	 * @return
	 */
	List<SysCodeengineModel> getCodeengine(String condition);

	/**
	 * 生成单个编码
	 * 
	 * @param code     编码
	 * @param codetype 编码类型
	 * @return
	 */
	String getCodeNumberByCode(String code, String codetype);

	/**
	 * 生成多个编码
	 * 
	 * @param code     编码
	 * @param codetype 编码类型
	 * @param codenum  个数
	 * @return java.util.List<java.lang.String>
	 * @throws @date 2022/1/4 14:42
	 */
	List<String> getCodeNumberByCodes(String code, String codetype, Integer codenum);

	/**
	 * 多个code组求出序列号
	 * 
	 * @param list
	 * @return
	 */
	Map<String, List<String>> getCodeNumberGroupByCodes(List<Map<String, Object>> list);
}
