package ${basePackage}.service.${lowerTableName};

import com.cm.common.exception.RemoveException;
import com.cm.common.exception.SaveException;
import com.cm.common.exception.SearchException;
import com.cm.common.pojo.ListPage;
import com.cm.common.result.SuccessResult;
import com.cm.common.result.SuccessResultData;
import com.cm.common.result.SuccessResultList;
import ${basePackage}.pojo.dtos.${lowerTableName}.${firstUpperTableName}DTO;
import ${basePackage}.pojo.vos.${lowerTableName}.${firstUpperTableName}VO;

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

/**
 * @ClassName: I${firstUpperTableName}Service
 * @Description: ${tableExplain}
 * @Author: ${author}
 * @Date: ${date}
 * @Version: ${version}
 **/
public interface I${firstUpperTableName}Service {

    /**
     * 新增${tableExplain}
     *
     * @param ${firstLowerTableName}VO
     * @return
     * @throws Exception
     */
    SuccessResult save${firstUpperTableName}(${firstUpperTableName}VO ${firstLowerTableName}VO) throws Exception;

    /**
     * 新增${tableExplain}(APP)
     *
     * @param token
     * @param ${firstLowerTableName}VO
     * @return
     * @throws Exception
     */
    SuccessResult save${firstUpperTableName}ByToken(String token, ${firstUpperTableName}VO ${firstLowerTableName}VO) throws Exception;

    /**
     * 新增${tableExplain}
     *
     * @param ${firstLowerTableName}VO
     * @return ${firstLowerTableName}Id
     * @throws Exception
     */
    String save${firstUpperTableName}ReturnId(${firstUpperTableName}VO ${firstLowerTableName}VO) throws Exception;

    /**
     * 新增${tableExplain}(APP)
     *
     * @param token
     * @param ${firstLowerTableName}VO
     * @return ${firstLowerTableName}Id
     * @throws Exception
     */
    String save${firstUpperTableName}ByTokenReturnId(String token, ${firstUpperTableName}VO ${firstLowerTableName}VO) throws Exception;

    /**
     * 删除${tableExplain}
     *
     * @param ids
     * @return
     * @throws RemoveException
     */
    SuccessResult remove${firstUpperTableName}(String ids) throws RemoveException;

    /**
     * 删除${tableExplain}（物理删除）
     *
     * @param ids
     * @throws RemoveException
     */
    void delete${firstUpperTableName}(String ids) throws RemoveException;

    /**
     * 删除${tableExplain}(APP)
     *
     * @param token
     * @param ids
     * @return
     * @throws RemoveException
     */
    SuccessResult remove${firstUpperTableName}ByToken(String token, String ids) throws RemoveException;

    /**
     * 修改${tableExplain}
     *
     * @param ${firstLowerTableName}Id
     * @param ${firstLowerTableName}VO
     * @return
     * @throws Exception
     */
    SuccessResult update${firstUpperTableName}(String ${firstLowerTableName}Id, ${firstUpperTableName}VO ${firstLowerTableName}VO) throws Exception;

    /**
     * 修改${tableExplain}(APP)
     *
     * @param token
     * @param ${firstLowerTableName}Id
     * @param ${firstLowerTableName}VO
     * @return
     * @throws Exception
     */
    SuccessResult update${firstUpperTableName}ByToken(String token, String ${firstLowerTableName}Id, ${firstUpperTableName}VO ${firstLowerTableName}VO) throws Exception;

    /**
     * ${tableExplain}详情(通过ID)
     *
     * @param ${firstLowerTableName}Id
     * @return
     * @throws SearchException
     */
    ${firstUpperTableName}DTO get${firstUpperTableName}ById(String ${firstLowerTableName}Id) throws SearchException;

    /**
     * ${tableExplain}列表
     *
     * @param params
     * @return
     * @throws SearchException
     */
    List<${firstUpperTableName}DTO> list${firstUpperTableName}(Map<String, Object> params) throws SearchException;

    /**
     * ${tableExplain}分页列表
     *
     * @param page
     * @return
     * @throws SearchException
     */
    SuccessResultList<List<${firstUpperTableName}DTO>> listPage${firstUpperTableName}(ListPage page) throws SearchException;

    /**
     * ${tableExplain}统计
     *
     * @param params
     * @return
     * @throws SearchException
     */
    Integer countNumber${firstUpperTableName}(Map<String, Object> params) throws SearchException;

    /**
     * ${tableExplain}统计
     *
     * @param params
     * @return
     * @throws SearchException
     */
    SuccessResultData<Integer> count${firstUpperTableName}(Map<String, Object> params) throws SearchException;

}