package org.jeecg.modules.system.service;

import org.jeecg.modules.system.entity.SysSerialPattern;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.system.vo.CallResult;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * @Copyright: 上海萃颠信息科技有限公司. All rights reserved.
 * @Title:ISysSerialPatternService.java
 * @Description:编号模式设置服务接口，包含编号值获取
 * @author 冯海夫
 * @date: 2019/5/27 17:10
 * @version V1.0
 * @updatehistory:
 *   2019/5/27 17:10 新增
 */
public interface ISysSerialPatternService extends IService<SysSerialPattern> {
    /**
     * @Title:getExtraFields
     * @Description:获取当前编号需要的数据库字段
     * @param
     * tableName - 表格名称
     * fieldName - 字段名称
     * @return
     * org.jeecg.modules.system.vo.CallResult<java.util.ArrayList<java.lang.String>> -  额外字段列表,编号模式主键（message字段）
     * @exception
     * @author 冯海夫
     * @date 2019/5/27 15:47
     * @updatehistory:
     *   2019/5/27 15:47 新增
     */
    CallResult<ArrayList<String>> getExtraFields(String tableName, String fieldName);
    /**
     * @Title:getNextSerial
     * @Description:获取下一个编号
     * @param
     * tableName - 表格名称
     * fieldName - 字段名称
     * extraFieldValues - 数据库字段值
     * updateTable - 是否更新最大编号
     * @return org.jeecg.modules.system.vo.CallResult<java.lang.String> - 下一个编号
     * @exception
     * @author 冯海夫
     * @date 2019/5/27 15:48
     * @updatehistory:
     *   2019/5/27 15:48 新增
     */
    CallResult<String> getNextSerial(String tableName, String fieldName, HashMap<String, String> extraFieldValues, boolean updateTable);
    /**
     * @Title:isSerialPatternValid
     * @Description:判断编号模式是否有效
     * @param
     * serialPattern - 编号模式字符串
     * @return
     * org.jeecg.modules.system.vo.CallResult<java.util.ArrayList<java.lang.String>> -  编号模式是否有效
     * @exception
     * @author 冯海夫
     * @date 2019/5/27 17:25
     * @updatehistory:
     *   2019/5/27 17:25 新增
     */
    public CallResult<String> isSerialPatternValid(String serialPattern);
	/**
	 * @Title:getNextSerial
	 * @Description:调用内部函数，对外提供接口
	 * @param
	 *  entity - 待编号的实体类
	 *  tableName - 待编号的表格名称
	 *  fieldName - 待编号的字段名称
	 *  updateTable - 是否更新最大编号表
	 * @return
	 *  org.jeecg.modules.system.vo.CallResult<java.lang.String> - 下一个编号
	 * @exception
	 * @author 冯海夫
	 * @date 2019/5/28 16:22
	 * @updatehistory:
	 *   2019/5/28 16:22 新增
	 */
	public CallResult<String> getNextSerial(Object entity, String tableName, String fieldName, boolean updateTable);

	/**
	* @Author chenchuang
	* @Description //TODO  上一个编号
	* @Date 2020/9/1 14:34
	* @Param [entity, tableName, fieldName, updateTable]
	* @return org.jeecg.modules.system.vo.CallResult<java.lang.String>
	*/
	public CallResult<String> getUpperSerial(Object entity, String tableName, String fieldName, boolean updateTable);
}
