From edd0231f6f9d69df75c52439c104e5126820ac4a Mon Sep 17 00:00:00 2001 From: ludc Date: 星期二, 30 一月 2024 16:40:34 +0800 Subject: [PATCH] 分类授权数据授权,界面修改;业务类型修改表字段信息接口提示信息修改 --- Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java | 869 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 679 insertions(+), 190 deletions(-) diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java index 4889862..651433a 100644 --- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java @@ -1,26 +1,30 @@ package com.vci.ubcs.ddl.service.impl; -import com.alibaba.nacos.client.naming.NacosNamingService; -import com.vci.starter.web.util.VciBaseUtil; -import com.vci.starter.word.bo.WordMergeStartTableDataBO; + +import com.alibaba.cloud.commons.lang.StringUtils; +import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException; import com.vci.ubcs.ddl.bo.DdlTableBO; import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO; -import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessStrategy; +import com.vci.ubcs.ddl.enums.BusinessTypeEnum; +import com.vci.ubcs.ddl.enums.ModifyTableTaskEnum; import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessor; import com.vci.ubcs.ddl.processor.dll.DllMapperProcessor; -import com.vci.ubcs.ddl.processor.dll.DllMapperProcessorStrategy; -import com.vci.ubcs.ddl.properties.DdlExportWordFieldProperties; import com.vci.ubcs.ddl.properties.DdlPropertise; import com.vci.ubcs.ddl.service.IDdlService; -import com.vci.ubcs.omd.cache.OmdBtmTypeCache; -import com.vci.ubcs.omd.dto.OmdBtmTypeDTO; -import com.vci.ubcs.omd.entity.OsModifyAttributeInfoDO; -import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO; -import com.vci.ubcs.omd.vo.OmdBtmTypeVO; -import com.vci.ubcs.omd.vo.OsLinkTypeAttributeVO; -import com.vci.ubcs.omd.vo.OsLinkTypeVO; +import com.vci.ubcs.omd.cache.BtmTypeCache; +import com.vci.ubcs.omd.constant.BtmTypeFieldConstant; +import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant; +import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO; +import com.vci.ubcs.omd.dto.TableAddColumnDTO; +import com.vci.ubcs.omd.dto.TableCheckDTO; +import com.vci.ubcs.omd.dto.TableCheckResultDTO; +import com.vci.ubcs.omd.entity.ModifyAttributeInfo; +import com.vci.ubcs.omd.vo.*; import com.vci.ubcs.starter.exception.VciBaseException; -import org.apache.commons.lang3.StringUtils; +import com.vci.ubcs.starter.web.enumpck.BooleanEnum; +import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum; +import com.vci.ubcs.starter.web.util.VciBaseUtil; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; @@ -29,7 +33,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import javax.annotation.Resource; +import javax.validation.constraints.NotNull; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** @@ -50,95 +57,72 @@ /** * word瀵煎嚭鐨勬椂鍊欑殑鍩熷瓧娈垫槧灏� */ - @Autowired - private DdlExportWordFieldProperties wordFieldProperties; +// @Autowired +// private DdlExportWordFieldProperties wordFieldProperties; /** * ddl鏁版嵁鎿嶄綔鏈嶅姟 */ - private final DdlMapperProcessor ddlMapper = DdlMapperProcessStrategy.getProcessor(); + @Autowired + private DdlMapperProcessor ddlMapper; + /** * dll鏁版嵁鎿嶄綔鏈嶅姟 */ - private final DllMapperProcessor dllMapper = DllMapperProcessorStrategy.getProcessor(); + @Autowired + private DllMapperProcessor dllMapper; - /** - * 琛ㄥ悕鍓嶇紑 - */ - private final String TABLE_PREFIX = "PL"; + private static final String YES = "Y"; - /** - * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹� - * - * @param pkBtmType 涓氬姟绫诲瀷鐨勪富閿� - * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁 - * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父 - */ - @Override - public boolean checkTableHasData(String pkBtmType) throws VciBaseException { - return checkTableHasDataByTableName(getTableNameByBtmTypeOid(pkBtmType)); - } + private static final String NO = "N"; - /** - * 鏍规嵁涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭鑾峰彇鏁版嵁搴撹〃鏍肩殑鍚嶇О - * - * @param pkBtmType 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭 - * @return 鏁版嵁搴撹〃鍚嶇О - */ - @Override - public String getTableNameByBtmTypeOid(String pkBtmType) { - VciBaseUtil.alertNotNull(pkBtmType, "涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑涓婚敭"); - OmdBtmTypeVO btmType = OmdBtmTypeCache.getDetail(pkBtmType); - String tableName = ""; - if (btmType == null || StringUtils.isBlank(btmType.getOid())) { - /*OsLinkTypeDO linkTypeDO = linkTypeDOMapper.selectByPrimaryKey(pkBtmType.trim()); - if(linkTypeDO == null || StringUtils.isBlank(linkTypeDO.getOid()) ){ - throw new com.vci.starter.web.exception.VciBaseException("涓嶆槸涓氬姟绫诲瀷锛屼篃涓嶆槸閾炬帴绫诲瀷锛岃鏌ヨ瘉"); - }else{ - tableName = linkTypeService.getTableName(linkTypeDO.getId()); - }*/ + private final Map<String, BtmTypeVO> idBtmMap = new ConcurrentHashMap<>(); + + private final Map<String, LinkTypeVO> idLinkMap = new ConcurrentHashMap<>(); + + private void putBtm(@NotNull BtmTypeVO... voList) throws Throwable { + String collect = Arrays.stream(voList).map(BtmTypeVO::getId).filter(idBtmMap::containsKey).collect(Collectors.joining(",")); + if (StringUtils.isBlank(collect)) { + Arrays.stream(voList).forEach(vo -> { + idBtmMap.put(vo.getId(), vo); + }); } else { - tableName = btmType.getTableName(); + throw new Throwable("涓氬姟绫诲瀷:[" + collect + "]姝e湪琚叾浠栫敤鎴锋搷浣�"); } - return tableName; } - /** - * 鏍规嵁涓氬姟绫诲瀷鑾峰彇閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉拌幏鍙栨暟鎹簱琛ㄦ牸鐨勫悕绉� - * - * @param id 涓氬姟绫诲瀷鑾峰彇閾炬帴绫诲瀷鐨勮嫳鏂囧悕绉� - * @return 鏁版嵁搴撹〃鍚嶇О - */ - @Override - public String getTableNameByBtmTypeId(String id) { - VciBaseUtil.alertNotNull(id, "涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑鑻辨枃鍚嶇О"); - List<OmdBtmTypeVO> btmTypeList = OmdBtmTypeCache.selectByIdCollection(VciBaseUtil.str2List(id)); - String tableName = ""; - if (CollectionUtils.isEmpty(btmTypeList)) { - /*List<OsLinkTypeDO> linkTypeDOList = linkTypeDOMapper.selectByIdCollection(VciBaseUtil.str2List(id)); - if(CollectionUtils.isEmpty(linkTypeDOList)){ - throw new com.vci.starter.web.exception.VciBaseException("涓嶆槸涓氬姟绫诲瀷锛屼篃涓嶆槸閾炬帴绫诲瀷锛岃鏌ヨ瘉"); - }else{ - tableName = linkTypeService.getTableName(linkTypeDOList.get(0).getId()); - }*/ + private void putLink(@NotNull LinkTypeVO... voList) throws Throwable { + String collect = Arrays.stream(voList).map(LinkTypeVO::getId).filter(idLinkMap::containsKey).collect(Collectors.joining(",")); + if (StringUtils.isBlank(collect)) { + Arrays.stream(voList).forEach(vo -> { + idLinkMap.put(vo.getId(), vo); + }); } else { - tableName = btmTypeList.get(0).getTableName(); + throw new Throwable("閾炬帴绫诲瀷:[" + collect + "]姝e湪琚叾浠栫敤鎴锋搷浣�"); } - return tableName; } - /** - * 鏍¢獙涓氬姟绫诲瀷鐨勬暟鎹簱琛ㄤ腑鏄惁鏈夋暟鎹� - * - * @param id 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉� - * @return true琛ㄧず鏈夋暟鎹紝false琛ㄧず娌℃湁鏁版嵁 - * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮煡璇㈠嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父 - */ - @Override - public boolean checkTableHasDataById(String id) throws VciBaseException { - return checkTableHasDataByTableName(getTableNameByBtmTypeId(id)); + private void removeBtm(@NotNull BtmTypeVO... btmTypeVO) throws ServiceException { + if (Arrays.stream(btmTypeVO).allMatch(s -> idBtmMap.containsKey(s.getId()))) { + for (BtmTypeVO vo : btmTypeVO) { + idBtmMap.remove(vo.getId()); + } + } else { + throw new ServiceException("瑙i攣瀵硅薄涓嶅瓨鍦�"); + } } + + private void removeLink(@NotNull LinkTypeVO... linkTypeVO) throws ServiceException { + if (Arrays.stream(linkTypeVO).allMatch(s -> idLinkMap.containsKey(s.getId()))) { + for (LinkTypeVO vo : linkTypeVO) { + idLinkMap.remove(vo.getId()); + } + } else { + throw new ServiceException("瑙i攣瀵硅薄涓嶅瓨鍦�"); + } + } + /** * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛� @@ -160,8 +144,8 @@ */ @Override public void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException { - VciBaseUtil.alertCollectionNotNull("涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勪富閿泦鍚�", oidCollection); - List<OmdBtmTypeVO> btmTypeVOList = OmdBtmTypeCache.listBtmTypeByOidCollection(oidCollection); + VciBaseUtil.alertNotNull("涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勪富閿泦鍚�", oidCollection); + List<BtmTypeVO> btmTypeVOList = BtmTypeCache.listBtmTypeByOidCollection(oidCollection); // List<OsLinkTypeVO> linkTypeVOList = linkTypeService.listLinkTypeByOidCollection(oidCollection); if (!CollectionUtils.isEmpty(btmTypeVOList)) { //璇存槑鏄笟鍔$被鍨� @@ -181,7 +165,7 @@ * @param btmTypeVO 涓氬姟绫诲瀷鐨勬樉绀哄璞� * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 */ - private void createDbTableForBtm(OmdBtmTypeVO btmTypeVO) throws VciBaseException { + private void createDbTableForBtm(BtmTypeVO btmTypeVO) throws VciBaseException { VciBaseUtil.alertNotNull(btmTypeVO, "瑕佸垱寤鸿〃鏍兼墍灞炵殑涓氬姟绫诲瀷", btmTypeVO.getTableName(), "涓氬姟绫诲瀷鐨勮〃鏍煎悕绉�"); if (btmTypeVO.isViewFlag() && StringUtils.isNotBlank(btmTypeVO.getViewCreateSql())) { //璇存槑鏄鍥� @@ -189,16 +173,72 @@ } else { String tableName = btmTypeVO.getTableName(); if (!checkTableExistByTableName(tableName)) { - String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(btmTypeVO.getAttributes()); + String attributeSql = getCreateSqlByAttributeForBtm(btmTypeVO.getAttributes()); dllMapper.createTableBySql(tableName, attributeSql); if (StringUtils.isNotBlank(btmTypeVO.getName())) { dllMapper.commentTable(tableName, btmTypeVO.getName()); } - btmTypeVO.getAttributes().stream().forEach(s -> { + btmTypeVO.getAttributes().forEach(s -> { dllMapper.commentColumnTable(tableName, s.getId(), s.getName()); }); } } + } + + /** + * 鍒涘缓閾炬帴绫诲瀷鐨勮〃鏍� + * + * @param linkTypeVO 閾炬帴绫诲瀷鐨勬樉绀哄璞� + * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 + */ + private void createDbTableForLink(LinkTypeVO linkTypeVO) throws VciBaseException { + VciBaseUtil.alertNotNull(linkTypeVO, "瑕佸垱寤鸿〃鏍兼墍灞炵殑涓氬姟绫诲瀷", linkTypeVO.getTableName(), "涓氬姟绫诲瀷鐨勮〃鏍煎悕绉�"); + String tableName = linkTypeVO.getTableName(); + if (!checkTableExistByTableName(tableName)) { + String attributeSql = getCreateSqlByAttributeForLink(linkTypeVO.getAttributes()); + dllMapper.createTableBySql(tableName, attributeSql); + if (StringUtils.isNotBlank(linkTypeVO.getName())) { + dllMapper.commentTable(tableName, linkTypeVO.getName()); + } + linkTypeVO.getAttributes().forEach(s -> { + dllMapper.commentColumnTable(tableName, s.getId(), s.getName()); + }); + } + } + /** + * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒� + * + * @param attributeVOList 灞炴�х殑绔嬬 + * @return sql璇彞 + */ + @Override + public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) { + StringBuilder sb = new StringBuilder(); + attributeVOList.forEach(a -> { + sb.append(a.getId()).append(StringPool.SPACE); + VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType()); + sb.append(dllMapper.getColumnTypeSql(fieldTypeEnum, a)).append(","); + }); + return sb.substring(0, sb.lastIndexOf(",")); + } + + /** + * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒� + * + * @param attributeVOList 灞炴�х殑绔嬬 + * @return sql璇彞 + */ + @Override + public String getCreateSqlByAttributeForLink(List<LinkTypeAttributeVO> attributeVOList) { + StringBuilder sb = new StringBuilder(); + attributeVOList.forEach(a -> { + BtmTypeAttributeVO attributeVO = Optional.ofNullable(BeanUtil.copy(a, BtmTypeAttributeVO.class)).orElseGet(BtmTypeAttributeVO::new); + attributeVO.setPkBtmType(a.getPkLinkType()); + sb.append(a.getId()).append(StringPool.SPACE); + VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType()); + sb.append(dllMapper.getColumnTypeSql(fieldTypeEnum, attributeVO)).append(","); + }); + return sb.substring(0, sb.lastIndexOf(",")); } /** @@ -210,19 +250,10 @@ @Override public void createDbTablesById(String ids) throws VciBaseException { VciBaseUtil.alertNotNull(ids, "涓氬姟绫诲瀷/閾炬帴绫诲瀷鐨勮嫳鏂囬泦鍚�"); - List<OmdBtmTypeVO> btmTypeVOList = OmdBtmTypeCache.selectByIdCollection(VciBaseUtil.str2List(ids)); -// List<OsLinkTypeVO> linkTypeVOList = linkTypeService.listLinkTypeByIdCollection(VciBaseUtil.str2List(ids)); - if (!CollectionUtils.isEmpty(btmTypeVOList)) { - //璇存槑鏄笟鍔$被鍨� - btmTypeVOList.forEach(this::createDbTableForBtm); - } - /*//璇曡瘯閾炬帴绫诲瀷 - if(!CollectionUtils.isEmpty(linkTypeVOList)){ - //鐨勭‘鏄摼鎺ョ被鍨� - linkTypeVOList.stream().forEach( s -> { - createDbTableForLink(s); - }); - }*/ + // 涓氬姟绫诲瀷 + Func.toStrList(",",ids).stream().filter(idBtmMap::containsKey).map(idBtmMap::get).forEach(this::createDbTableForBtm); + // 閾炬帴绫诲瀷 + Func.toStrList(",",ids).stream().filter(idLinkMap::containsKey).map(idLinkMap::get).forEach(this::createDbTableForLink); } /** @@ -232,11 +263,11 @@ * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 */ @Override - public void changeColumnForBtm(List<OmdBtmTypeAttributeVO> modifyLengthAttrVOList) throws VciBaseException { - VciBaseUtil.alertCollectionNotNull("瑕佷慨鏀归暱搴︾殑灞炴�ч泦", modifyLengthAttrVOList); - Map<String, List<OmdBtmTypeAttributeVO>> btmTypeHasAttributeVOMap = modifyLengthAttrVOList.stream().collect(Collectors.groupingBy(OmdBtmTypeAttributeVO::getPkBtmType)); + public void changeColumnForBtm(List<BtmTypeAttributeVO> modifyLengthAttrVOList) throws VciBaseException { + VciBaseUtil.alertNotNull("瑕佷慨鏀归暱搴︾殑灞炴�ч泦", modifyLengthAttrVOList); + Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeVOMap = modifyLengthAttrVOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType)); btmTypeHasAttributeVOMap.forEach((k, v) -> { - OmdBtmTypeVO btmTypeVO = OmdBtmTypeCache.getDetail(k); + BtmTypeVO btmTypeVO = BtmTypeCache.getDetail(k); if (btmTypeVO == null || StringUtils.isBlank(btmTypeVO.getOid())) { throw new VciBaseException("瑕佷慨鏀瑰睘鎬у垪闀垮害鐨勪笟鍔$被鍨嬩笉瀛樺湪"); } @@ -259,8 +290,8 @@ * @param tableName 琛ㄦ牸鐨勫悕绉� * @param attributeVOList 瑕佹坊鍔犵殑灞炴�у瓧娈� */ - private void changeColumnsForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) { - String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList); + private void changeColumnsForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) { + String attributeSql = getCreateSqlByAttributeForBtm(attributeVOList); //鍏堝垽鏂〃鏍兼槸鍚﹀瓨鍦� boolean tableExist = false; try { @@ -282,9 +313,9 @@ * @param tableName 琛ㄦ牸鍚嶇О * @param attributeVOList 灞炴�у璞″垪琛� */ - private void commentColumnsForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) { + private void commentColumnsForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) { if (StringUtils.isNotBlank(tableName) && !CollectionUtils.isEmpty(attributeVOList)) { - attributeVOList.stream().forEach(s -> { + attributeVOList.forEach(s -> { ddlMapper.commentColumnTable(tableName, s.getId(), s.getName()); }); } @@ -297,7 +328,7 @@ * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 */ @Override - public void changeColumnForLink(List<OsLinkTypeAttributeVO> modifyLengthAttrDOListForLinkType) throws VciBaseException { + public void changeColumnForLink(List<LinkTypeAttributeVO> modifyLengthAttrDOListForLinkType) throws VciBaseException { } @@ -308,13 +339,13 @@ * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 */ @Override - public void addColumn2TableForBtm(List<OmdBtmTypeAttributeVO> addAttrDOList) throws VciBaseException { - VciBaseUtil.alertCollectionNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓殑灞炴�ч泦", addAttrDOList); - Map<String, List<OmdBtmTypeAttributeVO>> btmTypeHasAttributeVOMap = addAttrDOList.stream().collect(Collectors.groupingBy(OmdBtmTypeAttributeVO::getPkBtmType)); - btmTypeHasAttributeVOMap.forEach((k, v) -> { - OmdBtmTypeVO btmTypeVO = OmdBtmTypeCache.getDetail(k); + public void addColumn2TableForBtm(List<BtmTypeAttributeVO> addAttrDOList) throws VciBaseException { + VciBaseUtil.alertNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓殑灞炴�ч泦", addAttrDOList); + Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeMap = addAttrDOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType)); + btmTypeHasAttributeMap.forEach((k, v) -> { + BtmTypeVO btmTypeVO = BtmTypeCache.getDetail(k); if (btmTypeVO == null || StringUtils.isBlank(btmTypeVO.getOid())) { - throw new com.vci.starter.web.exception.VciBaseException("瑕佷慨鏀瑰睘鎬у垪闀垮害鐨勪笟鍔$被鍨嬩笉瀛樺湪"); + throw new VciBaseException("瑕佷慨鏀瑰睘鎬у垪闀垮害鐨勪笟鍔$被鍨嬩笉瀛樺湪"); } if (!isCompatibilityTable(btmTypeVO.getId(), null)) { addColumnForTable(btmTypeVO.getTableName(), v); @@ -327,13 +358,13 @@ * * @param tableName 琛ㄦ牸鍚嶇О * @param attributeVOList 灞炴�х殑鏄剧ず瀵硅薄 - * @throws com.vci.starter.web.exception.VciBaseException 鎵ц鎴栬�呰幏鍙杝ql璇彞鐨勬椂鍊欏嚭鐜伴敊璇細鎶涘嚭寮傚父 + * @throws VciBaseException 鎵ц鎴栬�呰幏鍙杝ql璇彞鐨勬椂鍊欏嚭鐜伴敊璇細鎶涘嚭寮傚父 */ - private void addColumnForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) { - String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList); + private void addColumnForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) { + String attributeSql = getCreateSqlByAttributeForBtm(attributeVOList); //鍏堝垽鏂〃鏍兼槸鍚﹀瓨鍦� if (!checkTableExistByTableName(tableName)) { - OmdBtmTypeAttributeVO attributeVO = attributeVOList.get(0); + BtmTypeAttributeVO attributeVO = attributeVOList.get(0); createDbTables(attributeVO.getPkBtmType()); } else { ddlMapper.addColumn2TableBySql(tableName, attributeSql); @@ -348,8 +379,12 @@ * @throws VciBaseException 鎵ц鍑洪敊鐨勬椂鍊欎細鎶涘嚭寮傚父 */ @Override - public void addColumn2TableForLink(List<OsLinkTypeAttributeVO> addAttrDOListForLinkType) throws VciBaseException { + public void addColumn2TableForLink(List<LinkTypeAttributeVO> addAttrDOListForLinkType) throws VciBaseException { + VciBaseUtil.alertNotNull("瑕佹坊鍔犲埌鏁版嵁搴撹〃涓睘鎬ч泦",addAttrDOListForLinkType); + Map<String, List<LinkTypeAttributeVO>> linkTypeHasAttributeVOMap = addAttrDOListForLinkType.stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType)); + linkTypeHasAttributeVOMap.forEach((k,v) -> { + }); } /** @@ -408,16 +443,6 @@ ddlMapper.dropTableColumn(tableName, columnName); } - /** - * 鏍¢獙涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑瀵瑰簲鐨勮〃鏍兼槸鍚﹀瓨鍦� - * - * @param pkBtmType 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑琛ㄦ牸 - * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦� - */ - @Override - public boolean checkTableExist(String pkBtmType) { - return checkTableExistByTableName(getTableNameByBtmTypeOid(pkBtmType)); - } /** * 鏍规嵁琛ㄦ牸鐨勫悕绉板垽鏂〃鏍兼槸鍚﹀瓨鍦� @@ -430,16 +455,6 @@ return ddlMapper.checkTableExist(tableName) > 0; } - /** - * 鏍¢獙涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬫墍瀵瑰簲鐨勮〃鏍兼槸鍚﹀瓨鍦� - * - * @param id 涓氬姟绫诲瀷鎴栬�呴摼鎺ョ被鍨嬬殑鑻辨枃鍚嶇О - * @return true琛ㄧず瀛樺湪锛宖alse琛ㄧず涓嶅瓨鍦� - */ - @Override - public boolean checkTableExistById(String id) { - return checkTableExistByTableName(getTableNameByBtmTypeId(id)); - } /** * 鑾峰彇鏁版嵁搴撳拰涓氬姟绫诲瀷涓殑涓嶅悓鐨勫湴鏂� @@ -449,8 +464,283 @@ * @return 涓嶅悓鐨勫湴鏂癸紝姣忎竴涓笟鍔$被鍨嬫垨鑰呴摼鎺ョ被鍨嬩竴鏉℃暟鎹� */ @Override - public List<OsModifyAttributeInfoDO> checkDifferent(List<OmdBtmTypeVO> btmTypeVOList, List<OsLinkTypeVO> linkTypeVOList) throws VciBaseException { - return null; + public List<ModifyAttributeInfo> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException { + if (CollectionUtils.isEmpty(btmTypeVOList) && CollectionUtils.isEmpty(linkTypeVOList)) { + throw new VciBaseException("瑕佹鏌ョ殑涓氬姟绫诲瀷鍜岄摼鎺ョ被鍨嬩负绌�"); + } + List<ModifyAttributeInfo> modifyAttributeInfoList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(btmTypeVOList)) { + modifyAttributeInfoList.addAll(checkBtmType(btmTypeVOList)); + } + if (!CollectionUtils.isEmpty(linkTypeVOList)) { + modifyAttributeInfoList.addAll(checkLinkType(linkTypeVOList)); + } + if (!CollectionUtils.isEmpty(modifyAttributeInfoList)) { + reflexDifferent(modifyAttributeInfoList, btmTypeVOList, linkTypeVOList); + } + return modifyAttributeInfoList; + } + + /** + * 妫�鏌ヤ笟鍔$被鍨� + * + * @param btmTypeVOList 涓氬姟绫诲瀷 + * @return 妫�鏌ョ粨鏋� + */ + private List<ModifyAttributeInfo> checkBtmType(List<BtmTypeVO> btmTypeVOList) { + List<ModifyAttributeInfo> modifyAttributeInfoDOList = new ArrayList<>(); + btmTypeVOList.stream().filter(s -> !isCompatibilityTable(s.getId(),null)).forEach(btm -> { + ModifyAttributeInfo modifyAttributeInfo = new ModifyAttributeInfo(); + modifyAttributeInfo.setId(btm.getId()); + modifyAttributeInfo.setName(btm.getName()); + modifyAttributeInfo.setTableName(btm.getTableName()); + modifyAttributeInfo.setBusinessType(BusinessTypeEnum.BTM.getValue()); + // 1. 瑙嗗浘鍜屾柊寤虹殑锛岀洿鎺ュ垱寤猴紝璁板綍鍒涘缓鍘嗗彶 + if (btm.isViewFlag() || !checkTableExistByTableName(btm.getTableName())){ + modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CREATE.getValue()); + modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue()); + }else { + VciBaseUtil.alertNotNull(btm.getAttributes(),"涓氬姟绫诲瀷" + btm.getId() + "鐨勫睘鎬�"); + List<DdlTableInDataBaseBO> columnDataInTable = selectTableColumnInfo(btm.getTableName()); + if (CollectionUtils.isEmpty(columnDataInTable)){ + modifyAttributeInfo.setAddAttributes(btm.getAttributes().stream().map(s -> s.getId().toLowerCase().trim()).collect(Collectors.joining(","))); + modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.EDIT.getValue()); + modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue()); + }else { + // 2. 瀛樺湪鐨勬墠鍒ゆ柇锛屽垎鏂板灞炴�с�佸睘鎬ф洿鏀广�佸睘鎬у垹闄ゅ垎鍒搷浣� + // 3. 灞炴�ф搷浣滀腑鐗瑰埆鍒ゆ柇[鏄惁鎺у埗鐗堟湰][鏄惁鎺у埗瀵嗙骇][鏄惁鎺у埗鐢熷懡鍛ㄦ湡]鏉ユ坊鍔犲搴斿睘鎬� + Map<String, DdlTableInDataBaseBO> tableColumMap = columnDataInTable.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k)); + Map<String, BtmTypeAttributeVO> attributeMap = btm.getAttributes().stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k)); + List<String> addList = new ArrayList<>(); + List<String> editList = new ArrayList<>(); + List<String> deleteList = new ArrayList<>(); + List<String> beforeList = new ArrayList<>(); + attributeMap.forEach((k,v) -> { + String attributeLowId = k.toLowerCase(); + if (!checkIsDefaultColumn(attributeLowId)) { + if (tableColumMap.containsKey(k)) { + //璇存槑浠ュ墠涔熸湁锛岄偅灏辩湅鏄惁闇�瑕佷慨鏀� + DdlTableInDataBaseBO columnInDB = tableColumMap.get(k); + if (columnInDB.getAttributeLength() == null) { + columnInDB.setAttributeLength(0); + } + boolean needEdit = false; + if (!v.getName().equalsIgnoreCase(columnInDB.getName())) { + //璇存槑闇�瑕佷慨鏀� + needEdit = true; + } + if (needEdit || checkNeedEditAttr(v, columnInDB)) { + editList.add(v.getId()); + beforeList.add(columnInDB.getId() + StringPool.SPACE + columnInDB.getAttrDataType() + "(" + columnInDB.getAttributeLength() + ")" + StringPool.SPACE + columnInDB.getNullableFlag() + + StringPool.SPACE + columnInDB.getPrecisionLength() + StringPool.SPACE + columnInDB.getScaleLength() + StringPool.SPACE + columnInDB.getName()); + } + } else { + addList.add(v.getId()); + } + } else { + //閽堝榛樿灞炴�э紝濡傛灉浠ュ墠娌℃湁锛岀幇鍦ㄦ湁鍙互娣诲姞锛屽鏋滀互鍓� + if (!tableColumMap.containsKey(k)) { + boolean needAddNewField = false; + if (!BtmTypeLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btm.getLifeCycleId()) && BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.containsKey(attributeLowId)) { + needAddNewField = true; + } + if (StringUtils.isNotBlank(btm.getRevisionRuleId()) && BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.containsKey(attributeLowId)) { + needAddNewField = true; + } + if (btm.isSecretFlag() && BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.containsKey(attributeLowId)) { + needAddNewField = true; + } + if (needAddNewField) { + addList.add(v.getId()); + } + } + } + }); + tableColumMap.forEach((k, v) -> { + if (!attributeMap.containsKey(k)) { + deleteList.add(k); + } + }); + modifyAttributeInfo.setOrderModifyUserName(AuthUtil.getUserAccount()); + modifyAttributeInfo.setOrderModifyDate(new Date()); + modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue()); + modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue()); + modifyAttributeInfo.setAddAttributes(String.join(",", addList)); + modifyAttributeInfo.setModifyAttributes(String.join(",", editList)); + modifyAttributeInfo.setDeleteAttributes(String.join(",", deleteList)); + modifyAttributeInfo.setBeforeModifyAttributes(String.join(",", beforeList)); + } + } + modifyAttributeInfoDOList.add(modifyAttributeInfo); + }); + return modifyAttributeInfoDOList; + } + + private boolean checkIsDefaultColumn(String attributeLowId) { + return ((BtmTypeFieldConstant.BASIC_FIELD_MAP.containsKey(attributeLowId) + && !VciBaseUtil.inArray(new String[]{"id", "name", "description"}, attributeLowId)) + || BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId) + || BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP.containsKey(attributeLowId) + || BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP.containsKey(attributeLowId) + || BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP.containsKey(attributeLowId)); + } + + /** + * 妫�鏌ラ摼鎺ョ被鍨� + * + * @param linkTypeVOList 閾炬帴绫诲瀷 + * @return 妫�鏌ョ粨鏋� + */ + private List<ModifyAttributeInfo> checkLinkType(List<LinkTypeVO> linkTypeVOList) { + List<ModifyAttributeInfo> modifyAttributeInfoDOList = new ArrayList<>(); + linkTypeVOList.stream().filter(s -> !isCompatibilityTable(null,s.getId())).forEach(link -> { + ModifyAttributeInfo modifyAttributeInfo = new ModifyAttributeInfo(); + modifyAttributeInfo.setId(link.getId()); + modifyAttributeInfo.setName(link.getName()); + modifyAttributeInfo.setTableName(link.getTableName()); + modifyAttributeInfo.setBusinessType(BusinessTypeEnum.LINK.getValue()); + // 1. 瑙嗗浘鍜屾柊寤虹殑锛岀洿鎺ュ垱寤猴紝璁板綍鍒涘缓鍘嗗彶 + if (!checkTableExistByTableName(link.getTableName())){ + modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CREATE.getValue()); + modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue()); + }else { + VciBaseUtil.alertNotNull(link.getAttributes(), "閾炬帴绫诲瀷" + link.getId() + "鐨勫睘鎬�"); + List<DdlTableInDataBaseBO> columnDataInTable = selectTableColumnInfo(link.getTableName()); + if (CollectionUtils.isEmpty(columnDataInTable)) { + modifyAttributeInfo.setAddAttributes(link.getAttributes().stream().map(s -> s.getId().toLowerCase().trim()).collect(Collectors.joining(","))); + modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.EDIT.getValue()); + modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CREATE.getValue()); + } else { + // 2. 瀛樺湪鐨勬墠鍒ゆ柇锛屽垎鏂板灞炴�с�佸睘鎬ф洿鏀广�佸睘鎬у垹闄ゅ垎鍒搷浣� + // 3. 灞炴�ф搷浣滀腑鐗瑰埆鍒ゆ柇[鏄惁鎺у埗鐗堟湰][鏄惁鎺у埗瀵嗙骇][鏄惁鎺у埗鐢熷懡鍛ㄦ湡]鏉ユ坊鍔犲搴斿睘鎬� + Map<String, DdlTableInDataBaseBO> tableColumMap = columnDataInTable.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k)); + Map<String, LinkTypeAttributeVO> attributeMap = link.getAttributes().stream().collect(Collectors.toMap(t -> t.getId().toLowerCase().trim(), k -> k)); + List<String> addList = new ArrayList<>(); + List<String> editList = new ArrayList<>(); + List<String> deleteList = new ArrayList<>(); + List<String> beforeList = new ArrayList<>(); + attributeMap.forEach((k, v) -> { + String attributeLowId = k.toLowerCase(); + if (!(BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId))) { + if (tableColumMap.containsKey(k)) { + //璇存槑浠ュ墠涔熸湁锛岄偅灏辩湅鏄惁闇�瑕佷慨鏀� + DdlTableInDataBaseBO columnInDB = tableColumMap.get(k); + if (columnInDB.getAttributeLength() == null) { + columnInDB.setAttributeLength(0); + } + boolean needEdit = false; + if (!v.getName().equalsIgnoreCase(columnInDB.getName())) { + //璇存槑闇�瑕佷慨鏀� + needEdit = true; + } + BtmTypeAttributeVO btmTypeAttributeVO = new BtmTypeAttributeVO(); + BeanUtil.copy(v, btmTypeAttributeVO); + if (needEdit || checkNeedEditAttr(btmTypeAttributeVO, columnInDB)) { + editList.add(v.getId()); + beforeList.add(columnInDB.getId() + StringPool.SPACE + columnInDB.getAttrDataType() + "(" + columnInDB.getAttributeLength() + ")" + StringPool.SPACE + columnInDB.getNullableFlag() + + StringPool.SPACE + columnInDB.getPrecisionLength() + StringPool.SPACE + columnInDB.getScaleLength() + StringPool.SPACE + columnInDB.getName()); + } + } else { + addList.add(v.getId()); + } + } else { + //閽堝榛樿灞炴�э紝濡傛灉浠ュ墠娌℃湁锛岀幇鍦ㄦ湁鍙互娣诲姞锛屽鏋滀互鍓� + if (!tableColumMap.containsKey(k)) { + boolean needAddNewField = false; + if (BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.containsKey(attributeLowId)) { + //鏄摼鎺ョ被鍨嬬殑灞炴�э紝浠ュ墠娌℃湁灏辨坊鍔犱笂 + needAddNewField = true; + } + if (needAddNewField) { + addList.add(v.getId()); + } + } + } + }); + tableColumMap.forEach((k, v) -> { + if (!attributeMap.containsKey(k)) { + deleteList.add(k); + } + }); + modifyAttributeInfo.setOrderModifyUserName(AuthUtil.getUserAccount()); + modifyAttributeInfo.setOrderModifyDate(new Date()); + modifyAttributeInfo.setModifyColumnReason(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue()); + modifyAttributeInfo.setTaskName(ModifyTableTaskEnum.CONSISTENCY_CHECK.getValue()); + modifyAttributeInfo.setAddAttributes(String.join(",", addList)); + modifyAttributeInfo.setModifyAttributes(String.join(",", editList)); + modifyAttributeInfo.setDeleteAttributes(String.join(",", deleteList)); + modifyAttributeInfo.setBeforeModifyAttributes(String.join(",", beforeList)); + } + + } + modifyAttributeInfoDOList.add(modifyAttributeInfo); + }); + return modifyAttributeInfoDOList; + } + + /** + * 鍒ゆ柇鏄惁闇�瑕佷慨鏀瑰睘鎬� + * + * @param btmTypeAttributeVO 灞炴�х殑鏄剧ず瀵硅薄 + * @param tableInDB 鏁版嵁搴撹〃閲岀殑瀵硅薄 + * @return true琛ㄧず闇�瑕佷慨鏀癸紝false琛ㄧず涓嶄慨鏀� + */ + private boolean checkNeedEditAttr(BtmTypeAttributeVO btmTypeAttributeVO, DdlTableInDataBaseBO tableInDB) { + if (tableInDB.getAttributeLength() == null) { + tableInDB.setAttributeLength(0); + } + if (tableInDB.getPrecisionLength() == null) { + tableInDB.setPrecisionLength(20); + } + if (tableInDB.getScaleLength() == null) { + tableInDB.setScaleLength(0); + } + String nullInDb = ""; + if (YES.equalsIgnoreCase(tableInDB.getNullableFlag())) { + nullInDb = BooleanEnum.TRUE.getValue(); + } else if (NO.equalsIgnoreCase(tableInDB.getNullableFlag())) { + nullInDb = BooleanEnum.FASLE.getValue(); + } + if (!(String.valueOf(btmTypeAttributeVO.isNullableFlag()).equalsIgnoreCase(nullInDb))) { + return true; + } + if (StringUtils.isNotBlank(btmTypeAttributeVO.getDefaultValue())) { + return true; + } + + + List<VciFieldTypeEnum> fieldTypes = dllMapper.listFieldByColumnStr(tableInDB.getAttrDataType()); + if (CollectionUtils.isEmpty(fieldTypes)) { + throw new VciBaseException("娌℃湁鎵惧埌瀵瑰簲鐨勫瓧娈电被鍨�"); + } + Set<String> names = fieldTypes.stream().map(Enum::name).collect(Collectors.toSet()); + String attributeDataType = btmTypeAttributeVO.getAttrDataType(); + if (names.size() > 1) { + return !names.contains(attributeDataType); + } else { + VciFieldTypeEnum fieldType = fieldTypes.get(0); + if (attributeDataType.equalsIgnoreCase(fieldType.name())) { + switch (fieldType) { + case VTString: + if (btmTypeAttributeVO.getAttributeLength().intValue() != tableInDB.getAttributeLength().intValue()) { + return true; + } + break; + case VTDouble: + //涓嶈秴杩�128 + if (btmTypeAttributeVO.getPrecisionLength().intValue() != tableInDB.getPrecisionLength().intValue()) { + return true; + } + if (btmTypeAttributeVO.getScaleLength().intValue() != tableInDB.getScaleLength().intValue()) { + return true; + } + break; + default: + break; + } + } + return false; + } } /** @@ -460,8 +750,138 @@ * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呮墽琛屽嚭閿欑殑鏃跺�欎細鎶涘嚭寮傚父 */ @Override - public void reflexDifferent(List<OsModifyAttributeInfoDO> differentAttributeList) throws VciBaseException { + public void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList, List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException { + VciBaseUtil.alertNotNull(differentAttributeList, "瑕佹竻鐞嗙殑鏁版嵁搴撶殑淇℃伅涓虹┖"); + Map<String, BtmTypeVO> idBtmTypeMap = Optional.ofNullable(btmTypeVOList).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(BtmTypeVO::getId, t -> t, (o1, o2) -> o1)); + Map<String, LinkTypeVO> idLinkTypeMap = Optional.ofNullable(linkTypeVOList).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(LinkTypeVO::getId, t -> t, (o1, o2) -> o1)); + differentAttributeList.forEach(s -> { +// BtmTypeVO btmType = idBtmTypeMap.get(id); + if (ModifyTableTaskEnum.CREATE.getValue().equalsIgnoreCase(s.getTaskName())) { + //鐩存帴鍒涘缓琛ㄦ牸 +// createDbTableForBtm(btmType); + createDbTablesById(s.getId()); + } else { + String addAttributes = s.getAddAttributes(); + if (StringUtils.isNotBlank(s.getModifyAttributes()) || StringUtils.isNotBlank(s.getDeleteAttributes())) { + //闇�瑕佸幓鍒ゆ柇鏄惁鍙互鏇存敼 + if (checkTableHasDataByTableName(s.getTableName())) { + //鏈夋暟鎹殑璇濓紝寰楅渶瑕佸垽鏂睘鎬ф槸鍚﹀彲浠ヤ慨鏀� + if (StringUtils.isNotBlank(s.getDeleteAttributes())) { + s.setHandleResult("琛ㄦ牸瀛樺湪鏁版嵁锛屼笉鍏佽鍒犻櫎瀛楁"); + return; + } + List<DdlTableInDataBaseBO> columnInDbList = selectTableColumnInfo(s.getTableName()); + Map<String, DdlTableInDataBaseBO> columnInDbMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(columnInDbList)) { + columnInDbMap = columnInDbList.stream().collect(Collectors.toMap(t -> t.getId().toLowerCase(), k -> k)); + } + List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId().toLowerCase(), id))).collect(Collectors.toList()); + //鏈夊彲鑳戒箣鍓嶅垽鏂殑鏃跺�欐暟鎹簱瀛樺湪锛岃�岀幇鍦ㄤ笉瀛樺湪浜� + List<String> unExitInDbIdList = new ArrayList<>(); + Map<String, DdlTableInDataBaseBO> finalColumnInDbMap = columnInDbMap; + List<BtmTypeAttributeVO> needEditAttributeVOList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(attributeVOList)) { + attributeVOList.forEach(t -> { + if (finalColumnInDbMap.containsKey(t.getId().toLowerCase().trim())) { + needEditAttributeVOList.add(t); + } else { + unExitInDbIdList.add(t.getId()); + } + }); + } + if (!CollectionUtils.isEmpty(needEditAttributeVOList)) { + List<BtmTypeAttributeVO> unModifyAttrVOList = needEditAttributeVOList.stream().filter(t -> !checkNotCanEditAttr(t.getAttrDataType(), finalColumnInDbMap.get(t.getId().trim().toLowerCase()))).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(unModifyAttrVOList)) { + s.setHandleResult("琛ㄦ牸瀛樺湪鏁版嵁锛�" + unModifyAttrVOList.stream().map(BtmTypeAttributeVO::getId).collect(Collectors.joining(",")) + "杩欎簺瀛楁涓嶈兘淇敼"); + return; + } + needEditAttributeVOList.stream().forEach(t -> { + String attributeLowerId = t.getId().trim().toLowerCase(); + DdlTableInDataBaseBO columInDb = finalColumnInDbMap.get(attributeLowerId); + if (!t.getName().equalsIgnoreCase(columInDb.getName())) { + ddlMapper.commentColumnTable(s.getTableName(), t.getId(), t.getName()); + } + if (columInDb.getAttributeLength() != null && t.getAttributeLength() != null + && t.getAttributeLength() < columInDb.getAttributeLength()) { + t.setAttributeLength(columInDb.getAttributeLength()); + } + List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>(); + boolean nowNeedNull = false; + if (!YES.equalsIgnoreCase(columInDb.getNullableFlag()) && !t.isNullableFlag()) { + //璇存槑浠ュ墠鏄笉鑳戒负绌虹殑,浣嗘槸浠ュ墠涔熸槸涓嶄负绌虹殑锛屼慨鏀逛細鎶ラ敊锛屾墍浠ヨ繖涓皟鏁翠竴涓� + t.setNullableFlag(true); + } else if (!YES.equalsIgnoreCase(columInDb.getNullableFlag()) && t.isNullableFlag()) { + //浠ュ墠涓嶄负绌猴紝鐜板湪涓虹┖ + nowNeedNull = true; + } + attributeVOS.add(t); + String attributeSql = getCreateSqlByAttributeForBtm(attributeVOS); + if (nowNeedNull) { + attributeSql += StringPool.SPACE + "null" + StringPool.SPACE; + } + ddlMapper.modifyTableBySql(s.getTableName(), attributeSql); + }); + } + if (!CollectionUtils.isEmpty(unExitInDbIdList)) { + if (StringUtils.isBlank(addAttributes)) { + addAttributes = String.join(",", unExitInDbIdList); + } else { + addAttributes += "," + String.join(",", unExitInDbIdList); + ; + } + } + } else { + //璇存槑娌℃湁鏁版嵁锛岄偅鍙互鎶婁慨鏀圭殑鍒楀拰鍒犻櫎鐨勫垪閮藉垹闄わ紝鐒跺悗閲嶆柊娣诲姞 + if (StringUtils.isNotBlank(s.getModifyAttributes())) { + List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getModifyAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(attributeVOList)) { + attributeVOList.forEach(t -> { + List<BtmTypeAttributeVO> attributeVOS = new ArrayList<>(); + attributeVOS.add(t); + dropColumnByName(s.getTableName(), t.getId()); + addColumnForTable(s.getTableName(), attributeVOS); + ddlMapper.commentColumnTable(s.getTableName(), t.getId(), t.getName()); + }); + } + } + //闇�瑕佸垹闄ょ殑鍒� + if (StringUtils.isNotBlank(s.getDeleteAttributes())) { + List<String> attributeIdList = VciBaseUtil.str2List(s.getDeleteAttributes()); + Optional.ofNullable(attributeIdList).orElseGet(ArrayList::new).forEach(t -> { + dropColumnByName(s.getTableName(), t); + }); + } + } + } + if (StringUtils.isNotBlank(addAttributes)) { + //鍙槸娣诲姞灞炴�у�� + if (BusinessTypeEnum.LINK.getValue().equalsIgnoreCase(s.getBusinessType())) { + List<LinkTypeAttributeVO> attributeVOList = idLinkTypeMap.getOrDefault(s.getId(), new LinkTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList()); + //鏄摼鎺ョ被鍨� +// List<LinkTypeAttributeVO> attributeVOList = linkTypeService.listAttributeVOByIdsForLink(s.getId(), VciBaseUtil.str2List(s.getAddAttributes())); + addColumn2TableForLink(attributeVOList); + } else { + List<BtmTypeAttributeVO> attributeVOList = idBtmTypeMap.getOrDefault(s.getId(), new BtmTypeVO()).getAttributes().stream().filter(vo -> Func.toStrList(",", s.getAddAttributes()).stream().anyMatch(id -> StringUtils.equals(vo.getId(), id))).collect(Collectors.toList()); + addColumn2TableForBtm(attributeVOList); + } + } + } + }); + } + + private boolean checkNotCanEditAttr(String attributeDataType, DdlTableInDataBaseBO tableInDB) { + if (tableInDB != null && StringUtils.isNotBlank(attributeDataType)) { + List<VciFieldTypeEnum> fieldTypeEnums = dllMapper.listFieldByColumnStr(tableInDB.getAttrDataType()); + Set<String> names = fieldTypeEnums.stream().map(Enum::name).collect(Collectors.toSet()); + if (names.contains(attributeDataType)) { + return true; + } + return true; + } else { + //鍥犱负鏁版嵁搴撻噷娌℃湁杩欎釜琛ㄦ牸鏃� + return true; + } } /** @@ -483,7 +903,7 @@ */ @Override public List<DdlTableBO> listTableInfoInDB(Collection<String> tableNamesCollections) throws VciBaseException { - VciBaseUtil.alertCollectionNotNull("鏁版嵁搴撹〃鍚嶇О涓嶈兘涓虹┖", tableNamesCollections); + VciBaseUtil.alertNotNull("鏁版嵁搴撹〃鍚嶇О涓嶈兘涓虹┖", tableNamesCollections); List<DdlTableBO> tableBOList = new ArrayList<>(); tableNamesCollections.stream().forEach(s -> { tableBOList.add(ddlMapper.selectTableComment(s)); @@ -531,11 +951,11 @@ * * @param tableDataBO 瑕佸啓鍏ョ殑鏁版嵁 * @return word 鏂囦欢璺緞 - */ + *//* @Override public String writeDataToWord(WordMergeStartTableDataBO tableDataBO) { return null; - } + }*/ /** * 鍒ゆ柇鏄惁涓哄吋瀹规�х殑琛紝杩欎簺琛ㄤ笉搴旇琚垱寤哄拰淇敼 @@ -552,49 +972,42 @@ /** * 涓氬姟绫诲瀷鏁版嵁搴撴柊澧炴垨淇敼琛� * - * @param dto 涓氬姟绫诲瀷浼犺緭瀵硅薄 + * @param ddlDTO 涓氬姟绫诲瀷閾炬帴绫诲瀷浼犺緭瀵硅薄 * @return 鎵ц缁撴灉 */ @Override - public R submitBtmType(OmdBtmTypeDTO dto) { - VciBaseUtil.alertNotNull(dto, "涓氬姟绫诲瀷", dto.getAttributesDTOList(), "涓氬姟绫诲瀷灞炴��"); - OmdBtmTypeVO btmTypeVO = Objects.requireNonNull(BeanUtil.copy(dto, OmdBtmTypeVO.class)); - if (Func.isNotBlank(dto.getTableName())) { - checkModifyOrCreateTable(btmTypeVO); - } else { - if (checkTableExistById(dto.getId())) { - String tableName = getTableNameByBtmTypeId(dto.getId()); - btmTypeVO.setTableName(tableName); - checkModifyOrCreateTable(btmTypeVO); - } else { - String tableName = TABLE_PREFIX + StringPool.UNDERSCORE + dto.getDomain().toUpperCase(Locale.ROOT) + StringPool.UNDERSCORE + dto.getId().toUpperCase(Locale.ROOT); - btmTypeVO.setTableName(tableName); - createDbTableForBtm(btmTypeVO); + public R<List<ModifyAttributeInfo>> submit(BtmAndLinkTypeDdlDTO ddlDTO) throws Throwable { + try { + List<ModifyAttributeInfo> changedList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(ddlDTO.getBtmTypeList())) { + List<BtmTypeVO> btmTypeList = ddlDTO.getBtmTypeList(); + putBtm(btmTypeList.toArray(new BtmTypeVO[0])); + changedList.addAll(checkDifferent(btmTypeList, null)); + removeBtm(btmTypeList.toArray(new BtmTypeVO[0])); } - } - return R.success("000000"); - } - - /** - * 妫�鏌ヤ笟鍔$被鍨嬬殑琛ㄦ槸鍚﹀瓨鍦紝濡傛灉瀛樺湪鍒欐瘮杈冨樊鍒繘琛屼慨鏀癸紝涓嶅瓨鍦ㄥ垯鍒涘缓 - * - * @param btmTypeVO 涓氬姟绫诲瀷 - */ - private void checkModifyOrCreateTable(OmdBtmTypeVO btmTypeVO) { - if (checkTableExistByTableName(btmTypeVO.getTableName())) { - // 琛ㄥ凡瀛樺湪锛屾牎楠屽睘鎬� - List<OmdBtmTypeVO> vos = new ArrayList<>(); - vos.add(btmTypeVO); - List<OsModifyAttributeInfoDO> differentAttributeList = checkDifferent(vos, null); - if (CollectionUtils.isEmpty(differentAttributeList)) { - // 鍙互鐩存帴鍒犻櫎鍐嶅垱寤� - dropTableByName(btmTypeVO.getTableName()); - createDbTableForBtm(btmTypeVO); - } else { - // TODO: 淇敼鐨勬殏鏃惰繕娌″仛 + if (!CollectionUtils.isEmpty(ddlDTO.getLinkTypeList())) { + List<LinkTypeVO> linkTypeList = ddlDTO.getLinkTypeList(); + putLink(linkTypeList.toArray(new LinkTypeVO[0])); + changedList.addAll(checkDifferent(null,linkTypeList)); + removeLink(linkTypeList.toArray(new LinkTypeVO[0])); } - } else { - createDbTableForBtm(btmTypeVO); + String msg = changedList.isEmpty() ? "鏁版嵁搴撴搷浣滄垚鍔�" : changedList.get(0).getHandleResult(); + R<List<ModifyAttributeInfo>> result = R.success(msg); + result.setData(changedList); + return result; + } catch (Exception e) { + try { + // 寤鸿〃澶辫触鏈夊紓甯革紝鎹曡幏鍚庤繑鍥烇紝骞堕噴鏀剧嚎绋嬩腑鐨勫唴瀹� + if (!CollectionUtils.isEmpty(ddlDTO.getBtmTypeList())) { + removeBtm(ddlDTO.getBtmTypeList().toArray(new BtmTypeVO[0])); + } + if (!CollectionUtils.isEmpty(ddlDTO.getLinkTypeList())) { + removeLink(ddlDTO.getLinkTypeList().toArray(new LinkTypeVO[0])); + } + return R.fail(e.getMessage()); + }catch (ServiceException e2){ + return R.fail(e.getMessage()); + } } } @@ -606,7 +1019,7 @@ */ @Override public DdlTableBO getTableColumnByTableName(String tableName) { - VciBaseUtil.alertNotNull(tableName,"琛ㄥ悕"); + VciBaseUtil.alertNotNull(tableName, "琛ㄥ悕"); DdlTableBO tableBO = getTableInfoByTableName(tableName); List<DdlTableInDataBaseBO> columnInfo = selectTableColumnInfo(tableName); tableBO.setColumns(columnInfo); @@ -626,10 +1039,11 @@ /** * 琛ㄥ悕鑾峰彇琛ㄤ俊鎭� + * * @param tableName 琛ㄥ悕 * @return 琛ㄤ俊鎭� */ - private DdlTableBO getTableInfoByTableName(String tableName){ + private DdlTableBO getTableInfoByTableName(String tableName) { VciBaseUtil.alertNotNull(tableName, "琛ㄦ牸鍚嶇О"); return ddlMapper.selectTableComment(tableName); } @@ -640,15 +1054,90 @@ * @return 琛ㄤ俊鎭泦鍚� */ @Override - public List<DdlTableBO> getAllTableInfo() { + public List<BtmTypeVO> getAllTableInfo() { List<String> allTableName = listAllTableName(); if (!CollectionUtils.isEmpty(allTableName)) { List<DdlTableBO> allTableBO = listTableInfoInDB(allTableName); + List<BtmTypeVO> btmTypeVOList = new ArrayList<>(); allTableBO.forEach(table -> { - table.setColumns(selectTableColumnInfo(table.getTableName())); + BtmTypeVO vo = new BtmTypeVO(); + vo.setTableName(table.getTableName().toLowerCase()); + vo.setDescription(table.getTableDesc()); + List<DdlTableInDataBaseBO> columns = selectTableColumnInfo(table.getTableName()); + List<BtmTypeAttributeVO> attributes = new ArrayList<>(); + columns.forEach(col -> { + BtmTypeAttributeVO attributeVO = new BtmTypeAttributeVO(); + attributeVO.setId(col.getId().toLowerCase()); + attributeVO.setName(col.getName()); + attributeVO.setNullableFlag(StringUtils.equals(col.getNullableFlag(), BooleanEnum.TRUE.getValue())); + attributeVO.setAttributeLength(col.getAttributeLength()); + attributeVO.setPrecisionLength(col.getPrecisionLength()); + attributeVO.setScaleLength(col.getScaleLength()); + VciFieldTypeEnum field = dllMapper.getFieldTypeByColumnStr(col.getAttrDataType(), col.getAttributeLength()); + if (field != null){ + attributeVO.setAttrDataType(field.name()); + } + if(col.getPrecisionLength() != null){ + attributeVO.setAttrDataType(VciFieldTypeEnum.VTDouble.name()); + } + attributes.add(attributeVO); + }); + vo.setAttributes(attributes); + btmTypeVOList.add(vo); }); - return allTableBO; + return btmTypeVOList; } return new ArrayList<>(); } + + /** + * 妫�鏌ユ暟鎹〃鏄惁瀛樺湪鏁版嵁锛屼笉瀛樺湪鍒欏垹闄� + * + * @param tableCheckDTOList 闇�瑕佹鏌ョ殑琛ㄩ泦鍚� + * @return 妫�鏌ョ粨鏋� + */ + @Override + public TableCheckResultDTO checkTableHasDataThenDelete(List<TableCheckDTO> tableCheckDTOList) { + TableCheckResultDTO resultDTO = new TableCheckResultDTO(); + List<TableCheckDTO> successList = new ArrayList<>(); + List<TableCheckDTO> failList = new ArrayList<>(); + tableCheckDTOList.forEach(table -> { + VciBaseUtil.alertNotNull(table.getTableName(),"鏁版嵁琛ㄥ悕绉�"); + TableCheckDTO checkDTO = new TableCheckDTO(); + boolean hasDataFlag = checkTableHasDataByTableName(table.getTableName()); + if (hasDataFlag){ + table.setDone(false); + failList.add(checkDTO); + }else { + dropTableByName(table.getTableName()); + table.setDone(true); + successList.add(table); + } + }); + if (!CollectionUtils.isEmpty(successList)){ + resultDTO.setSuccessList(successList); + } + if (!CollectionUtils.isEmpty(failList)){ + resultDTO.setFailList(failList); + } + return resultDTO; + } + + /** + * 涓鸿〃娣诲姞瀛楁 + * + * @param addColumnDTO 娣诲姞鐨勫璞� + * @return 鎵ц缁撴灉鏍囪瘑 + */ + @Override + public Boolean addColumnForTable(TableAddColumnDTO addColumnDTO) { + VciBaseUtil.alertNotNull(addColumnDTO,"娣诲姞瀛楁鐨勫璞�"); + if (!CollectionUtils.isEmpty(addColumnDTO.getLinkTypeAttributeVOList())){ + addColumn2TableForLink(addColumnDTO.getLinkTypeAttributeVOList()); + } + if(!CollectionUtils.isEmpty(addColumnDTO.getBtmTypeAttributeVOList())){ + addColumn2TableForBtm(addColumnDTO.getBtmTypeAttributeVOList()); + } + return true; + } } -- Gitblit v1.9.3