package com.vci.web.service; import com.vci.client.bof.ClientBusinessObject; import com.vci.common.qt.object.Condition; import com.vci.common.qt.object.QueryTemplate; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.DataGrid; import com.vci.starter.web.pagemodel.PageHelper; import com.vci.starter.web.wrapper.VciQueryWrapperForDO; import com.vci.web.pageModel.BatchCBO; import java.util.Collection; import java.util.List; import java.util.Map; /** * 业务类型操作服务---只能在dao层调用,其他的服务不允许使用 * 自动封装了平台相关的操作 * @author weidy */ public interface WebBoServiceI { /** * 是否使用数据权限过滤 * 在查询中conditonMap里面设置这个key即可 */ final String QUERY_FILTER_DATARIGHT = "${QUERY_FILTER_DATARIGHT}"; /** * 是否使用密级过滤 */ final String QUERY_FILTER_SECRET="${QUERY_FILTER_SECRET}"; /** * 初始化业务类型 * --第一次调用的时候会相对慢一下,后续获取就很快的 * --注意在服务启动时才会清除缓存 * --创建人默认为当前用户,如果需要修改,可以在获取后自行处理 * @param btmName 业务类型的名称,会自动变成小写 * @return * @throws VciBaseException */ ClientBusinessObject createCBOByBtmName(String btmName) throws VciBaseException; /** * 根据查询条件来查询业务类型下的数据 * @param btmType 业务类型的名称,会自动变成小写 * @param conditionMap 查询条件,注意介于...之间使用xxx_start和xxx_end * @return * @throws VciBaseException */ List queryCBO(String btmType, Map conditionMap) throws VciBaseException; /** * 支持排序和分页的查询业务类型下的数据 * @param btmType 业务类型的名称 * @param conditionMap 查询条件,注意介于...之间使用xxx_start和xxx_end * @param ph 排序和分页 * @return * @throws VciBaseException */ List queryCBO(String btmType, Map conditionMap, PageHelper ph) throws VciBaseException; /** * 支持自定义查询字段(包括参照、枚举和生命周期) * @param btmType 业务类型 * @param conditionMap 查询条件 * @param ph 分页和排序 * @param clauseList 查询字段,参照字段使用xxxx.yy;枚举字段使用xxx_enumCode;生命周期会自动处理为lcStatus_text * @return * @throws VciBaseException */ List queryCBO(String btmType, Map conditionMap, PageHelper ph, List clauseList) throws VciBaseException; /** * 拷贝分页和排序的设置到查询模板 * @param qt 查询,模板 * @param pageHelper 分页对象 */ void setPageAndOrderToQT(QueryTemplate qt, PageHelper pageHelper); /** * 查询枚举的信息 * @param cbo 业务数据 * @param clo 链接属性 * @param enumAttrName 枚举的名称 * @throws VciBaseException 查询枚举出错的时候会抛出异常 */ void queryEnumText(com.vci.client.bof.ClientBusinessObject cbo, com.vci.client.bof.ClientLinkObject clo, List enumAttrName) throws VciBaseException; /** * 给链接类型设置属性 * @param clo 链接类型 * @param attributeName 属性的名称 * @param attributeValue 属性的值 */ void setAttributeValueForClo(com.vci.client.bof.ClientLinkObject clo, String attributeName, String attributeValue); /** * 使用查询方案来查询数据,返回CBO * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @param replaceMap 替换查询方案里的变量值 * @return * @throws VciBaseException */ List queryCBOByScheme(String queryScheme, Map conditionMap, Map replaceMap) throws VciBaseException; /** * 使用查询方案来查询数据,返回CBO,支持分页 * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @param replaceMap 替换查询方案里的变量值 * @param ph 分页和排序 * @return * @throws VciBaseException */ List queryCBOByScheme(String queryScheme, Map conditionMap, Map replaceMap, PageHelper ph) throws VciBaseException; /** * 使用名字获取查询模板 * @param name 名称 * @param replaceMap 源数据 * @return 查询模板 * @throws VciBaseException 查询出错的时候会抛出异常 */ QueryTemplate getQtByName(String name, Map replaceMap) throws VciBaseException; /** * 使用查询方案来查询数据,返回CBO,支持自定义查询字段,包括参照和枚举;参照字段使用xxx.yy;枚举字段使用xxx_enumCode * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @param replaceMap 替换查询方案里的变量值 * @param ph 分页和排序 * @param clauseList 查询字段 * @return * @throws VciBaseException */ List queryCBOByScheme(String queryScheme, Map conditionMap, Map replaceMap, PageHelper ph, List clauseList) throws VciBaseException; /** * 查询数量 * @param btmType 业务类型名称 * @param conditionMap 查询条件 * @return * @throws VciBaseException */ int queryCount(String btmType, Map conditionMap) throws VciBaseException; /** * 使用sql查询个数,最终的字段必须是count * @param sql 查询的sql * @param conditionMap 查询条件 * @return 个数, * @throws VciBaseException 查询出错的时候会抛出异常 */ int queryCountBySql(String sql,Map conditionMap) throws VciBaseException; /** * 使用查询方案来查询数量 * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @param replaceMap 替换查询方案里的变量值 * @return * @throws VciBaseException */ int queryCountByScheme(String queryScheme, Map conditionMap, Map replaceMap) throws VciBaseException; /** * 使用对象来查询数量 * @param c 对象所属类 * @param conditionMap 查询条件 * @return * @throws VciBaseException */ int queryCount(Class c, Map conditionMap) throws VciBaseException; /** * 根据sql语句来查询内容 * @param sql 为了防止SQL注入,值必须在sql语句里以:xxx格式,如 id =:idvalue,然后在conditionMap中添加建为idvalue的格式 * @param conditionMap 查询条件,必须与sql里对应 * @return CBO * @throws VciBaseException */ List queryBySql(String sql, Map conditionMap) throws VciBaseException; /** * 只用sql语句查询,这个和queryBySql区别是,特殊的sql(如包含有函数的)可以用这个方法,但是有sql注入风险 * @param sql sql语句,查询条件必须自行在其中处理完成 * @return CBO * @throws VciBaseException 查询出错活抛出异常 */ List queryByOnlySql(String sql) throws VciBaseException; /** * 只用sql语句查询,这个和queryBySqlForMap区别是,特殊的sql(如包含有函数的)可以用这个方法,但是有sql注入风险 * @param sql sql语句,查询条件必须自行在其中处理完成 * @return 数据映射 * @throws VciBaseException 查询出错活抛出异常 */ List queryByOnlySqlForMap(String sql) throws VciBaseException; /** * 使用sql语句查询后转换为对象 * @param sql sql语句 * @param tClass 对象的类 * @param 泛型 * @return 数据的列表 * @throws VciBaseException 查询和转换出错会抛出异常 */ List queryByOnlySqlForObj(String sql, Class tClass) throws VciBaseException; /** * 根据sql语句来查询内容,返回Map * @param sql 为了防止SQL注入,值必须在sql语句里以:xxx格式,如 id =:idvalue,然后在conditionMap中添加建为idvalue的格式 * @param conditionMap 查询条件,必须与sql里对应 * @return map数据 * @throws VciBaseException */ List queryBySqlForMap(String sql, Map conditionMap) throws VciBaseException; /** * 根据sql语句来查询内容,返回Map * @param sql 为了防止SQL注入,值必须在sql语句里以:xxx格式,如 id =:idvalue,然后在conditionMap中添加建为idvalue的格式 * @param conditionMap 查询条件,必须与sql里对应 * @param selectKeys 查询的字段 * @return map数据 * @throws VciBaseException */ List queryBySqlForMap(String sql, Map conditionMap, String[] selectKeys) throws VciBaseException; /** * 查询数据,返回对象,对象的字段上可以设置参照和枚举 * @param c 对象所属类 * @param conditionMap 查询条件 * @return * @throws VciBaseException */ List queryObject(Class c, Map conditionMap) throws VciBaseException; /** * 查询数据,返回对象,支持分页 * @param c 对象所属类 * @param conditionMap 查询条件 * @param ph 分页组件 * @return * @throws VciBaseException */ List queryObject(Class c, Map conditionMap, PageHelper ph) throws VciBaseException; /** * 使用查询方案来查询数据,返回对象,支持分页 * @param queryScheme 查询方案 * @param c 对象所属类 * @param conditionMap 查询条件 * @param ph 分页组件 * @return * @throws VciBaseException */ List queryObjectByScheme(String queryScheme, Class c, Map conditionMap, PageHelper ph) throws VciBaseException; /** * 使用查询方案来查询数据,返回对象,支持分页 * @param queryScheme 查询方案 * @param c 对象所属类 * @param conditionMap 查询条件 * @param ph 分页组件 * @param replaceMap 替换查询方案中的变量值 * @return * @throws VciBaseException */ List queryObjectByScheme(String queryScheme, Class c, Map conditionMap, PageHelper ph, Map replaceMap) throws VciBaseException; /** * 保存数据,可以在request中设置是否持久化 * @param obj 要保存的对象 * @param * @return 保存后包含的数据对象 * @throws VciBaseException */ BatchCBO addSave(T obj) throws VciBaseException; /** * 批量保存数据,可以在request里设置不持久化 * @param list 要保存的数据对象列表 * @return 需要创建的CBO,CLO;需要修改的CBO,CLO;需要删除的CBO,CLO * @throws VciBaseException */ BatchCBO batchAddSave(List list) throws VciBaseException; /** * 修改数据,可以在request里设置不持久化 * @param obj 修改数据对象 * @return 需要创建的CBO,CLO;需要修改的CBO,CLO;需要删除的CBO,CLO * @throws VciBaseException */ BatchCBO editSave(T obj) throws VciBaseException; /** * 批量修改数据,可以在request里设置不持久化 * @param list 要保存的数据对象列表 * @return 需要创建的CBO,CLO;需要修改的CBO,CLO;需要删除的CBO,CLO * @throws VciBaseException */ BatchCBO batchEditSave(List list) throws VciBaseException; /** * 删除数据,可以在request里设置不持久化 * @param obj 删除数据对象 * @return 需要创建的CBO,CLO;需要修改的CBO,CLO;需要删除的CBO,CLO * @throws VciBaseException */ BatchCBO delete(T obj,boolean checkRefered) throws VciBaseException; BatchCBO delete(T obj) throws VciBaseException; /** * 批量删除数据,可以在request里设置不持久化 * @param list 需要删除数据对象列表 * @return 需要创建的CBO,CLO;需要修改的CBO,CLO;需要删除的CBO,CLO,checkRefered:[false/true]是否检查被引用,默认不检查 * @throws VciBaseException */ BatchCBO batchDelete(List list,boolean checkRefered) throws VciBaseException; BatchCBO batchDelete(List list) throws VciBaseException; /** * 根据查询条件来删除数据 * @param c 删除数据对象所属类 * @param conditionMap 查询条件 * @return 需要创建的CBO,CLO;需要修改的CBO,CLO;需要删除的CBO,CLO * @throws VciBaseException */ BatchCBO deleteByCondition(Class c, Map conditionMap) throws VciBaseException; /** * 根据查询条件来删除数据 * @param btmType 业务类型名称 * @param conditionMap 查询条件 * @return 需要创建的CBO,CLO;需要修改的CBO,CLO;需要删除的CBO,CLO * @throws VciBaseException */ BatchCBO deleteByCondition(String btmType, Map conditionMap) throws VciBaseException; /** * 通过sql语句来删除 * @param sql 防止SQL注入,值必须使用:xxx方式,如id=:idvalue,并在conditionMap里放置idvalue为key的数据 * @param conditionMap 查询条件 * @return 删除的数据量 * @throws VciBaseException */ BatchCBO deleteBySql(String sql, Map conditionMap) throws VciBaseException; /** * 检验是否为最新的 * @param obj 数据对象,里面必须包括主键和ts字段 * @return 相等时为true * @throws VciBaseException */ boolean checkTs(Object obj) throws VciBaseException; /** * 根据业务类型来查询列表数据; * @param btmType 业务类型名称 * @param conditionMap 查询条件 * @return 列表数据,数据是Map形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridByBo(String btmType, Map conditionMap) throws VciBaseException; /** * 根据业务类型来查询列表数据;可以在pageHelper中设置是否查询总数 * @param btmType 业务类型名称 * @param conditionMap 查询条件 * @param ph 分页和排序组件 * @return 列表数据,数据是Map形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridByBo(String btmType, Map conditionMap, PageHelper ph) throws VciBaseException; /** * 根据业务类型来查询列表数据;可以设置要查询的字段,包括参照和枚举字段;可以在pageHelper中设置是否查询总数 * @param btmType 业务类型名称 * @param conditionMap 查询条件 * @param ph 分页和排序组件 * @param clauseList 列表数据,数据是Map形式的, * @return 列表数据,数据是Map形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridByBo(String btmType, Map conditionMap, PageHelper ph, List clauseList) throws VciBaseException; /** * 根据查询方案来查询列表数据; * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @return 列表数据,数据是Map形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridByScheme(String queryScheme, Map conditionMap) throws VciBaseException; /** * 根据查询方案来查询列表数据; * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @param replaceMap 替换查询方案的变量值 * @return 列表数据,数据是Map形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridByScheme(String queryScheme, Map conditionMap, Map replaceMap) throws VciBaseException; /** * 根据查询方案来查询列表数据;可以在pageHelper中设置是否查询总数,pageHelper的优先级最大; * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @param replaceMap 替换查询方案的变量值 * @param ph 分页和排序字段 * @return 列表数据,数据是Map形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridByScheme(String queryScheme, Map conditionMap, Map replaceMap, PageHelper ph) throws VciBaseException; /** * 根据查询方案来查询列表数据,可以自定义查询的列,包括参照和枚举 * @param queryScheme 查询方案 * @param conditionMap 查询条件 * @param replaceMap 替换查询方案的变量值 * @param ph 分页和排序字段 * @param clauseList 查询的列,参照使用xx.yy;枚举使用xx_enumCode; * @return 列表数据,数据是Map形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridByScheme(String queryScheme, Map conditionMap, Map replaceMap, PageHelper ph, List clauseList) throws VciBaseException; /** * 查询对象的列表数据 * @param c 查询对象所属类 * @param conditionMap 查询条件 * @return 列表数据,数据是对象形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridClass(Class c, Map conditionMap) throws VciBaseException; /** * 查询对象的列表数据 * @param c 查询对象所属类 * @param conditionMap 查询条件 * @param ph 分页和排序字段,可以设置是否查询总数 * @return 列表数据,数据是对象形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridClass(Class c, Map conditionMap, PageHelper ph) throws VciBaseException; /** * 通过查询方案查询对象的列表数据 * @param queryScheme 查询方案 * @param c 查询对象所属类 * @param conditionMap 查询条件 * @return 列表数据,数据是对象形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridClassByScheme(String queryScheme, Class c, Map conditionMap, Map replaceMap) throws VciBaseException; /** * 通过查询方案查询对象的列表数据 * @param queryScheme 查询方案 * @param c 查询对象所属类 * @param conditionMap 查询条件 * @param ph 分页和排序字段,可以设置是否查询总数 * @return 列表数据,数据是对象形式的,包含分页信息 * @throws VciBaseException */ DataGrid queryGridClassByScheme(String queryScheme, Class c, Map conditionMap, Map replaceMap, PageHelper ph) throws VciBaseException; /** * ClientBusinessObject 转为HashMap * @param cbos CBOS * @return map * @throws VciBaseException */ List cbos2Map(List cbos) throws VciBaseException; /** * ClientBusinessObject 转为HashMap * @param cbo * @return * @throws VciBaseException */ Map cbo2Map(com.vci.client.bof.ClientBusinessObject cbo) throws VciBaseException; /** * map转为clientBusinessObject * @param map * @return * @throws VciBaseException */ List map2Cbos(List map) throws VciBaseException; /** * map转为clientBusinessObject * @param map * @return * @throws VciBaseException */ ClientBusinessObject map2Cbo(Map map) throws VciBaseException; /** * 批量保存业务类型和链接类型的信息 * @param batchCbos 批量数据容器 * @throws VciBaseException */ void persistenceBatch(BatchCBO batchCbos) throws VciBaseException; /** * 批量保存业务类型和链接类型的信息---只有确保数据容器里有参照字段,枚举字段等内容的时候,才调用这个方法,因为这个方法性能低下 * @param batchCbos 批量数据容器 * @param isCheckReferColumn 是否校验是否含有参照字段 * @throws VciBaseException */ void persistenceBatch(BatchCBO batchCbos, boolean isCheckReferColumn) throws VciBaseException; /** * 获取查询条件, * @param conditionMap * @return */ Condition getConditionByMap(Map conditionMap); /** * 根据属性来查询主键 * @param referInfo 业务类型.属性名 * @param value 属性的值 * @return * @throws VciBaseException */ Map queryOidByPropertie(String referInfo, List value) throws VciBaseException; /** * 校验特定属性的值是否存在 * @param btmName 业务类型 * @param columnName 列名称 * @param columnValues 列的值 * @return * @throws VciBaseException */ boolean checkDataExsitByColumn(String btmName, String columnName, Collection columnValues) throws VciBaseException; /** * 校验特定属性的值是否存在 * @param btmName 业务类型 * @param columnName 列名称 * @param columnValues 列的值 * @return * @throws VciBaseException */ boolean checkDataExsitByColumn(String btmName, String columnName, String columnValues) throws VciBaseException; /** * 使用主键获取对象 * @param oid 主键 * @param doClass 数据对象的类 * @return 数据对象 * @throws VciBaseException 参数为空,数据对象不存在会抛出异常 */ T selectByOid(String oid, Class doClass) throws VciBaseException; /** * 使用主键获取对象 * @param oid 主键 * @param btmName 业务类型的名称 * @return cbo * @throws VciBaseException 参数为空,数据不存在会抛出异常 */ ClientBusinessObject selectCBOByOid(String oid,String btmName) throws VciBaseException; /** * 使用主键集合获取对象 * @param oidCollection 主键集合 * @param doClass 数据对象的类 * @return 数据对象, 为空的时候列表为空,不是Null * @throws VciBaseException 参数为空,查询出错会抛出异常 */ List selectByOidCollection(Collection oidCollection, Class doClass) throws VciBaseException; /** * 使用主键集合获取对象 * @param oidCollection 主键集合 * @param btmName 业务类型的名称 * @return 业务数据的集合 * @throws VciBaseException 参数为空,查询出错会抛出异常 */ List selectCBOByOidCollection(Collection oidCollection,String btmName) throws VciBaseException; /** * 使用新的查询封装器来查询 * @param queryWrapperForDO 查询封装器 * @param doClass 对象的所属类 * @param 泛型 * @return 数据 * @throws VciBaseException 查询出错的会抛出异常 */ List selectByQueryWrapper(VciQueryWrapperForDO queryWrapperForDO,Class doClass) throws VciBaseException; /** * 使用新的查询封装器来查询总数 * @param queryWrapperForDO 查询封装器 * @param doClass 对象的所属类 * @param 泛型 * @return 数据 * @throws VciBaseException 查询出错的会抛出异常 */ int countByQueryWrapper(VciQueryWrapperForDO queryWrapperForDO,Class doClass) throws VciBaseException; /** * 是否为修改忽略的属性 * @param attrName 属性的名字 * @return true 表示应该忽略 */ default boolean checkUnAttrUnEdit(String attrName){ return (VciQueryWrapperForDO.OID_FIELD.equalsIgnoreCase(attrName) ||"ts".equalsIgnoreCase(attrName) || "lastmodifier".equalsIgnoreCase(attrName) || "lastmodifytime".equalsIgnoreCase(attrName) || "createtime".equalsIgnoreCase(attrName) || "checkintime".equalsIgnoreCase(attrName) ||"checkouttime".equalsIgnoreCase(attrName)); } }