package com.vci.ubcs.ddl.service; import com.vci.starter.word.bo.WordMergeStartTableDataBO; import com.vci.ubcs.ddl.bo.DdlTableBO; import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO; import com.vci.ubcs.omd.dto.BtmTypeDTO; import com.vci.ubcs.omd.entity.ModifyAttributeInfo; import com.vci.ubcs.omd.vo.BtmTypeAttributeVO; import com.vci.ubcs.omd.vo.BtmTypeVO; import com.vci.ubcs.omd.vo.LinkTypeAttributeVO; import com.vci.ubcs.omd.vo.LinkTypeVO; import com.vci.ubcs.starter.exception.VciBaseException; import org.springblade.core.tool.api.R; import java.util.Collection; import java.util.List; /** * Description: 数据库操作服务类 * 注意的是,oracle对于DDL操作都会先提交一次事务,当执行完成后会再次提交一次事务 * * @author LiHang * @date 2023/4/24 */ public interface IDdlService { /** * 校验业务类型的数据库表中是否有数据 * @param pkBtmType 业务类型的主键 * @return true表示有数据,false表示没有数据 * @throws VciBaseException 参数为空或者查询出错的时候会抛出异常 */ boolean checkTableHasData(String pkBtmType) throws VciBaseException; /** * 根据业务类型或者链接类型的主键获取数据库表格的名称 * @param pkBtmType 业务类型或者链接类型的主键 * @return 数据库表名称 */ String getTableNameByBtmTypeOid(String pkBtmType); /** * 根据业务类型获取链接类型的英文名称获取数据库表格的名称 * @param id 业务类型获取链接类型的英文名称 * @return 数据库表名称 */ String getTableNameByBtmTypeId(String id); /** * 校验业务类型的数据库表中是否有数据 * @param id 业务类型的英文名称 * @return true表示有数据,false表示没有数据 * @throws VciBaseException 参数为空或者查询出错的时候会抛出异常 */ boolean checkTableHasDataById(String id) throws VciBaseException; /** * 批量将业务类型创建数据库表 * @param pkBtmTypes 业务类型的主键 * @throws VciBaseException 参数为空或者创建表出现了错误的时候会抛出异常 */ void createDbTables(String pkBtmTypes) throws VciBaseException; /** * 批量将业务类型创建数据库表 * @param oidCollection 业务类型的主键集合 * @throws VciBaseException 参数为空或者创建表出现了错误的时候会抛出异常 */ void createDbTablesByOidCollection(Collection oidCollection) throws VciBaseException; /** * 获取创建的sql语句中属性部分 * @param attributeVOList 属性的立碑 * @return sql语句 */ String getCreateSqlByAttributeForBtm(List attributeVOList); /** * 批量将业务类型创建数据库表 * @param ids 业务类型的英文名称 * @throws VciBaseException 参数为空或者创建表出现了错误的时候会抛出异常 */ void createDbTablesById(String ids) throws VciBaseException; /** * 修改业务类型中的属性字段的长度,注意在执行这个方法时就会将以前的事务提交。 * @param modifyLengthAttrDOList 需要修改的属性对象 * @throws VciBaseException 执行出错的时候会抛出异常 */ void changeColumnForBtm(List modifyLengthAttrDOList) throws VciBaseException; /** * 修改链接类型中的属性字段的长度,注意在执行这个方法时就会将以前的事务提交。 * @param modifyLengthAttrDOListForLinkType 需要修改的属性对象 * @throws VciBaseException 执行出错的时候会抛出异常 */ void changeColumnForLink(List modifyLengthAttrDOListForLinkType) throws VciBaseException; /** * 添加属性字段到业务类型中,注意在执行这个方法时就会将以前的事务提交。 * @param addAttrDOList 需要添加的属性对象 * @throws VciBaseException 执行出错的时候会抛出异常 */ void addColumn2TableForBtm(List addAttrDOList) throws VciBaseException; /** * 添加属性字段到链接类型中,注意在执行这个方法时就会将以前的事务提交。 * @param addAttrDOListForLinkType 需要添加的属性对象 * @throws VciBaseException 执行出错的时候会抛出异常 */ void addColumn2TableForLink(List addAttrDOListForLinkType) throws VciBaseException; /** * 判断表中是否有数据 * @param tableName 表格的名称 * @return true表示有数据,false表示没有数据,或者这个表格不存在的时候抛出异常 * @throws VciBaseException 参数错误的时候抛出异常 */ boolean checkTableHasDataByTableName(String tableName) throws VciBaseException; /** * 创建视图 * @param viewCreateSql 视图的SQL语句 * @throws VciBaseException 参数错误或者执行错误的时候会抛出异常,执行错误主要包括SQL语句错误,没有权限等 */ void createViewBySql(String viewCreateSql) throws VciBaseException; /** * 删除表格或者视图 * @param tableName 表格名称或者视图名称 * @throws VciBaseException 参数错误或者执行错误的时候会抛出异常 */ void dropTableByName(String tableName) throws VciBaseException; /** * 删除表格的某一列 * @param tableName 表格名称 * @param columnName 列的名称 */ void dropColumnByName(String tableName, String columnName); /** * 校验业务类型或者链接类型的对应的表格是否存在 * @param pkBtmType 业务类型或者链接类型的表格 * @return true表示存在,false表示不存在 */ boolean checkTableExist(String pkBtmType); /** * 根据表格的名称判断表格是否存在 * @param tableName 表格名称 * @return rue表示存在,false表示不存在 */ boolean checkTableExistByTableName(String tableName); /** * 校验业务类型或者链接类型所对应的表格是否存在 * @param id 业务类型或者链接类型的英文名称 * @return true表示存在,false表示不存在 */ boolean checkTableExistById(String id); /** * 获取数据库和业务类型中的不同的地方 * @param btmTypeVOList 业务类型对象,有属性时需要包含属性 * @param linkTypeVOList 链接类型对象,有属性时需要包含属性 * @return 不同的地方,每一个业务类型或者链接类型一条数据 */ List checkDifferent(List btmTypeVOList, List linkTypeVOList) throws VciBaseException; /** * 清理业务类型中和数据库里不一样的 * @param differentAttributeList 不同的属性的列表 * @param btmTypeVOList 业务类型数据 * @param linkTypeVOList 链接类型数据 * @throws VciBaseException 参数为空或者执行出错的时候会抛出异常 */ void reflexDifferent(List differentAttributeList,List btmTypeVOList, List linkTypeVOList) throws VciBaseException; /** * 获取数据库中所有的表格 * @return 表格的名称,全是大写 */ List listAllTableName() ; /** * 查询数据库中的表格信息 * @param tableNamesCollections 数据库表名集合 * @return 在数据库中的信息 * @throws VciBaseException 参数为空或者数据库表不存在的时候会抛出异常 */ List listTableInfoInDB(Collection tableNamesCollections) throws VciBaseException; /** * 导出数据库中的表格信息到excel文件 * @param tableNamesCollections 表格名称的集合 * @param merge 合并表格名称 * @return excel的文件名称 * @throws VciBaseException 蚕食为空或者数据库表不存在的时候会抛出异常 */ String exportDataBase2File(Collection tableNamesCollections,boolean merge) throws VciBaseException; /** * 获取存储文件所需要的临时文件夹,文件夹上已经包含了 * @return 文件夹的地址,如果配置文件没有配置,则默认返回当前项目所在的文件夹 */ String getTempFolder(); /** * 导出数据库中的表格信息到word文件中 * @param tableNamesCollections 表格名称的集合 * @return word的文件名称 * @throws VciBaseException 蚕食为空或者数据库表不存在的时候会抛出异常 */ String exportDataBase2Word(List tableNamesCollections) throws VciBaseException; /** * 拷贝数据到word模板中 * @param tableDataBO 要写入的数据 * @return word 文件路径 */ String writeDataToWord(WordMergeStartTableDataBO tableDataBO); /** * 判断是否为兼容性的表,这些表不应该被创建和修改 * @param btmTypeId 业务类型的英文名称 * @param linkTypeId 业务类型的中文名称 * @return true 表示为兼容性的表,用户,角色,部门,权限这些 */ boolean isCompatibilityTable(String btmTypeId,String linkTypeId); /** * 数据库新增或修改表 * @param ddlDTO 业务类型传输对象 * @return 执行结果 */ R submit(BtmAndLinkTypeDdlDTO ddlDTO); /** * 按表名获取表信息 * @param tableName 表名 * @return 表信息 */ DdlTableBO getTableColumnByTableName(String tableName); /** * 获取所有表信息 * @return 表信息集合 */ List getAllTableInfo(); }