lihang
2023-05-04 3579af2945dd38d841a23cd340acd474bb63773a
业务类型与DDL服务相关的添加
已修改66个文件
已删除3个文件
已重命名1个文件
已添加13个文件
5592 ■■■■■ 文件已修改
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/pom.xml 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstempattrController.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstempattrMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java 691 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java 618 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java 596 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java 190 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java 510 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
@@ -41,19 +41,19 @@
     * nacos dev åœ°å€
     */
    //String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
    String NACOS_DEV_ADDR = "192.168.93.183:38848";
    String NACOS_DEV_ADDR = "127.0.0.1:8848";
    /**
     * nacos prod åœ°å€
     */
    //String NACOS_PROD_ADDR = "dev.vci-tech.com:38848";
    String NACOS_PROD_ADDR = "192.168.93.129:38848";
    String NACOS_PROD_ADDR = "127.0.0.1:8848";
    /**
     * nacos test åœ°å€
     */
    //String NACOS_TEST_ADDR = "dev.vci-tech.com:38848";
    String NACOS_TEST_ADDR = "192.168.93.133:38848";
    String NACOS_TEST_ADDR = "127.0.0.1:8848";
    /**
     * sentinel dev åœ°å€
Source/UBCS/ubcs-ops/ubcs-flow/src/test/java/com/vci/flow/test/launch/LauncherTestServiceImpl.java
@@ -16,7 +16,6 @@
 */
package com.vci.flow.test.launch;
import com.vci.ubcs.common.constant.LauncherConstant;
import org.springblade.core.auto.service.AutoService;
import org.springblade.core.launch.service.LauncherService;
import org.springblade.core.launch.utils.PropsUtil;
Source/UBCS/ubcs-ops/ubcs-xxljob-admin/src/main/java/com/vci/ubcs/xxl/job/admin/JobAdminApplication.java
@@ -1,6 +1,5 @@
package com.vci.ubcs.xxl.job.admin;
import com.vci.ubcs.common.constant.LauncherConstant;
import org.springblade.core.cloud.client.UbcsCloudApplication;
import org.springblade.core.launch.UbcsApplication;
Source/UBCS/ubcs-ops/ubcs-xxljob/src/main/java/com/vci/ubcs/job/executor/JobApplication.java
@@ -16,7 +16,6 @@
 */
package com.vci.ubcs.job.executor;
import com.vci.ubcs.common.constant.LauncherConstant;
import org.springblade.core.cloud.client.UbcsCloudApplication;
import org.springblade.core.launch.UbcsApplication;
Source/UBCS/ubcs-service-api/ubcs-code-api/pom.xml
@@ -12,11 +12,6 @@
    <name>${project.artifactId}</name>
    <version>${bladex.project.version}</version>
    <dependencies>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>4.2</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.thoughtworks.xstream</groupId>-->
Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
@@ -19,7 +19,7 @@
    /**
     * åˆ†ç±»ç æ®µä¸»é”®
     */
    private String codeClassifySecOid;
    private String codeclassifysecoid;
    /**
     * åˆ†ç±»ç æ®µä¸»é”®æ˜¾ç¤ºæ–‡æœ¬
@@ -28,26 +28,26 @@
    /**
     * ç å€¼åºå·
     */
    private Integer orderNum;
    private Integer ordernum;
    /**
     * ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
     */
    private String parentClassifyValueOid;
    private String parentclassifyvalueoid;
    /**
     * èŽ·å– åˆ†ç±»ç æ®µä¸»é”®
     */
    public String getCodeClassifySecOid (){
        return codeClassifySecOid;
    public String getCodeclassifysecoid (){
        return codeclassifysecoid;
    }
    /**
     * è®¾ç½® åˆ†ç±»ç æ®µä¸»é”®
     */
    public void setCodeClassifySecOid (String codeClassifySecOid){
        this.codeClassifySecOid = codeClassifySecOid;
    public void setCodeclassifysecoid (String codeclassifysecoid){
        this.codeclassifysecoid = codeclassifysecoid;
    }
    /**
@@ -66,39 +66,39 @@
    /**
     * èŽ·å– ç å€¼åºå·
     */
    public Integer getOrderNum (){
        return orderNum;
    public Integer getOrdernum (){
        return ordernum;
    }
    /**
     * è®¾ç½® ç å€¼åºå·
     */
    public void setOrderNum (Integer orderNum){
        this.orderNum = orderNum;
    public void setOrdernum (Integer ordernum){
        this.ordernum = ordernum;
    }
    /**
     * èŽ·å– ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
     */
    public String getParentClassifyValueOid (){
        return parentClassifyValueOid;
    public String getParentclassifyvalueoid (){
        return parentclassifyvalueoid;
    }
    /**
     * è®¾ç½® ä¸Šçº§åˆ†ç±»ç å€¼ä¸»é”®
     */
    public void setParentClassifyValueOid (String parentClassifyValueOid){
        this.parentClassifyValueOid = parentClassifyValueOid;
    public void setParentclassifyvalueoid (String parentclassifyvalueoid){
        this.parentclassifyvalueoid = parentclassifyvalueoid;
    }
    @Override
    public String toString() {
        return "CodeClassifyValueDTO{" +
        "codeClassifySecOid='" + codeClassifySecOid +"',"+
        "codeclassifysecoid='" + codeclassifysecoid +"',"+
        "codeclassifysecoidName='" + codeclassifysecoidName +"'," +
        "orderNum='" + orderNum +"',"+
        "parentClassifyValueOid='" + parentClassifyValueOid +"',"+
        "ordernum='" + ordernum +"',"+
        "parentclassifyvalueoid='" + parentclassifyvalueoid +"',"+
        "}" + super.toString();
    }
}
Source/UBCS/ubcs-service-api/ubcs-ddl-api/pom.xml
@@ -17,12 +17,4 @@
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-omd-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
    </dependencies>
</project>
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.vci.ubcs.ddl.bo;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springblade.core.tool.utils.StringPool;
import org.springblade.core.tool.utils.StringUtil;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/4/28
 */
@Getter
public class DdlFieldMappingAttrBO {
    /**
     * ç±»åž‹
     */
    private final String dataType;
    /**
     * é•¿åº¦
     */
    @Setter
    private Integer dataLength;
    /**
     * ç²¾åº¦
     */
    @Setter
    private Integer dataPrecision;
    /**
     * å…è®¸ä¸ºç©º
     */
    @Setter
    private Boolean nullable;
    /**
     * é»˜è®¤å€¼
     */
    @Setter
    private String defaultValue;
    public DdlFieldMappingAttrBO(String dataType, Integer dataLength, Integer dataPrecision, Boolean nullable, String defaultValue) {
        this.dataType = dataType;
        this.dataLength = dataLength;
        this.dataPrecision = dataPrecision;
        this.nullable = nullable;
        this.defaultValue = defaultValue;
    }
    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder().append(dataType);
        if (dataLength != null){
            stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
        }
        if (dataPrecision != null){
            stringBuilder.append(StringPool.SPACE).append(StringPool.LEFT_BRACKET).append(dataLength == null ? 22 : dataLength).append(StringPool.COMMA).append(dataPrecision).append(StringPool.RIGHT_BRACKET).append(StringPool.SPACE);
        }
        if (!nullable){
            stringBuilder.append(StringPool.SPACE).append("not null").append(StringPool.SPACE);
        }
        if (StringUtil.isNotBlank(defaultValue)){
            stringBuilder.append(StringPool.SPACE).append("default").append(StringPool.SPACE).append(defaultValue).append(StringPool.SPACE);
        }
        return stringBuilder.toString();
    }
}
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/BusinessTypeEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.vci.ubcs.ddl.enums;
/**
 * Description:对象建模类型
 *
 * @author LiHang
 * @date 2023/4/30
 */
public enum BusinessTypeEnum {
    /**
     * ä¸šåŠ¡ç±»åž‹
     */
    BTM("bussiness_type_model","业务类型"),
    /**
     * é“¾æŽ¥ç±»åž‹
     */
    LINK("link_type_model","链接类型")
    ;
    private String value;
    private String name;
    BusinessTypeEnum(String value, String name) {
        this.value = value;
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public String getName() {
        return name;
    }
}
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/enums/ModifyTableTaskEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.vci.ubcs.ddl.enums;
/**
 * Description: DDL操作任务类型
 *
 * @author LiHang
 * @date 2023/4/30
 */
public enum ModifyTableTaskEnum {
    /**
     * æ–°å»º
     */
    CREATE("create","新建"),
    /**
     * ä¿®æ”¹
     */
    EDIT("edit","修改"),
    /**
     * ä¸€è‡´æ€§æ£€æŸ¥
     */
    CONSISTENCY_CHECK("consistency_check","一致性检查")
    ;
    private String value;
    private String name;
    ModifyTableTaskEnum(String value, String name) {
        this.value = value;
        this.name = name;
    }
    public String getValue() {
        return value;
    }
    public String getName() {
        return name;
    }
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java
@@ -22,8 +22,6 @@
    private static final String BTM_DETAIL = "btm:id";
    private static final String BTM_REF = "btm:list";
    private static final String BTM_TYPE_CACHE = "ubcs:btm";
    private static final String BTM_IDS = "btm:ids";
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeFieldConstant.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
package com.vci.ubcs.omd.constant;
import java.util.HashMap;
import java.util.Map;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/4/27
 */
public class BtmTypeFieldConstant {
    public static Map<String, String> USER_TABLE_COMPATIBILITY_BTM_MAP;
    public static Map<String, String> USER_TABLE_COMPATIBILITY_FIELD_MAP;
    public static final Boolean DEFAULT_QUERY_SECRET;
    public static final Boolean DEFAULT_QUERY_DATA_RIGHT;
    public static final Map<String, String> REVISION_MANAGE_FIELD_MAP;
    public static final Map<String, String> BASIC_FIELD_MAP;
    public static final Map<String, String> BASE_MODEL_COMPATIBILITY_MAP;
    public static final Map<String, String> LIFECYCLE_MANAGE_FIELD_MAP;
    public static final Map<String, String> SECRET_MANAGE_FIELD_MAP;
    public static final Map<String, String> LINK_TYPE_FIELD_MAP;
    static {
        USER_TABLE_COMPATIBILITY_BTM_MAP = new HashMap();
        USER_TABLE_COMPATIBILITY_FIELD_MAP = new HashMap();
        DEFAULT_QUERY_SECRET = true;
        DEFAULT_QUERY_DATA_RIGHT = false;
        REVISION_MANAGE_FIELD_MAP = new HashMap() {
            {
                this.put("nameoid", "对象主键");
                this.put("revisionoid", "版本主键");
                this.put("lastr", "是否最新版本");
                this.put("firstr", "是否最老版本");
                this.put("lastv", "是否最新版次");
                this.put("firstv", "是否最老版次");
                this.put("revisionrule", "版本规则");
                this.put("revisionseq", "版本排序号");
                this.put("revisionvalue", "版本值");
                this.put("versionrule", "版次规则");
                this.put("versionseq", "版次排序号");
                this.put("versionvalue", "版次值");
                this.put("checkinby", "签入人");
                this.put("checkintime", "签入时间");
                this.put("checkoutby", "签出人");
                this.put("checkouttime", "签出时间");
                this.put("copyfromversion", "拷贝版本来源");
            }
        };
        BASIC_FIELD_MAP = new HashMap() {
            {
                this.put("oid", "主键");
                this.put("btmname", "业务类型的名称");
                this.put("id", "编号");
                this.put("name", "名称");
                this.put("description", "描述");
                this.put("creator", "创建人");
                this.put("createtime", "创建时间");
                this.put("lastmodifier", "最后时间人");
                this.put("lastmodifytime", "最后修改时间");
                this.put("ts", "时间戳");
                this.put("owner", "拥有者");
            }
        };
        BASE_MODEL_COMPATIBILITY_MAP = new HashMap() {
            {
                this.put("lastr", "islastr");
                this.put("firstr", "isfirstr");
                this.put("lastv", "islastv");
                this.put("firstv", "isfirstv");
            }
        };
        LIFECYCLE_MANAGE_FIELD_MAP = new HashMap() {
            {
                this.put("lcstatus", "生命周期值");
            }
        };
        SECRET_MANAGE_FIELD_MAP = new HashMap() {
            {
                this.put("secretgrade", "密级值");
            }
        };
        LINK_TYPE_FIELD_MAP = new HashMap() {
            {
                this.put("oid", "主键");
                this.put("creator", "创建人");
                this.put("createtime", "创建时间");
                this.put("lastmodifier", "最后时间人");
                this.put("lastmodifytime", "最后修改时间");
                this.put("f_oid", "from端主键");
                this.put("f_revisionoid", "from端版本主键");
                this.put("f_nameoid", "from端对象主键");
                this.put("f_btmname", "from端业务类型");
                this.put("t_oid", "to端主键");
                this.put("t_revisionoid", "to端版本主键");
                this.put("t_nameoid", "to端对象主键");
                this.put("t_btmname", "to端业务类型");
                this.put("ts", "时间戳");
            }
        };
    }
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeLcStatusConstant.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.vci.ubcs.omd.constant;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/4/27
 */
public class BtmTypeLcStatusConstant {
    public static final String FRAME_WORK_LIFE_CYCLE_NAME = "frameworkDataLc";
    public static final String EMTYPE_LIFE_CYCLE = "defaultLC";
    public static final String RELEASE_LIFE_CYCLE = "releaseDataLc";
    public BtmTypeLcStatusConstant() {
    }
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmAndLinkTypeDdlDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.vci.ubcs.omd.dto;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/4/27
 */
@Data
public class BtmAndLinkTypeDdlDTO implements Serializable {
    /**
     * åºåˆ—化
     */
    private static final long serialVersionUID = 1199602927699648522L;
    List<BtmTypeVO> btmTypeList;
    List<LinkTypeVO> linkTypeList;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/BtmTypeDTO.java
@@ -137,7 +137,7 @@
    /**
     * æ·»åŠ æˆ–è€…ç§»é™¤çš„å±žæ€§ä¿¡æ¯
     */
    private List<BtmTypeLinkAttributesDTO> attributesDTOList;
    private List<BtmTypeLinkAttributesDTO> attributes;
    /**
     * æ—¶é—´æˆ³ï¼Œç”¨äºŽæ ¡éªŒæ˜¯å¦æœ€æ–°æ•°æ®
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java
@@ -48,7 +48,10 @@
     */
    private String description;
    /**
     * æ˜¯å¦æŽ§åˆ¶ç‰ˆæœ¬
     */
    private String revisionFlag;
    /**
     * ç‰ˆæœ¬è§„则的编号
     */
@@ -88,6 +91,11 @@
     * C#
     */
    private String shape;
    /**
     * æ˜¯å¦æŽ§åˆ¶ç”Ÿå‘½å‘¨æœŸ
     */
    private String lifeCycleFlag;
    /**
     * ç”Ÿå‘½å‘¨æœŸçš„英文名称
@@ -168,9 +176,4 @@
     * ä¸€è‡´æ€§æ ‡è¯†
     */
    private String consistence;
    /**
     * æ•°æ®åº“表与业务类型同步失败次数
    private Integer syncFailTimes;
     */
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java
ÎļþÃû´Ó Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfoDO.java ÐÞ¸Ä
@@ -16,36 +16,36 @@
@Data
@TableName("pl_omd_modify_attr_info")
@ApiModel(value = "需要修改数据库表中字段的信息", description = "需要修改数据库表中字段的信息")
public class ModifyAttributeInfoDO implements Serializable {
public class ModifyAttributeInfo implements Serializable {
    /**
     * ç¦æ­¢ä¿®æ”¹è¿™ä¸ªå€¼
     */
    private static final long serialVersionUID = 2996604298980606103L;
    /**
     * ä¸šåŠ¡ç±»åž‹ç¼–å·
     * è‹±æ–‡åç§°
     */
    private String id;
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     * ä¸­æ–‡åç§°
     */
    private String name;
    /**
     * æ˜¯å¦ä¸ºé“¾æŽ¥ç±»åž‹
     * å¯¹è±¡ç±»åž‹
     */
    private String linkTypeFlag;
    private String businessType;
    /**
     * è¡¨æ ¼åç§°
     * æ•°æ®åº“表名
     */
    private String tableName;
    /**
     * æ˜¯å¦åˆ›å»ºè¡¨æ ¼
     * ä»»åŠ¡æ‰§è¡ŒFlag
     */
    private String createTableFlag;
    private String taskName;
    /**
     * æ·»åŠ çš„å±žæ€§
@@ -60,7 +60,7 @@
    /**
     * åˆ é™¤çš„属性
     */
    private String deleteAttibutes;
    private String deleteAttributes;
    /**
     * å±žæ€§ä¿®æ”¹å‰çš„内容
@@ -125,26 +125,4 @@
     * åˆ›å»ºæ—¶é—´
     */
    private Date createTime;
    private String lastModifier;
    private Date lastModifyTime;
    private String revisionRule;
    private int revisionSeq;
    private String revisionValue;
    private String versionRule;
    private int versionSeq;
    private String versionValue;
    private String lctid;
    private String lcStatus;
    private String lcStatusText;
    private Date ts;
    private String owner;
    private String checkInBy;
    private Date checkInTime;
    private String checkOutBy;
    private Date checkOutTime;
    private String copyFromVersion;
    private Integer secretGrade;
    private String secretGradeText;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeClient.java
@@ -21,7 +21,7 @@
 */
@FeignClient(
    value = AppConstant.APPLICATION_NAME_OMD,
    fallback = IDictClientFallback.class
    fallback = IBtmTypeFallback.class
)
public interface IBtmTypeClient {
@@ -31,6 +31,10 @@
    String API_PREFIX = "/client";
    /**
     * å‚照列表查询
     */
    String GET_REF_PAGE = API_PREFIX + "/btm-type/get-ref-page";
    /**
     * å‚照列表查询无分页
     */
    String GET_REF = API_PREFIX + "/btm-type/get-ref";
    /**
@@ -62,8 +66,17 @@
     * @param domain é¢†åŸŸå€¼
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @GetMapping(GET_REF_PAGE)
    R<IPage<BtmTypeVO>> getRefPage(@RequestParam("condition")Map<String,Object> condition, @RequestParam("query")Query query, @RequestParam("domain") String domain);
    /**
     * å‚照列表查询
     * @param condition æŸ¥è¯¢æ¡ä»¶
     * @param domain é¢†åŸŸå€¼
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @GetMapping(GET_REF)
    R<IPage<BtmTypeVO>> getRef(@RequestParam("condition")Map<String,Object> condition, @RequestParam("query")Query query, @RequestParam("domain") String domain);
    R<List<BtmTypeVO>> getRef(@RequestParam("condition")Map<String,Object> condition, @RequestParam("domain") String domain);
    /**
     * æ ¹æ®è‹±æ–‡åç§°æ‰¹é‡æŸ¥è¯¢å¯¹è±¡
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmTypeFallback.java
@@ -54,7 +54,19 @@
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<IPage<BtmTypeVO>> getRef(Map<String, Object> condition, Query query, String domain) {
    public R<IPage<BtmTypeVO>> getRefPage(Map<String, Object> condition, Query query, String domain) {
        return R.fail("获取数据失败");
    }
    /**
     * å‚照列表查询
     *
     * @param condition æŸ¥è¯¢æ¡ä»¶
     * @param domain    é¢†åŸŸå€¼
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<List<BtmTypeVO>> getRef(Map<String, Object> condition, String domain) {
        return R.fail("获取数据失败");
    }
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IDictClientFallback.java
@@ -27,7 +27,7 @@
 *
 * @author Chill
 */
@Component
@Component("Dictclient2")
public class IDictClientFallback implements IDictClient {
    @Override
    public R<Dict> getById(Long id) {
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
@@ -1,5 +1,7 @@
package com.vci.ubcs.omd.vo;
import lombok.Data;
import java.util.Date;
import java.util.List;
@@ -9,6 +11,7 @@
 * @author weidy
 * @date 2019/10/11 6:04 PM
 */
@Data
public class LinkTypeVO implements java.io.Serializable {
    /**
@@ -30,6 +33,11 @@
     * é“¾æŽ¥ç±»åž‹ä¸­æ–‡åç§°
     */
    private String name;
    /**
     * æ•°æ®åº“表
     */
    private String tableName;
    /**
     * æè¿°
@@ -54,7 +62,7 @@
    /**
     * from端业务类型显示对象
     */
    private List<BtmTypeVO> fromBtmTypeVOS;
    private List<BtmTypeVO> fromBtmTypes;
    /**
     * from端业务类型名称
@@ -74,12 +82,12 @@
    /**
     * to端业务类型显示对象
     */
    private List<BtmTypeVO> toBtmTypeVOS;
    private List<BtmTypeVO> toBtmTypes;
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    private String btmname;
    private String btmName;
    /**
     * æ‹¥æœ‰è€…
@@ -115,191 +123,4 @@
     * åŒ…含属性
     */
    private List<LinkTypeAttributeVO> attributes;
    public String getOid() {
        return oid;
    }
    public void setOid(String oid) {
        this.oid = oid;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getShape() {
        return shape;
    }
    public void setShape(String shape) {
        this.shape = shape;
    }
    public String getImplClass() {
        return implClass;
    }
    public void setImplClass(String implClass) {
        this.implClass = implClass;
    }
    public String getFromBtmType() {
        return fromBtmType;
    }
    public void setFromBtmType(String fromBtmType) {
        this.fromBtmType = fromBtmType;
    }
    public List<BtmTypeVO> getFromBtmTypeVOS() {
        return fromBtmTypeVOS;
    }
    public void setFromBtmTypeVOS(List<BtmTypeVO> fromBtmTypeVOS) {
        this.fromBtmTypeVOS = fromBtmTypeVOS;
    }
    public String getFromBtmTypeName() {
        return fromBtmTypeName;
    }
    public void setFromBtmTypeName(String fromBtmTypeName) {
        this.fromBtmTypeName = fromBtmTypeName;
    }
    public String getToBtmType() {
        return toBtmType;
    }
    public void setToBtmType(String toBtmType) {
        this.toBtmType = toBtmType;
    }
    public String getToBtmTypeName() {
        return toBtmTypeName;
    }
    public void setToBtmTypeName(String toBtmTypeName) {
        this.toBtmTypeName = toBtmTypeName;
    }
    public List<BtmTypeVO> getToBtmTypeVOS() {
        return toBtmTypeVOS;
    }
    public void setToBtmTypeVOS(List<BtmTypeVO> toBtmTypeVOS) {
        this.toBtmTypeVOS = toBtmTypeVOS;
    }
    public String getCreator() {
        return creator;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public String getLastModifier() {
        return lastModifier;
    }
    public void setLastModifier(String lastModifier) {
        this.lastModifier = lastModifier;
    }
    public Date getLastModifyTime() {
        return lastModifyTime;
    }
    public void setLastModifyTime(Date lastModifyTime) {
        this.lastModifyTime = lastModifyTime;
    }
    public Date getTs() {
        return ts;
    }
    public void setTs(Date ts) {
        this.ts = ts;
    }
    public List<LinkTypeAttributeVO> getAttributes() {
        return attributes;
    }
    public void setAttributes(List<LinkTypeAttributeVO> attributes) {
        this.attributes = attributes;
    }
    public String getBtmname() {
        return btmname;
    }
    public void setBtmname(String btmname) {
        this.btmname = btmname;
    }
    public String getOwner() {
        return owner;
    }
    public void setOwner(String owner) {
        this.owner = owner;
    }
    @Override
    public String toString() {
        return "OsLinkTypeVO{" +
                "oid='" + oid + '\'' +
                ", id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                ", shape='" + shape + '\'' +
                ", implClass='" + implClass + '\'' +
                ", fromBtmType='" + fromBtmType + '\'' +
                ", fromBtmTypeVOS=" + fromBtmTypeVOS +
                ", fromBtmTypeName='" + fromBtmTypeName + '\'' +
                ", toBtmType='" + toBtmType + '\'' +
                ", toBtmTypeName='" + toBtmTypeName + '\'' +
                ", toBtmTypeVOS=" + toBtmTypeVOS +
                ", btmname='" + btmname + '\'' +
                ", owner='" + owner + '\'' +
                ", creator='" + creator + '\'' +
                ", createTime=" + createTime +
                ", lastModifier='" + lastModifier + '\'' +
                ", lastModifyTime=" + lastModifyTime +
                ", ts=" + ts +
                ", attributes=" + attributes +
                '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java
@@ -1,5 +1,4 @@
package com.vci.ubcs.starter.revision.service;
//package com.vci.starter.revision.service;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.vci.ubcs.starter.revision.model.BaseModel;
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/VciSpringUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.vci.ubcs.starter.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/4/26
 */
@Component
public class VciSpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (VciSpringUtil.applicationContext == null){
            VciSpringUtil.applicationContext = applicationContext;
        }
    }
    public static ApplicationContext getApplicationContext(){
        return applicationContext;
    }
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name,clazz);
    }
}
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/BooleanEnum.java
@@ -1,7 +1,19 @@
package com.vci.ubcs.starter.web.enumpck;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/4/27
 */
public enum BooleanEnum {
    /**
     * true
     */
    TRUE("true"),
    /**
     * false
     */
    FASLE("false");
    private final String value;
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/BeanUtil.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/ClassUtil.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -9,7 +9,6 @@
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
import com.vci.ubcs.starter.web.toolmodel.DateConverter;
import org.slf4j.Logger;
@@ -136,11 +135,6 @@
                return 0.0D;
            }
        }
    }
    public static boolean getBoolean(String s) {
        return BooleanEnum.TRUE.getValue().equals(s);
    }
    public static String removeComma(String s) {
@@ -1200,20 +1194,6 @@
        } catch (Throwable var7) {
            if (log.isErrorEnabled()) {
                log.error("设置属性的值出错了错误", var7);
            }
        }
    }
    public static void setValueForField(String fieldName, Object obj, String value) {
        try {
            Field field = getFieldForObject(fieldName, obj);
            if (field != null) {
                setValueForField(field, obj, value);
            }
        } catch (Exception var4) {
            if (log.isErrorEnabled()) {
                log.error("设置属性的值出错了错误", var4);
            }
        }
Source/UBCS/ubcs-service/ubcs-code/pom.xml
@@ -23,28 +23,17 @@
            <version>3.0.1.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-ddl</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.vci.ubcs</groupId>-->
<!--            <artifactId>ubcs-ddl</artifactId>-->
<!--            <artifactId>ubcs-omd-api</artifactId>-->
<!--            <version>3.0.1.RELEASE</version>-->
<!--            <exclusions>-->
<!--                <exclusion>-->
<!--                    <groupId>com.vci</groupId>-->
<!--                    <artifactId>vci-starter-word</artifactId>-->
<!--                </exclusion>-->
<!--            </exclusions>-->
<!--            <scope>compile</scope>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-omd-api</artifactId>
            <version>3.0.1.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-util-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
@@ -61,12 +50,6 @@
            <groupId>cn.easyproject</groupId>
            <artifactId>orai18n</artifactId>
            <version>${orai18n.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-dict-api</artifactId>
            <version>3.0.1.RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/CodeApplication.java
@@ -16,10 +16,13 @@
 */
package com.vci.ubcs.code;
import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import org.springblade.core.cloud.client.UbcsCloudApplication;
import org.springblade.core.launch.UbcsApplication;
import org.springblade.core.launch.constant.AppConstant;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
/**
 * Code启动器
@@ -28,6 +31,7 @@
 * ludc
 */
@UbcsCloudApplication
@ComponentScan("com.vci.ubcs.*")
public class CodeApplication {
    public static void main(String[] args) {
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClassifyValueController.java
@@ -42,7 +42,7 @@
     */
    @GetMapping("/treeCodeClassifyValue")
    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject)  {
        return codeClassifyValueService.treeCodeClassifyValue(treeQueryObject);
        return  codeClassifyValueService.treeCodeClassifyValue(treeQueryObject);
    }
    /**
@@ -81,7 +81,7 @@
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     */
    @DeleteMapping( "/deleteData")
    public R delCodeClassifyValue(@RequestBody CodeClassifyValueDTO codeClassifyValueDTO) {
    public R delCodeClassifyValue( CodeClassifyValueDTO codeClassifyValueDTO) {
        return codeClassifyValueService.deleteCodeClassifyValue(codeClassifyValueDTO);
    }
@@ -130,7 +130,7 @@
            CodeClassifyValueDTO codeFixedValueDTO = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(json.get(i))), CodeClassifyValueDTO.class);
            dtoList.add(codeFixedValueDTO);
        }
        String codeclassifysecoid = (String) param.get("codeClassifySecOid");
        String codeclassifysecoid = (String) param.get("codeclassifysecoid");
        VciBaseUtil.alertNotNull(dtoList,"码值集合");
        if (CollectionUtils.isEmpty(dtoList)){
            return R.success("");
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstempattrController.java
@@ -18,15 +18,10 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.code.dto.CodeClstempattrDTO;
import com.vci.ubcs.code.entity.CodeClstempattrEntity;
import com.vci.ubcs.code.service.ICodeClstempattrService;
import com.vci.ubcs.code.vo.CodeClstempattrVO;
import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
import com.vci.ubcs.code.wrapper.CodeClstempattrWrapper;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@@ -36,12 +31,9 @@
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
/**
 * ç¼–码库定义-模板属性 æŽ§åˆ¶å™¨
@@ -51,11 +43,11 @@
 */
@RestController
@AllArgsConstructor
@RequestMapping("/codeClassifyTempAttrController")
@RequestMapping("/CodeClstempattr")
@Api(value = "编码库定义-模板属性", tags = "编码库定义-模板属性接口")
public class CodeClstempattrController extends BladeController {
    private final ICodeClstempattrService codeClstempattrService;
    private final ICodeClstempattrService CodeClstempattrService;
    /**
     * ç¼–码库定义-模板属性 è¯¦æƒ…
@@ -64,7 +56,7 @@
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "详情", notes = "传入CodeClstempattr")
    public R<CodeClstempattrVO> detail(CodeClstempattrEntity CodeClstempattr) {
        CodeClstempattrEntity detail = codeClstempattrService.getOne(Condition.getQueryWrapper(CodeClstempattr));
        CodeClstempattrEntity detail = CodeClstempattrService.getOne(Condition.getQueryWrapper(CodeClstempattr));
        return R.data(CodeClstempattrWrapper.build().entityVO(detail));
    }
    /**
@@ -74,7 +66,7 @@
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "分页", notes = "传入CodeClstempattr")
    public R<IPage<CodeClstempattrVO>> list(CodeClstempattrEntity CodeClstempattr, Query query) {
        IPage<CodeClstempattrEntity> pages = codeClstempattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeClstempattr));
        IPage<CodeClstempattrEntity> pages = CodeClstempattrService.page(Condition.getPage(query), Condition.getQueryWrapper(CodeClstempattr));
        return R.data(CodeClstempattrWrapper.build().pageVO(pages));
    }
@@ -85,7 +77,7 @@
    @ApiOperationSupport(order = 3)
    @ApiOperation(value = "分页", notes = "传入CodeClstempattr")
    public R<IPage<CodeClstempattrVO>> page(CodeClstempattrVO CodeClstempattr, Query query) {
        IPage<CodeClstempattrVO> pages = codeClstempattrService.selectCodeClstempattrPage(Condition.getPage(query), CodeClstempattr);
        IPage<CodeClstempattrVO> pages = CodeClstempattrService.selectCodeClstempattrPage(Condition.getPage(query), CodeClstempattr);
        return R.data(pages);
    }
@@ -96,7 +88,7 @@
    @ApiOperationSupport(order = 4)
    @ApiOperation(value = "新增", notes = "传入CodeClstempattr")
    public R save(@Valid @RequestBody CodeClstempattrEntity CodeClstempattr) {
        return R.status(codeClstempattrService.save(CodeClstempattr));
        return R.status(CodeClstempattrService.save(CodeClstempattr));
    }
    /**
@@ -106,7 +98,7 @@
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "修改", notes = "传入CodeClstempattr")
    public R update(@Valid @RequestBody CodeClstempattrEntity CodeClstempattr) {
        return R.status(codeClstempattrService.updateById(CodeClstempattr));
        return R.status(CodeClstempattrService.updateById(CodeClstempattr));
    }
    /**
@@ -116,7 +108,7 @@
    @ApiOperationSupport(order = 6)
    @ApiOperation(value = "新增或修改", notes = "传入CodeClstempattr")
    public R submit(@Valid @RequestBody CodeClstempattrEntity CodeClstempattr) {
        return R.status(codeClstempattrService.saveOrUpdate(CodeClstempattr));
        return R.status(CodeClstempattrService.saveOrUpdate(CodeClstempattr));
    }
    /**
@@ -126,133 +118,8 @@
    @ApiOperationSupport(order = 7)
    @ApiOperation(value = "逻辑删除", notes = "传入ids")
    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
        return R.status(codeClstempattrService.removeBatchByIds(Func.toLongList(ids)));
        return R.status(CodeClstempattrService.removeBatchByIds(Func.toLongList(ids)));
    }
    /**
     * ä¸»é¢˜åº“分类的模板属性列表
     * @param baseQueryObject åŸºç¡€æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等
     * @return ä¸»é¢˜åº“分类的模板属性显示对象列表
     */
    @GetMapping("/gridCodeClassifyTemplateAttr")
    public DataGrid<CodeClstempattrVO> gridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
        if(baseQueryObject == null){
            baseQueryObject = new BaseQueryObject();
        }
        return codeClstempattrService.gridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
    /**
     * å¢žåŠ  ä¸»é¢˜åº“分类的模板属性
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象
     * @return æ‰§è¡Œç»“果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象
     */
    @PostMapping( "/addSave")
    public R<CodeClstempattrVO> addSave(@RequestBody CodeClstempattrDTO codeClassifyTemplateAttrDTO){
        CodeClstempattrVO codeClassifyTemplateAttrVO = codeClstempattrService.addSave(codeClassifyTemplateAttrDTO);
        return R.data(codeClassifyTemplateAttrVO);
    }
    /**
     * æ‰¹é‡ä¿å­˜åˆ—表数据
     * @param list
     * @return
     */
    @PostMapping( "/batchAddSave")
    public R<List<CodeClstempattrVO>> batchAddSaves(@RequestBody List<CodeClstempattrDTO> list){
        if(CollectionUtils.isEmpty(list)){
            return R.fail("列表不能为空!");
        }
        List<CodeClstempattrVO> codeClassifyTemplateAttrVOs = codeClstempattrService.batchAddSave(list);
        return R.data(codeClassifyTemplateAttrVOs);
    }
    /**
     * ä¿®æ”¹ ä¸»é¢˜åº“分类的模板属性
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象
     * @return æ‰§è¡Œç»“果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象
     */
    @PutMapping("/editSave")
    public R<CodeClstempattrVO> editSave(@RequestBody CodeClstempattrDTO codeClassifyTemplateAttrDTO){
        return codeClstempattrService.editSave(codeClassifyTemplateAttrDTO);
    }
    /**
     * åˆ é™¤ä¸»é¢˜åº“分类的模板属性
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象,oid和ts需要传输
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     */
    @DeleteMapping( "/deleteData")
    public R delCodeClassifyTemplateAttr(@RequestBody CodeClstempattrDTO codeClassifyTemplateAttrDTO) {
        return codeClstempattrService.deleteCodeClassifyTemplateAttr(codeClassifyTemplateAttrDTO);
    }
    /**
     * ä¸»é”®èŽ·å–ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param oid ä¸»é”®
     * @return ä¸»é¢˜åº“分类的模板属性显示对象
     */
    @GetMapping("/getObjectByOid")
    public R<CodeClstempattrVO> getObjectByOid(String oid){
        CodeClstempattrVO codeClassifyTemplateAttrVO = codeClstempattrService.getObjectByOid(oid);
        return R.data(codeClassifyTemplateAttrVO);
    }
    /**
     * ä¸»é”®æ‰¹é‡èŽ·å–ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param oids ä¸»é”®ï¼Œå¤šä¸ªä»¥é€—号分隔,但是受性能影响,建议一次查询不超过10000个
     * @return ä¸»é¢˜åº“分类的模板属性显示对象
     */
    @GetMapping("/listDataByOids")
    public R listCodeClassifyTemplateAttrByOids(String oids){
        Collection<CodeClstempattrVO> voCollection =  codeClstempattrService.listCodeClassifyTemplateAttrByOids(VciBaseUtil.str2List(oids));
//        BaseResult baseResult = BaseResult.success();
//        baseResult.setData(voCollection);
        return  R.data(voCollection);
    }
    /**
     * å‚照主题库分类的模板属性列表
     * @param baseQueryObject åŸºç¡€æŸ¥è¯¢å¯¹è±¡ï¼ŒåŒ…含查询条件,分页,排序等
     * @return ä¸»é¢˜åº“分类的模板属性显示对象列表,生效的内容
     */
    @GetMapping("/refDataGrid")
    public DataGrid<CodeClstempattrVO> refDataGridCodeClassifyTemplateAttr(BaseQueryObject baseQueryObject){
        if(baseQueryObject == null){
            baseQueryObject = new BaseQueryObject();
        }
        return codeClstempattrService.refDataGridCodeClassifyTemplateAttr(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
    }
    /**
     * æŸ¥è¯¢è¿™ä¸ªä¸šåŠ¡ç±»åž‹ä¸‹çš„æ‰€æœ‰å±žæ€§,排除掉这个模板已经存在的属性
     * @param baseQueryObject
     * @return
     */
    @GetMapping("/codeClassifyTemplateAttrByBtm")
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
        return codeClstempattrService.codeClassifyTemplateAttrByBtm(baseQueryObject);
    }
    /**
     * æŸ¥è¯¢è¿™ä¸ªä¸šåŠ¡ç±»åž‹ä¸‹ã€è¿™ä¸ªæ¨¡æ¿å·²ç»å­˜åœ¨çš„å±žæ€§
     * @param baseQueryObject
     * @return
     */
    @GetMapping("/codeClassifyTemplateAttrByBtmHave")
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
        return codeClstempattrService.codeClassifyTemplateAttrByBtmHave(baseQueryObject);
    }
    /**
     * åŒæ­¥åˆ°å…¶ä»–模板
     * @param codeClassifyAttrDTO   id è‹±æ–‡åç§°
     * @return æ‰§è¡Œç»“æžœ
     */
    @PostMapping( "/copyto")
    public R copyto(@RequestBody CodeClstempattrDTO codeClassifyAttrDTO) {
        return codeClstempattrService.copyto(codeClassifyAttrDTO);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeClstemplateController.java
@@ -25,9 +25,8 @@
import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
import com.vci.ubcs.code.service.ICodeClstemplateService;
import com.vci.ubcs.code.vo.CodeClstemplateVO;
import com.vci.ubcs.code.wrapper.PlCodeClstemplateWrapper;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.code.wrapper.PlCodeClstemplateWrapper;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import io.swagger.annotations.Api;
@@ -143,37 +142,16 @@
        return  plCodeClstemplateService.treeCodeClassifyTemplate(treeQueryObject);
    }
    /**
     * åˆ†ç±»æ¨¡æ¿åˆ—表
     * @param plCodeClstemplate åŸºç¡€æŸ¥è¯¢å¯¹è±¡
     * @return æ˜¾ç¤ºå¯¹è±¡
     */
    @GetMapping("/gridCodeClassifyTemplate")
    public DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query){
        return  plCodeClstemplateService.gridCodeClassifyTemplate(plCodeClstemplate,query);
    }
    /**
     * å¢žåŠ  åˆ†ç±»æ¨¡æ¿å¯¹è±¡
     * @param codeClassifyTemplateDTO åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ•°æ®ä¼ è¾“对象
     * @return æ‰§è¡Œç»“果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象
     */
    @PostMapping( "/addSave")
    public R<CodeClstemplateVO> addSave(@RequestBody CodeClstemplateDTO codeClassifyTemplateDTO){
        return plCodeClstemplateService.addSave(codeClassifyTemplateDTO);
    }
    /**
     * ä¿®æ”¹ åˆ†ç±»æ¨¡æ¿å¯¹è±¡
     * @param codeClassifyTemplateDTO åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ•°æ®ä¼ è¾“对象
     * @return æ‰§è¡Œç»“果,success为true表示成功,msg是失败的提示信息,obj是添加完成后的显示对象
     */
    @PutMapping("/editSave")
    public R<CodeClstemplateVO> editSave(@RequestBody CodeClstemplateDTO codeClassifyTemplateDTO){
        return plCodeClstemplateService.editSave(codeClassifyTemplateDTO);
    }
//    /**
//     * åˆ†ç±»æ¨¡æ¿åˆ—表
//     * @param baseQueryObject åŸºç¡€æŸ¥è¯¢å¯¹è±¡
//     * @return æ˜¾ç¤ºå¯¹è±¡
//     */
//    @GetMapping("/gridCodeClassifyTemplate")
//    public DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(BaseQueryObject baseQueryObject){
//
//        return  plCodeClstemplateService.gridCodeClassifyTemplate(baseQueryObject.getConditionMap(),baseQueryObject.getPageHelper());
//    }
    /**
@@ -256,7 +234,7 @@
     * @return
     */
    @PostMapping( "/editDate")
    public R editDate(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
    public R editDate( CodeClstemplateDTO codeClassifyDTO) {
        return plCodeClstemplateService.updateLcStatus(codeClassifyDTO.getOid(),CodeClassifyTemplateLC.EDITING.getValue());
    }
@@ -269,27 +247,5 @@
    public R Upgrade(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
        return plCodeClstemplateService.Upgrade(codeClassifyDTO);
    }
    @GetMapping( "/upgrade1")
    public R upgrade1(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
        return Upgrade(codeClassifyDTO);
    }
    /**
     * å…‹éš†
     * @param codeClassifyDTO
     * @return oid模板oid
     */
    @PostMapping( "/copy")
    public R copyTemplate(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
        return plCodeClstemplateService.copyTemplate(codeClassifyDTO);
    }
    @GetMapping( "/copyTemplate1")
    public R copyTemplate1(@RequestBody CodeClstemplateDTO codeClassifyDTO) {
        return copyTemplate(codeClassifyDTO);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClassifyMapper.java
@@ -81,9 +81,6 @@
    @MapKey("oid")
    List<Map<String,Object>> selectAllLevelParentByOid(@Param("oid") String oid);
    @MapKey("oid")
    List<Map<String,Object>> selectAllLevelParents(@Param("oid") String oid);
    @MapKey("oid")
    List<Map<String,Object>> selectByFieldPath(@Param("fieldPath") String fieldPath);
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstempattrMapper.java
@@ -39,7 +39,6 @@
     */
    List<CodeClstempattrVO> selectCodeClstempattrPage(IPage page, CodeClstempattrVO CodeClstempattr);
    /**
     * æ¡ä»¶æŸ¥è¯¢æŽ’序
     *
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodeClstemplateMapper.java
@@ -20,11 +20,9 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vci.ubcs.code.entity.CodeClstemplateEntity;
import com.vci.ubcs.code.vo.CodeClstemplateVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * ç¼–码库定义-模板管理 Mapper æŽ¥å£
@@ -59,17 +57,5 @@
     */
    int countAllLevelChildOid(@Param("oid") String oid);
    /**
     * æ ¡éªŒæ˜¯å¦æœ‰ä¸‹çº§èŠ‚ç‚¹ï¼Œä¸æ ¡éªŒæ˜¯å¦å…³è”äº†æ•°æ®
     *
     * @param nameoid
     * @return
     */
//    @MapKey("REVISIONSEQ")
    Map<String,Object> getNextRevision(@Param("nameoid") String nameoid);
    List<CodeClstemplateEntity> selectCodeClassifyTemplateDOByTree(@Param("codeclassifyoid") String codeclassifyoid,
                                                          @Param("lcstatus") String lcstatus);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
@@ -41,7 +41,4 @@
    List<CodePhaseattrEntity> selectByPhasea(String oid);
    List<CodePhaseattrEntity> selectByPhaseaIds(String oids);
    List<CodePhaseattrEntity> listLinkAttrDOByTemplateAttrDOS(String id,String codeClassifyTemplateOid);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyService.java
@@ -198,18 +198,4 @@
     * @return ä¸»é¢˜åº“显示树
     */
    List<Tree> treeTopCodeClassify(TreeQueryObject treeQueryObject);
    /**
     * èŽ·å–è¿™ä¸ªåˆ†ç±»ä¸‹çš„ä¸šåŠ¡ç±»åž‹ï¼Œå½“å‰æ²¡æœ‰å°±èŽ·å–ä¸Šçº§çš„ç¬¬ä¸€ä¸ªä¸šåŠ¡ç±»åž‹
     * @param oid å½“前分类的oid
     * @return oid,id,name,btmtypeid,btmtypename
     */
    CodeClassify selectBtmOrParentBtm(String oid);
    /**
     * èŽ·å–æ‰€æœ‰ä¸‹çº§æ•°æ®
     * @param oid æ•°æ®ä¸»é”®
     * @return æŸ¥è¯¢ç»“æžœ
     */
    List<CodeClassify> selectAllLevelParents(String oid);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java
@@ -18,18 +18,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.code.dto.CodeClstempattrDTO;
import com.vci.ubcs.code.entity.CodeClstempattrEntity;
import com.vci.ubcs.code.vo.CodeClstempattrVO;
import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import org.springblade.core.tool.api.R;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
 * ç¼–码库定义-模板属性 æœåŠ¡ç±»
@@ -68,77 +61,5 @@
     * @return æ˜¾ç¤ºå¯¹è±¡
     */
    CodeClstempattrVO codeClassifyTemplateAttrDO2VO(CodeClstempattrEntity codeClassifyTemplateAttrDO);
    /**
     * æŸ¥è¯¢æ‰€æœ‰çš„主题库分类的模板属性
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return æ‰§è¡Œç»“æžœ
     */
    DataGrid<CodeClstempattrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper);
    /**
     * å¢žåŠ ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     */
    CodeClstempattrVO addSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO);
    List<CodeClstempattrVO> batchAddSave(List<CodeClstempattrDTO> list);
    /**
     * ä¿®æ”¹ä¸»é¢˜åº“分类的模板属性
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     */
    R<CodeClstempattrVO> editSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO);
    /**
     * åˆ é™¤ä¸»é¢˜åº“分类的模板属性
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象,oid和ts需要传输
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     */
    R deleteCodeClassifyTemplateAttr(CodeClstempattrDTO codeClassifyTemplateAttrDTO);
    /**
     * ä¸»é”®èŽ·å–ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param oid ä¸»é”®
     * @return ä¸»é¢˜åº“分类的模板属性显示对象
     */
    CodeClstempattrVO getObjectByOid(String oid);
    /**
     * ä¸»é”®æ‰¹é‡èŽ·å–ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param oidCollections ä¸»é”®é›†åˆï¼Œä½†æ˜¯å—性能影响,建议一次查询不超过10000个
     * @return ä¸»é¢˜åº“分类的模板属性显示对象
     */
    Collection<CodeClstempattrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections);
    /**
     * å‚照主题库分类的模板属性列表
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return ä¸»é¢˜åº“分类的模板属性显示对象列表,生效的内容
     */
    DataGrid<CodeClstempattrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper);
    /**
     * æŸ¥è¯¢è¿™ä¸ªæ¨¡æ¿ï¼Œä¸šåŠ¡ç±»åž‹ä¸‹çš„æ‰€æœ‰æœªé€‰æ‹©çš„å±žæ€§
     * @param baseQueryObject
     * @return
     */
    DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject);
    /**
     * æŸ¥è¯¢è¿™ä¸ªæ¨¡æ¿ï¼Œä¸šåŠ¡ç±»åž‹ä¸‹å·²é€‰æ‹©çš„å±žæ€§
     * @param baseQueryObject
     * @return
     */
    DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject);
    /**
     * åŒæ­¥åˆ°å…¶ä»–模板
     * @param codeClassifyAttrDTO oid
     * @return
     */
    R copyto(CodeClstempattrDTO codeClassifyAttrDTO);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstemplateService.java
@@ -22,14 +22,11 @@
import com.vci.ubcs.code.entity.CodeClstemplateEntity;
import com.vci.ubcs.code.vo.CodeClstemplateVO;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
 * ç¼–码库定义-模板管理 æœåŠ¡ç±»
@@ -157,30 +154,4 @@
     * å‡ç‰ˆ
     */
    R Upgrade(CodeClstemplateDTO codeClassifyDTO);
    /**
     * æ¨¡æ¿å…‹éš†
     */
    R copyTemplate(CodeClstemplateDTO codeClassifyDTO);
    /**
     * åˆ†ç±»æ¨¡æ¿åˆ—表
     * @param plCodeClstemplate æŸ¥è¯¢æ¡ä»¶
     * @param query åˆ†é¡µå¯¹è±¡
     * @return æ˜¾ç¤ºå¯¹è±¡
     */
    DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query);
    /**
     * å¢žåŠ åˆ†ç±»æ¨¡æ¿å¯¹è±¡
     * @param codeClassifyTemplateDTO åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ•°æ®ä¼ è¾“对象
     * @return æ‰§è¡Œç»“æžœ
     */
    R<CodeClstemplateVO> addSave(CodeClstemplateDTO codeClassifyTemplateDTO);
    /**
     * ä¿®æ”¹åˆ†ç±»æ¨¡æ¿å¯¹è±¡
     * @param codeClassifyTemplateDTO åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ•°æ®ä¼ è¾“对象
     * @return æ‰§è¡Œç»“æžœ
     */
    R<CodeClstemplateVO> editSave(CodeClstemplateDTO codeClassifyTemplateDTO);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeTempphaseService.java
@@ -18,12 +18,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.code.entity.CodeClstempattrEntity;
import com.vci.ubcs.code.entity.CodeTempphaseEntity;
import com.vci.ubcs.code.vo.CodePhaseattrVO;
import com.vci.ubcs.code.vo.CodeTempphaseVO;
import java.util.List;
/**
 * ç¼–码库定义-模板阶段 æœåŠ¡ç±»
@@ -49,11 +45,4 @@
     * @return å—影响的数据
     */
    int codeTemplateDeleteTrigger(String classifyTemplateOid);
    /**
     * æ¨¡æ¿ä¿®æ”¹è§¦å‘功能
     * @param codeClassifyTemplateAttrDOInsert å±žæ€§çš„æ•°æ®å¯¹è±¡
     * @return å—影响的数据
     */
    List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> codeClassifyTemplateAttrDOInsert);
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -124,12 +124,8 @@
        if (CollectionUtils.isEmpty(deleteList)){
            return true;
        }
        boolean deletFlag = false;
        // 2、再删除基础码段
        Set<String> basicOids = deleteList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
        if(basicOids.size()>0 || !Func.isEmpty(basicOids)){
            deletFlag = codeBasicSecMapper.deleteBatchIds(basicOids) > 0;
        }
        boolean deletFlag = codeBasicSecMapper.deleteBatchIds(deleteList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet())) > 0;
        // 3、再根据删除固定码段,丛查询出来的基础码段中过滤出包含固定码段的记录
        List<CodeBasicSec> fixedSecList = deleteList.stream().filter(sec -> {
            return CodeSecTypeEnum.CODE_FIXED_SEC.getValue().equals(sec.getSecType());
@@ -139,11 +135,8 @@
            Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
            // é€šè¿‡å¤–键进行查询
            List<CodeFixedValue> fixedValueS = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query().lambda().in(CodeFixedValue::getCodeFixedSecOid,fixedSecOidSet));
            Set<String> collectOid = fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet());
            if(collectOid.size()>0 || !Func.isEmpty(collectOid)){
                // æ ¹æ®æŸ¥è¯¢å‡ºæ¥çš„id执行固定码段执行删除
                fixedValueMapper.deleteBatchIds(collectOid);
            }
            // æ ¹æ®æŸ¥è¯¢å‡ºæ¥çš„id执行固定码段执行删除
            deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()))>0;
        }
        // 4、再删除分类码段
        List<CodeBasicSec> classifySecList = deleteList.stream().filter(sec -> {
@@ -153,12 +146,9 @@
            // å°†è¦ä½œä¸ºåˆ é™¤æ¡ä»¶çš„值放在一个集合里面
            Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
            // é€šè¿‡å¤–键进行查询
            List<CodeClassifyValue> classifyValues = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
            List<CodeClassifyValue> fixedValueS = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
            // æ ¹æ®æŸ¥è¯¢å‡ºæ¥çš„主键id执行固定码段执行删除
            Set<String> codeclassifyOids = classifyValues.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet());
            if(codeclassifyOids.size()>0 || !Func.isEmpty(codeclassifyOids)){
                fixedValueMapper.deleteBatchIds(codeclassifyOids);
            }
            deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()))>0;
        }
        return deletFlag;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -5,6 +5,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
import com.vci.ubcs.code.entity.CodeClassify;
import com.vci.ubcs.code.entity.CodeClstemplateEntity;
import com.vci.ubcs.code.entity.CodeOsbtmtypeEntity;
@@ -23,15 +25,13 @@
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
import com.vci.ubcs.code.vo.pagemodel.CodeRuleVO;
import com.vci.ubcs.core.log.exception.ServiceException;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.bo.WriteExcelData;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.poi.bo.ReadExcelOption;
import com.vci.ubcs.starter.poi.bo.WriteExcelOption;
import com.vci.ubcs.starter.poi.constant.ExcelLangCodeConstant;
import com.vci.ubcs.starter.poi.util.ExcelUtil;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.LocalFileUtil;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
@@ -40,6 +40,7 @@
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.LangBaseUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.log.exception.ServiceException;
import org.apache.poi.hssf.util.HSSFColor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -984,41 +985,4 @@
        return treeCodeClassify(treeQueryObject);
    }
    /**
     * èŽ·å–è¿™ä¸ªåˆ†ç±»ä¸‹çš„ä¸šåŠ¡ç±»åž‹ï¼Œå½“å‰æ²¡æœ‰å°±èŽ·å–ä¸Šçº§çš„ç¬¬ä¸€ä¸ªä¸šåŠ¡ç±»åž‹
     * @param oid å½“前分类的oid
     * @return oid,id,name,btmtypeid,btmtypename,没有就返回null
     */
    @Override
    public CodeClassify selectBtmOrParentBtm(String oid){
        List<CodeClassify> oidList = selectAllLevelParents(oid);
        return oidList.size()==0?null:oidList.get(0);
    }
    /**
     * èŽ·å–æ‰€æœ‰å±‚çº§ä¸Šçº§å…³è”ä¸šåŠ¡ç±»åž‹æ•°æ®
     * @param oid å½“前分类的oid
     * @return oid,id,name,btmtypeid,btmtypename
     */
    @Override
    public List<CodeClassify> selectAllLevelParents(String oid){
//        String sql = "select oid,id,name,btmtypeid,btmtypename from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY) + " where btmtypeid is not null start with oid= :oid connect by prior PARENTCODECLASSIFYOID=oid ";
//        Map< String,String> conditionMap = new HashMap< String,String>();
//        conditionMap.put("oid",oid);
//        List<Map> dataList = boService.queryBySqlForMap(sql,conditionMap);
        List<Map<String, Object>> dataList = codeClassifyMapper.selectAllLevelParents(oid);
        List<CodeClassify> oidList = new ArrayList<CodeClassify>();
        if(!CollectionUtils.isEmpty(dataList)){
            for(Map data:dataList){
                CodeClassify codeClassifyDO = new CodeClassify();
                codeClassifyDO.setOid(VciBaseUtil.getStringValueFromObject(data.get("OID")));
                codeClassifyDO.setId(VciBaseUtil.getStringValueFromObject(data.get("ID")));
                codeClassifyDO.setName(VciBaseUtil.getStringValueFromObject(data.get("NAME")));
                codeClassifyDO.setBtmTypeId(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPEID")));
                codeClassifyDO.setBtmTypeName(VciBaseUtil.getStringValueFromObject(data.get("BTMTYPENAME")));
                oidList.add(codeClassifyDO);
            }
        }
        return oidList;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -4,11 +4,9 @@
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
import com.vci.ubcs.code.entity.CodeBasicSec;
import com.vci.ubcs.code.entity.CodeClassifyValue;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
import com.vci.ubcs.code.service.ICodeBasicSecService;
import com.vci.ubcs.code.service.ICodeClassifyValueService;
@@ -21,7 +19,6 @@
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -52,7 +49,7 @@
    /**
     * ä¸Šçº§èŠ‚ç‚¹çš„å±žæ€§åç§°
     */
    private static final String PARENT_FIELD_NAME = "parentClassifyValueOid";
    private static  final String PARENT_FIELD_NAME = "parentClassifyValueOid";
    /**
     * æŸ¥è¯¢åˆ†ç±»ç æ®µçš„码值 æ ‘
@@ -63,7 +60,7 @@
    @Override
    public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException {
        // List<CodeClassifyValueDO> doList =selectCodeClassifyValueDOByTree(treeQueryObject);
        List<CodeClassifyValue> doList = selectCodeClassifyValueDO4Tree(treeQueryObject);
        List<CodeClassifyValue> doList =selectCodeClassifyValueDO4Tree(treeQueryObject);
        List<CodeClassifyValueVO> voList = CodeClassifyValueWrapper.build().listVO(doList);
        TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
        treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
@@ -81,13 +78,12 @@
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"需要添加的数据对象");
        //添加对码值子父级的判断
        if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentClassifyValueOid())){
            String parentclassifyvalueoid = codeClassifyValueDTO.getParentClassifyValueOid();
            String codeclassifysecoid = codeClassifyValueDTO.getCodeClassifySecOid();
        if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentclassifyvalueoid())){
            String parentclassifyvalueoid = codeClassifyValueDTO.getParentclassifyvalueoid();
            String codeclassifysecoid = codeClassifyValueDTO.getCodeclassifysecoid();
            CodeClassifyValue parentDO = codeClassifyValueMapper.selectById(parentclassifyvalueoid);
            if (parentDO.getCodeClassifySecOid().equalsIgnoreCase(codeclassifysecoid)){
                throw new VciBaseException("不允许在父码值中直接添加子码值");
@@ -96,16 +92,6 @@
        //将DTO转换为DO
        CodeClassifyValue codeClassifyValueDO = new CodeClassifyValue();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDTO,codeClassifyValueDO);
        //填充一些默认值
        codeClassifyValueDO.setOid(VciBaseUtil.getPk());
        codeClassifyValueDO.setRevisionOid(VciBaseUtil.getPk());
        codeClassifyValueDO.setNameOid(VciBaseUtil.getPk());
        codeClassifyValueDO.setBtmname(MdmBtmTypeConstant.CODE_CLASSIFY_VALUE);
        codeClassifyValueDO.setTs(new Date());
        codeClassifyValueDO.setCreateTime(new Date());
        codeClassifyValueDO.setCreator(AuthUtil.getUserId().toString());
        codeClassifyValueDO.setLastModifier(AuthUtil.getUserId().toString());
        codeClassifyValueDO.setLastModifyTime(new Date());
        //查询
        List<CodeClassifyValue> existList = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query()
            .lambda().eq(CodeClassifyValue::getCodeClassifySecOid, codeClassifyValueDO.getCodeClassifySecOid())
@@ -128,10 +114,6 @@
        //将DTO转换为DO
        CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
        revisionModelUtil.copyFromDTOIgnore(codeClassifyValueDTO,codeClassifyValueDO);
        //填充一些默认值
        codeClassifyValueDO.setTs(new Date());
        codeClassifyValueDO.setLastModifier(AuthUtil.getUserId().toString());
        codeClassifyValueDO.setLastModifyTime(new Date());
        boolean resBoolean = codeClassifyValueMapper.updateById(codeClassifyValueDO) > 0;
        return resBoolean;
    }
@@ -221,7 +203,7 @@
        VciBaseUtil.alertNotNull(codeClassifyValueDTO,"分类码段的码值数据对象",codeClassifyValueDTO.getOid(),"分类码段的码值的主键");
        CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
        R baseResult = checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
        if(!baseResult.isSuccess()) {
        if(baseResult.isSuccess()) {
            //找下级的,这个是可以删除的时候R
            List<String> childrenOids = codeClassifyValueMapper.selectAllLevelChildOid(codeClassifyValueDO.getOid().trim());
            if (!CollectionUtils.isEmpty(childrenOids)) {
@@ -298,12 +280,12 @@
        List<CodeClassifyValue> updateList = new ArrayList<>();
        dtoList.forEach(dto -> {
            if(StringUtils.isNotBlank(dto.getOid())){
            if( StringUtils.isNotBlank( dto.getOid() )){
                List<CodeClassifyValue> collect = valueDOList.stream().filter(value -> {
                    return dto.getOid().equals(value.getOid());
                }).collect(Collectors.toList());
                collect.forEach(ccv -> {
                    ccv.setOrderNum(dto.getOrderNum());
                    ccv.setOrderNum(dto.getOrdernum());
                    ccv.setId(dto.getId());
                    ccv.setName(dto.getName());
                    updateList.add(ccv);
@@ -353,8 +335,9 @@
        List<String> oids = codeBasicSecService.getOidByCodeclassifysecOid(conditionMap.get("codeclassifysecoid"));
        LambdaQueryWrapper<CodeClassifyValue> wrapper = Wrappers.<CodeClassifyValue>query()
            .lambda().in(CodeClassifyValue::getCodeClassifySecOid,oids)
            .orderByAsc(CodeClassifyValue::getOrderNum);
            .orderByDesc(CodeClassifyValue::getOrderNum);
        return codeClassifyValueMapper.selectList(wrapper);
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstempattrServiceImpl.java
@@ -16,47 +16,23 @@
 */
package com.vci.ubcs.code.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
import com.vci.ubcs.code.dto.CodeClstempattrDTO;
import com.vci.ubcs.code.entity.CodeClstempattrEntity;
import com.vci.ubcs.code.entity.CodeClstemplateEntity;
import com.vci.ubcs.code.enumpack.CodeLevelTypeEnum;
import com.vci.ubcs.code.mapper.CodeClstempattrMapper;
import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
import com.vci.ubcs.code.mapper.CodeOsbtmtypeattributeMapper;
import com.vci.ubcs.code.service.ICodeClstempattrService;
import com.vci.ubcs.code.service.ICodeTempphaseService;
import com.vci.ubcs.code.vo.CodeClstempattrVO;
import com.vci.ubcs.code.vo.CodeOsbtmtypeattributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.PatternUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.pagemodel.*;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciDateUtil;
import com.vci.ubcs.system.entity.DictBiz;
import com.vci.ubcs.system.feign.IDictBizClient;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
 * ç¼–码库定义-模板属性 æœåŠ¡å®žçŽ°ç±»
@@ -69,22 +45,6 @@
    @Resource
    CodeClstempattrMapper codeClstempattrMapper;
//    @Resource
//    ICodeTempphaseService codeTempphaseService;
    @Resource
    IDictBizClient iDictBizClient;
    @Resource
    CodeClstemplateMapper codeClstemplateMapper;
    @Resource
    CodeOsbtmtypeattributeMapper codeOsbtmtypeattributeMapper;
    @Resource
    ICodeTempphaseService codeTempphaseService;
    /**
     * å¯¹è±¡çš„æ“ä½œ
     */
    @Autowired(required = false)
    private RevisionModelUtil revisionModelUtil;
    @Override
    public IPage<CodeClstempattrVO> selectCodeClstempattrPage(IPage<CodeClstempattrVO> page, CodeClstempattrVO CodeClstempattr) {
@@ -151,648 +111,5 @@
            vo.setAttributeDataTypeText(VciFieldTypeEnum.getTextByValue(vo.getAttributedatatype()));
        }
        return vo;
    }
    /**
     * æŸ¥è¯¢æ‰€æœ‰çš„主题库分类的模板属性
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public DataGrid<CodeClstempattrVO> gridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) {
        DataGrid<CodeClstempattrVO> dataGrid=new DataGrid<CodeClstempattrVO>();
        //没有传递参数,就不执行查询逻辑
        if(conditionMap.size()==0){
            dataGrid.setData(new ArrayList<>());
            dataGrid.setTotal(0);
            return dataGrid;
        }
        if (pageHelper == null) {
            pageHelper = new PageHelper(-1);
        }
        pageHelper.addDefaultAsc("ordernum");
//        IPage iPage = new IPage();
        Query query = new Query();
        query.setAscs("ordernum");
//        query.setSize(100);
        if(pageHelper.getLimit() != -1){
            query.setSize(pageHelper.getLimit());
            query.setCurrent(pageHelper.getPage());
        }
//        Condition.getPage(query)
        CodeClstempattrVO codeClstempattrVO = new CodeClstempattrVO();
//        BeanUtil.toBean(map,codeClstempattrVO);
//        BeanUtil
        BeanMap beanMap = BeanMap.create(codeClstempattrVO);
        beanMap.putAll(conditionMap);
//        Condition.getQueryWrapper(
        IPage<CodeClstempattrEntity> doList = baseMapper.
            selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeClstempattrVO));
        if (!CollectionUtils.isEmpty(doList.getRecords())) {
//            CodeClstempattrEntity codeClstempattrEntity = new CodeClstempattrEntity();
//            BeanUtils.copyProperties(conditionMap, codeClstempattrEntity);
//            List<CodeClstempattrEntity> codeClstempattrEntities = new ArrayList<>();
//            BeanUtils.copyProperties(doList,codeClstempattrEntities);
//            codeClstempattrEntities.addAll(doList);
            dataGrid.setData(codeClassifyTemplateAttrDO2VOs(doList.getRecords()));
            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(baseMapper.selectCount(Condition.getQueryWrapper(codeClstempattrVO)))));
        }
        return dataGrid;
    }
    /**
     * å¢žåŠ ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public CodeClstempattrVO addSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO){
        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"需要添加的数据对象");
        //将DTO转换为DO
        CodeClstempattrEntity codeClassifyTemplateAttrDO = new CodeClstempattrEntity();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
        baseMapper.insert(codeClassifyTemplateAttrDO);
        return codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO);
    }
    /**
     * æ‰¹é‡æ·»åŠ 
     * @param codeClassifyTemplateAttrDTOs æ•°æ®ä¼ è¾“对象
     * @return ä¿å­˜åŽçš„æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    @Transactional
    public List<CodeClstempattrVO> batchAddSave(List<CodeClstempattrDTO> codeClassifyTemplateAttrDTOs) {
        if(CollectionUtils.isEmpty(codeClassifyTemplateAttrDTOs)){
            return new ArrayList<>();
        }
        //取所有属性的英文名称,第三个验证需要用到
        Map<String,CodeClstempattrDTO> attrDTOMap =codeClassifyTemplateAttrDTOs.stream().collect(Collectors.toMap(s->s.getId().toLowerCase(Locale.ROOT), t->t));
        //找属性中文名字重复
        Map<String, Long> nameCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getName(), Collectors.counting()));
        List<String> repeatNameList = nameCountMap.keySet().stream().filter(s -> nameCountMap.get(s) > 1).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(repeatNameList)){
            throw new VciBaseException("模板属性中文名称【{0}】重复",new String[]{ repeatNameList.stream().collect(Collectors.joining(","))});
        }
        //找属性英文名字重复
        Map<String, Long> idCountMap = codeClassifyTemplateAttrDTOs.stream().collect(Collectors.groupingBy(s -> s.getId().toLowerCase(Locale.ROOT), Collectors.counting()));
        List<String> repeatIdList = idCountMap.keySet().stream().filter(s -> idCountMap.get(s) > 1).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(repeatIdList)){
            throw new VciBaseException("模板属性英文名称【{0}】重复",new String[]{ repeatIdList.stream().collect(Collectors.joining(","))});
        }
        //模板oid
        String CLASSIFYTEMPLATEOID = null;
        //转换
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOInsert = new ArrayList<CodeClstempattrEntity>();
        List<String> prefix = new ArrayList<>();
        List<String> suffix = new ArrayList<>();
        List<String> dateFormates = new ArrayList<>();
        for (CodeClstempattrEntity codeClassifyTemplateAttrDTO:codeClassifyTemplateAttrDTOs){
            VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"需要添加的数据对象");
            //将DTO转换为DO
            CodeClstempattrEntity codeClassifyTemplateAttrDO = new CodeClstempattrEntity();
            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
            codeClassifyTemplateAttrDOInsert.add(codeClassifyTemplateAttrDO);
            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getPrefixvalue())){
                prefix.add(codeClassifyTemplateAttrDO.getPrefixvalue());
            }
            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getSuffixvalue())){
                suffix.add(codeClassifyTemplateAttrDO.getSuffixvalue());
            }
            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodedateformat())){
                dateFormates.add(codeClassifyTemplateAttrDO.getCodedateformat());
            }
            //判断传过来的枚举注入是否是jsonArr格式
            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getEnumstring())&&!checkKVArr(codeClassifyTemplateAttrDO.getEnumstring())){
                throw new VciBaseException("{0}{1}属性的枚举注入数据格式错误!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
            }
            //分类注入
            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getClassifyinvokeattr())
                && !CodeLevelTypeEnum.MIN.getValue().equalsIgnoreCase(codeClassifyTemplateAttrDO.getClassifyinvokelevel())
                && VciBaseUtil.getInt(codeClassifyTemplateAttrDO.getClassifyinvokelevel()) < 0){
                throw new VciBaseException("{0}{1}属性的是分类注入,但是注入层级不能小于0!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
            }
            //判断传过来的参照配置是否是json格式
            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getReferconfig())&&!checkKVObj(codeClassifyTemplateAttrDO.getReferconfig())){
                throw new VciBaseException("{0}{1}属性的参照配置数据格式错误!",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
            }
            if(StringUtils.isNotBlank(codeClassifyTemplateAttrDO.getCodedateformat()) && !checkDateFormat(codeClassifyTemplateAttrDO.getCodedateformat())){
                throw new VciBaseException("{0}{1}属性的时间格式不符合要求",new String[]{codeClassifyTemplateAttrDO.getId(),codeClassifyTemplateAttrDO.getName()});
            }
            //如果是组合规则,里面使用的属性不能缺失,也都得显示
            String componentrule = codeClassifyTemplateAttrDTO.getComponentrule();
            boolean isContainsDynamicParameter = PatternUtil.isContainsDynamicParameter(componentrule);
            if(isContainsDynamicParameter){
                List<String> userdAttrList =  PatternUtil.getKeyListByContent(componentrule);//包含的所有${xxx}中的xxx
                if(!CollectionUtils.isEmpty(userdAttrList)){
                    String unExistAttr = userdAttrList.stream().filter(s -> !attrDTOMap.containsKey(s.toLowerCase(Locale.ROOT))).collect(Collectors.joining(","));
                    if(StringUtils.isNotBlank(unExistAttr)){
                        throw new VciBaseException("{0}属性是组合规则,但是规则里包含的属性[{1}]在当前模板中不存在!",new String[]{codeClassifyTemplateAttrDO.getName(), unExistAttr});
                    }
                    //要看看表单是否显示
                    String unFormDisplayAttr = userdAttrList.stream().filter(s -> !VciBaseUtil.getBoolean(attrDTOMap.getOrDefault(s.toLowerCase(Locale.ROOT),
                        new CodeClstempattrDTO()).getFormdisplayflag())).collect(Collectors.joining(","));
                    if(StringUtils.isNotBlank(unFormDisplayAttr)){
                        throw new VciBaseException("{0}属性是组合规则,但是规则里包含的属性[{1}]在当前模板中没有设置 è¡¨å•显示 ",new String[]{codeClassifyTemplateAttrDO.getName(),unFormDisplayAttr});
                    }
                }
            }
            if(CLASSIFYTEMPLATEOID==null){
                CLASSIFYTEMPLATEOID = codeClassifyTemplateAttrDTO.getClassifytemplateoid();
            }
        }
        //执行数据保存操作
//        WebUtil.setPersistence(false);//不执行保存
        //先都删了
//        VciQueryWrapperForDO deleteAttrWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
//        deleteAttrWrapper.addQueryMap("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
        Map<String,Object> condition = new HashMap<>();
        condition.put("CLASSIFYTEMPLATEOID",CLASSIFYTEMPLATEOID);
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDODelete = baseMapper.selectByMap(condition);
        //oids
        List<String> oids = new ArrayList<String>();
        for (CodeClstempattrEntity codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDODelete){
            oids.add(codeClassifyTemplateAttrDO.getOid());
        }
//        BatchCBO batchCBOTemplateDelete = new BatchCBO();
        if(!CollectionUtils.isEmpty(oids)){
            baseMapper.deleteBatchIds(oids);
        }
        //再新增
        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
            this.saveBatch(codeClassifyTemplateAttrDOInsert);
        }
        //调用阶段
        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOInsert)){
             codeTempphaseService.codeTemplateAttrModifyTrigger(codeClassifyTemplateAttrDOInsert);
        }
//        SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
        //处理可输可选的字符
        if(!CollectionUtils.isEmpty(prefix)){
            for (String s : prefix) {
                DictBiz dictBiz = new DictBiz();
                dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
                dictBiz.setDictKey(s);
                dictBiz.setDictValue("prefix");
                iDictBizClient.getCheck(dictBiz) ;
            }
//                .saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"prefix",prefix,sessionInfo);
        }
        if(!CollectionUtils.isEmpty(suffix)){
            for (String s : suffix) {
                DictBiz dictBiz = new DictBiz();
                dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
                dictBiz.setDictKey(s);
                dictBiz.setDictValue("suffix");
                iDictBizClient.getCheck(dictBiz) ;
            }
//            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"suffix",suffix,sessionInfo);
        }
        if(!CollectionUtils.isEmpty(dateFormates)){
            for (String s : dateFormates) {
                DictBiz dictBiz = new DictBiz();
                dictBiz.setCode(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR);
                dictBiz.setDictKey(s);
                dictBiz.setDictValue("dateFormates");
                iDictBizClient.getCheck(dictBiz) ;
            }
//            charService.saveBySameNamespaceAndFlag(MdmBtmTypeConstant.CODE_CLASSIFY_TEMPLATE_ATTR,"dateFormates",dateFormates,sessionInfo);
        }
//        WebUtil.setPersistence(true);//执行保存
//        boService.persistenceBatch(batchCBOTemplateDelete);//一起执行保存
        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOInsert);
    }
    public boolean checkKVArr(String kvString){
        boolean isKV = true;
        try {
            JSONObject.parseArray(kvString, KeyValue.class);
        }catch (Exception e){
            isKV=false;
        }
        return isKV;
    }
    public boolean checkKVObj(String kvString){
        boolean isKV = true;
        try {
            JSONObject.parseObject(kvString, UIFormReferVO.class);
        }catch (Exception e){
            isKV=false;
        }
        return isKV;
    }
    /**
     * æ ¡éªŒæ—¶é—´æ ¼å¼
     * @param dateFormat æ—¶é—´æ ¼å¼
     * @return true表示校验通过
     */
    public boolean checkDateFormat(String dateFormat){
        try{
            VciDateUtil.date2Str(new Date(),dateFormat);
            return  true;
        }catch (Throwable e){
            return false;
        }
    }
    /**
     * ä¿®æ”¹ä¸»é¢˜åº“分类的模板属性
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    @Override
    public R editSave(CodeClstempattrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"数据对象",codeClassifyTemplateAttrDTO.getOid(),"主题库分类的模板属性主键");
        //判断传过来的枚举注入是否是jsonArr格式
        if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getEnumstring())&&!checkKVArr(codeClassifyTemplateAttrDTO.getEnumstring())){
            throw new VciBaseException("枚举注入数据格式错误!");
        }
        //判断传过来的参照配置是否是json格式
        if(StringUtils.isNotBlank(codeClassifyTemplateAttrDTO.getReferbtmid())&&!checkKVObj(codeClassifyTemplateAttrDTO.getReferbtmid())){
            throw new VciBaseException("枚举注入数据格式错误!");
        }
        //检查ts
        CodeClstempattrEntity codeClassifyTemplateAttrDOCopyFromDTO = new CodeClstempattrEntity();
//        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDOCopyFromDTO);
//        boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOCopyFromDTO);
        //检查ts
//        Map<String,Object> condition = new HashMap<>(2);
//        condition.put("oid",codeClassifyTemplateAttrDTO.getOid());
//        condition.put("ts",codeClassifyTemplateAttrDTO.getTs());
        CodeClstempattrEntity detail = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
        if(!detail.getTs().toString().equals(codeClassifyTemplateAttrDTO.getTs().toString())){//不是最新的不让改
            return R.fail("当前数据不是最新,请刷新后再修改!");
        }
        //将DTO转换为DO
        CodeClstempattrEntity codeClassifyTemplateAttrDO = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
        revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
        baseMapper.updateById(codeClassifyTemplateAttrDO);
        return R.data(codeClassifyTemplateAttrDO2VO(codeClassifyTemplateAttrDO));
    }
    /**
     * åˆ é™¤ä¸»é¢˜åº“分类的模板属性
     * @param codeClassifyTemplateAttrDTO ä¸»é¢˜åº“分类的模板属性数据传输对象,oid和ts需要传输
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     * @throws VciBaseException å‚数为空,被引用时抛出异常
     */
    @Override
    public R deleteCodeClassifyTemplateAttr(CodeClstempattrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeClassifyTemplateAttrDTO,"主题库分类的模板属性数据对象",codeClassifyTemplateAttrDTO.getOid(),"主题库分类的模板属性的主键");
        CodeClstempattrEntity codeClassifyTemplateAttrDO = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
        R baseResult = checkIsCanDeleteForDO(codeClassifyTemplateAttrDTO,codeClassifyTemplateAttrDO);
        if(baseResult.isSuccess()) {
        }else{
            return baseResult;
        }
        //执行删除操作
        int deleteNum = baseMapper.deleteById(codeClassifyTemplateAttrDO.getOid());
        return deleteNum>0?R.success(DELETE_SUCCESS):R.fail(DELETE_FAIL);
    }
    /**
     * æ ¡éªŒæ˜¯å¦å¯ä»¥åˆ é™¤ï¼Œå¦‚果存在下级,并且下级有数据引用则不能删除
     * @param codeClassifyTemplateAttrDTO æ•°æ®ä¼ è¾“对象
     * @param codeClassifyTemplateAttrDO æ•°æ®åº“中的数据对象
     * @return success为true为可以删除,false表示有数据引用,obj为true表示有下级
     */
    private R checkIsCanDeleteForDO(CodeClstempattrDTO codeClassifyTemplateAttrDTO, CodeClstempattrEntity codeClassifyTemplateAttrDO) {
//        boService.checkTs(codeClassifyTemplateAttrDO);
//        Map<String,Object> condition = new HashMap<>(2);
//        condition.put("oid",codeClassifyTemplateAttrDTO.getOid());
//        condition.put("ts",codeClassifyTemplateAttrDTO.getTs());
        CodeClstempattrEntity detail = baseMapper.selectById(codeClassifyTemplateAttrDTO.getOid());
//        .selectOne(Condition.getQueryWrapper(condition,CodeClstempattrEntity.class));
        if(!detail.getTs().toString().equals(codeClassifyTemplateAttrDTO.getTs().toString())){//不是最新的不让改
            return R.fail("当前数据不是最新,请刷新后再修改!");
        }
        if(!checkIsLinked(codeClassifyTemplateAttrDO.getOid())) {
            return R.success("可以删除!");
        }else{
            return R.fail(DATA_LINKED_NOT_DELETE);
        }
    }
    /**
     * æ ¡éªŒæ˜¯å¦è¢«å¼•用
     * @param oid ä¸»é”®
     * @throws VciBaseException è¢«å¼•用的时候会抛出异常
     */
    private boolean checkIsLinked(String oid) throws VciBaseException{
        //TODO æ·»åŠ éœ€è¦æ ¡éªŒå¼•ç”¨çš„åœ°æ–¹
        return false;
    }
    /**
     * ä¸»é”®èŽ·å–ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param oid ä¸»é”®
     * @return ä¸»é¢˜åº“分类的模板属性显示对象
     * @throws VciBaseException å‚数为空,数据不存在时会抛出异常
     */
    @Override
    public  CodeClstempattrVO getObjectByOid(String oid) throws VciBaseException{
        return codeClassifyTemplateAttrDO2VO(selectByOid(oid));
    }
    /**
     * ä¸»é”®æŸ¥è¯¢æ•°æ®å¯¹è±¡
     * @param oid ä¸»é”®
     * @return  æ•°æ®å¯¹è±¡
     * @throws VciBaseException å‚数为空,并且数据不存在的时候会抛出异常
     */
    private CodeClstempattrEntity selectByOid(String oid) throws VciBaseException{
        VciBaseUtil.alertNotNull(oid,"主键");
        CodeClstempattrEntity codeClassifyTemplateAttrDO = baseMapper.selectById(oid.trim());
        if(codeClassifyTemplateAttrDO == null || StringUtils.isBlank(codeClassifyTemplateAttrDO.getOid())){
            throw new VciBaseException(DATA_OID_NOT_EXIST);
        }
        return codeClassifyTemplateAttrDO;
    }
    /**
     * ä¸»é”®æ‰¹é‡èŽ·å–ä¸»é¢˜åº“åˆ†ç±»çš„æ¨¡æ¿å±žæ€§
     * @param oidCollections ä¸»é”®é›†åˆï¼Œä½†æ˜¯å—性能影响,建议一次查询不超过10000个
     * @return ä¸»é¢˜åº“分类的模板属性显示对象
     * @throws VciBaseException æŸ¥è¯¢å‡ºçŽ°å¼‚å¸¸æ—¶ä¼šæŠ›å‡º
     */
    @Override
    public Collection<CodeClstempattrVO> listCodeClassifyTemplateAttrByOids(Collection<String> oidCollections) {
        VciBaseUtil.alertNotNull(oidCollections,"数据对象主键集合");
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = listCodeClassifyTemplateAttrDOByOidCollections(oidCollections);
        return codeClassifyTemplateAttrDO2VOs(codeClassifyTemplateAttrDOList);
    }
    /**
     * ä½¿ç”¨ä¸»é”®é›†åˆæŸ¥è¯¢æ•°æ®å¯¹è±¡
     * @param oidCollections ä¸»é”®çš„集合
     * @return æ•°æ®å¯¹è±¡åˆ—表
     */
    private List<CodeClstempattrEntity> listCodeClassifyTemplateAttrDOByOidCollections(Collection<String> oidCollections){
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = new ArrayList<CodeClstempattrEntity>();
        if(!CollectionUtils.isEmpty(oidCollections)){
            Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
            for(Collection<String> oids: oidCollectionsList){
                List<CodeClstempattrEntity> tempDOList = baseMapper.selectBatchIds(oids);
                if(!CollectionUtils.isEmpty(tempDOList)){
                    codeClassifyTemplateAttrDOList.addAll(tempDOList);
                }
            }
        }
        return  codeClassifyTemplateAttrDOList;
    }
    /**
     * å‚照主题库分类的模板属性列表
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µå’ŒæŽ’序
     * @return ä¸»é¢˜åº“分类的模板属性显示对象列表,生效的内容
     * @throws VciBaseException æŸ¥è¯¢æ¡ä»¶å’Œåˆ†é¡µå‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public DataGrid<CodeClstempattrVO> refDataGridCodeClassifyTemplateAttr(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException{
        if(conditionMap == null){
            conditionMap = new HashMap<String, String>();
        }
        return gridCodeClassifyTemplateAttr(conditionMap,pageHelper);
    }
    /**
     * æŸ¥è¯¢è¿™ä¸ªæ¨¡æ¿ï¼Œä¸šåŠ¡ç±»åž‹ä¸‹çš„æ‰€æœ‰æœªé€‰æ‹©çš„å±žæ€§
     * @param baseQueryObject
     * @return
     */
    @Override
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtm(BaseQueryObject baseQueryObject){
        if(baseQueryObject.getConditionMap() == null){
            baseQueryObject.setConditionMap(new HashMap<>());
        }
        DataGrid<CodeOsbtmtypeattributeVO> dataGrid=new DataGrid<CodeOsbtmtypeattributeVO>();
        //模板oid
        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
        String name = baseQueryObject.getConditionMap().getOrDefault("name","");
        String id = baseQueryObject.getConditionMap().getOrDefault("id","");
        //没有oid不执行逻辑
        if(StringUtils.isBlank(templateAttrOid)){
            dataGrid.setData(new ArrayList<>());
            dataGrid.setTotal(0);
            return dataGrid;
        }
        //查询模板对象
        CodeClstemplateEntity codeClassifyTemplateDO = codeClstemplateMapper.selectById(templateAttrOid);
        //这个业务类型下的所有属性
        List<CodeOsbtmtypeattributeVO> boAttrs = (List<CodeOsbtmtypeattributeVO>) codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());// this.btmService.listAttributeByBtmId(codeClassifyTemplateDO.getBtmTypeId());
//        codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
//        BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
        //把默认的属性也添加到boAttrs
        if(boAttrs == null){
            boAttrs = new ArrayList<>();
        }
        if(!false){
//            List<CodeOsbtmtypeattributeVO> finalBoAttrs = boAttrs;
//            attributeService.getDefaultAttributeVOs().stream().forEach(attr-> {
//                CodeOsbtmtypeattributeVO attributeVO = new CodeOsbtmtypeattributeVO();
//                BeanUtil.convert(attr, attributeVO);
//                if ("id".equalsIgnoreCase(attributeVO.getId())) {
//                    attributeVO.setName("企业编码");
//                }
//                if ("name".equalsIgnoreCase(attributeVO.getId())) {
//                    attributeVO.setName("集团码");
//                }
//                attributeVO.setAttrDataType(attr.getAttributeDataType());
//                attributeVO.setAttributeLength(attr.getAttrLength());
//                attributeVO.setReferBtmTypeId(attr.getBtmTypeId());
//                attributeVO.setReferBtmTypeName(attr.getBtmTypeName());
//                finalBoAttrs.add(attributeVO);
//            });
//            boAttrs = finalBoAttrs;
            Object o = null;
        }
        //这个模板下已经有的属性
//        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
//        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = codeClstempattrMapper.selectByMap(condition);
        List<String> btmOids = new ArrayList<String>();
        for (CodeClstempattrEntity codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
            btmOids.add(codeClassifyTemplateAttrDO.getId());
        }
        //过滤掉已经存在的属性
        List<CodeOsbtmtypeattributeVO> boAttrss = new ArrayList<CodeOsbtmtypeattributeVO>();
        for (CodeOsbtmtypeattributeVO osBtmTypeAttributeVO:boAttrs){
            if(!btmOids.contains(osBtmTypeAttributeVO.getId())){
                //看看是不是有模糊查询
                boolean inSearch = true;
                if(StringUtils.isNotBlank(name) && !osBtmTypeAttributeVO.getName().contains(name.replace("*",""))){
                    inSearch = false;
                }
                if(StringUtils.isNotBlank(id) && !osBtmTypeAttributeVO.getId().contains(id.replace("*",""))){
                    inSearch = false;
                }
                if(inSearch) {
                    boAttrss.add(osBtmTypeAttributeVO);
                }
            }
        }
        dataGrid.setData(boAttrss);
        dataGrid.setTotal(boAttrss.size());
        return dataGrid;
    }
    /**
     * æŸ¥è¯¢è¿™ä¸ªæ¨¡æ¿ï¼Œä¸šåŠ¡ç±»åž‹ä¸‹å·²é€‰æ‹©çš„å±žæ€§
     * @param baseQueryObject
     * @return
     */
    @Override
    public DataGrid<CodeOsbtmtypeattributeVO> codeClassifyTemplateAttrByBtmHave(BaseQueryObject baseQueryObject){
        DataGrid<CodeOsbtmtypeattributeVO> dataGrid=new DataGrid<CodeOsbtmtypeattributeVO>();
        //模板oid
        String templateAttrOid = baseQueryObject.getConditionMap().get("oid");
        //没有oid不执行逻辑
        if(StringUtils.isBlank(templateAttrOid)){
            dataGrid.setData(new ArrayList<>());
            dataGrid.setTotal(0);
            return dataGrid;
        }
        //查询模板对象
        CodeClstemplateEntity codeClassifyTemplateDO = codeClstemplateMapper.selectById(templateAttrOid);
        //这个业务类型下的所有属性
        List<CodeOsbtmtypeattributeVO> boAttrs = (List<CodeOsbtmtypeattributeVO>) codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());//this.btmService.listAttributeByBtmIdHasDefault(codeClassifyTemplateDO.getBtmTypeId());
//        codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId());
//        BeanUtils.copyProperties(codeOsbtmtypeattributeMapper.selectById(codeClassifyTemplateDO.getBtmTypeId()),boAttrs);
        //这个模板下已经有的属性
        //把默认的属性也添加到boAttrs
        if(boAttrs == null){
            boAttrs = new ArrayList<>();
        }
//        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
//        queryWrapper.addQueryMap("CLASSIFYTEMPLATEOID",templateAttrOid);
//        Map<String,Object> condition = new HashMap<>(1);
//        condition.put("CLASSIFYTEMPLATEOID",templateAttrOid);
        QueryWrapper<CodeClstempattrEntity> wrapper=new QueryWrapper<>();
        wrapper.eq("CLASSIFYTEMPLATEOID",templateAttrOid);
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = codeClstempattrMapper.selectList(wrapper);
        List<String> btmOids = new ArrayList<String>();
        for (CodeClstempattrEntity codeClassifyTemplateAttrDO:codeClassifyTemplateAttrDOList){
            btmOids.add(codeClassifyTemplateAttrDO.getId());
        }
        //过滤掉除了自身的别的属性
        List<CodeOsbtmtypeattributeVO> boAttrss = new ArrayList<CodeOsbtmtypeattributeVO>();
        for (CodeOsbtmtypeattributeVO osBtmTypeAttributeVO:boAttrs){
            if(btmOids.contains(osBtmTypeAttributeVO.getId())){
                boAttrss.add(osBtmTypeAttributeVO);
            }
        }
        dataGrid.setData(boAttrss);
        dataGrid.setTotal(boAttrss.size());
        return dataGrid;
    }
    /**
     * åŒæ­¥åˆ°å…¶ä»–模板
     * @param codeClassifyTemplateAttrDTO oid
     * @return
     */
    @Override
    public R copyto(CodeClstempattrDTO codeClassifyTemplateAttrDTO) throws VciBaseException{
        String templateAttrOid = codeClassifyTemplateAttrDTO.getOid();
        //查询出来要复制的对象
        CodeClstempattrEntity codeClassifyTemplateAttrDO = selectByOid(templateAttrOid);
        String id = codeClassifyTemplateAttrDO.getId();//英文名称
        String classfyTemplateOid = codeClassifyTemplateAttrDO.getClassifytemplateoid();
        //查询其他id=id的模板属性
//        VciQueryWrapperForDO queryWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
//        queryWrapper.addQueryMap("id",id);
//        Map<String,Object> condition = new HashMap<>(1);
//        condition.put("id",id);
        QueryWrapper<CodeClstempattrEntity> wrapper=new QueryWrapper<>();
        wrapper.eq("id",id);
        //所有id=id的模板属性
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList =codeClstempattrMapper.selectList(wrapper);
        //要删除的模板属性的oids
        List<String> deleteOids = new ArrayList<String>();
        //要修改的模板属性对象
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOListInsert = new ArrayList<CodeClstempattrEntity>();
        for (CodeClstempattrEntity codeClassifyTemplateAttrDOi:codeClassifyTemplateAttrDOList){
            String oid = codeClassifyTemplateAttrDOi.getOid();
            String templateOldOid = codeClassifyTemplateAttrDOi.getClassifytemplateoid();
            CodeClstempattrEntity codeClassifyTemplateAttrDOInsert = new CodeClstempattrEntity();
            BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateAttrDO,codeClassifyTemplateAttrDOInsert);
            codeClassifyTemplateAttrDOInsert.setOid(oid);
            codeClassifyTemplateAttrDOInsert.setClassifytemplateoid(templateOldOid);
            codeClassifyTemplateAttrDOListInsert.add(codeClassifyTemplateAttrDOInsert);
            deleteOids.add(codeClassifyTemplateAttrDOi.getOid());
        }
//        WebUtil.setPersistence(false);//不执行保存
        //删除
//        BatchCBO batchCBOTemplateAttrDelete = codeClassifyTemplateAttrDOissifyTemplateAttrMapper.batchDeleteByOids(deleteOids);
        codeClstempattrMapper.deleteBatchIds(deleteOids);
        //再新增
//        BatchCBO batchCBOTemplateAttrInsert = codeClassifyTemplateAttrMapper.batchInsert(codeClassifyTemplateAttrDOListInsert);
//        batchCBOTemplateAttrDelete.copyFromOther(batchCBOTemplateAttrInsert);
        this.saveBatch(codeClassifyTemplateAttrDOListInsert);
//        WebUtil.setPersistence(true);//执行保存
//        boService.persistenceBatch(batchCBOTemplateAttrDelete);//一起执行保存
        return R.success("操作成功!");
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
@@ -20,37 +20,36 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.dto.CodeClstemplateDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.entity.CodeClstempattrEntity;
import com.vci.ubcs.code.entity.CodeClstemplateEntity;
import com.vci.ubcs.code.enumpack.CodeClassifyTemplateLC;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
import com.vci.ubcs.code.mapper.*;
import com.vci.ubcs.code.service.ICodeClassifyService;
import com.vci.ubcs.code.mapper.CodeClstempattrMapper;
import com.vci.ubcs.code.mapper.CodeClstemplateMapper;
import com.vci.ubcs.code.service.ICodeClstemplateService;
import com.vci.ubcs.code.vo.CodeClstempattrVO;
import com.vci.ubcs.code.vo.CodeClstemplateVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.*;
import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_RELEASED;
import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.LC_STATUS;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
import static com.vci.ubcs.code.service.impl.CodeClassifyServiceImpl.PARENT_FIELD_NAME;
@@ -84,23 +83,6 @@
    private CodeTempbuttonServiceImpl codeTempbuttonServiceImpl;
    @Autowired(required = false)
    private CodeClsflowtempServiceImpl codeClsflowtempServiceImpl;
    @Autowired(required = false)
    private CodeClsflowtempMapper codeClsflowtempMapper;
    @Autowired(required = false)
    private CodeTempphaseMapper codeTempphaseMapper;
    @Autowired(required = false)
    private CodeTempbuttonMapper codeTempbuttonMapper;
    @Autowired(required = false)
    private CodePhaseattrMapper codePhaseattrMapper;
    @Autowired(required = false)
    private ICodeClassifyService codeClassifyService;
    @Autowired(required = false)
    private CodeClstemplateMapper codeClstemplateMapper;
    @Autowired(required = false)
    private CodePhaseattrServiceImpl codePhaseattrServiceImpl;
    @Override
    public IPage<CodeClstemplateVO> selectPlCodeClstemplatePage(IPage<CodeClstemplateVO> page, CodeClstemplateVO plCodeClstemplate) {
        return page.setRecords(baseMapper.selectPlCodeClstemplatePage(page, plCodeClstemplate));
@@ -137,12 +119,8 @@
//        VciParentQueryOption parentQueryOption = new VciParentQueryOption();
//        parentQueryOption.setParentFieldName(PARENT_FIELD_NAME);
//        queryWrapperForDO.parentQueryChild(treeQueryObject,parentQueryOption);
//        CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
//        codeClstemplateEntity.set
        return baseMapper.selectCodeClassifyTemplateDOByTree(
            treeQueryObject.getConditionMap().get("codeclassifyoid"),
            treeQueryObject.getConditionMap().get("lcStatus"));
//        return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
        CodeClstemplateEntity codeClstemplateEntity = new CodeClstemplateEntity();
        return baseMapper.selectList(Condition.getQueryWrapper(codeClstemplateEntity));
//        return codeClassifyTemplateMapper.selectByWrapper(queryWrapperForDO);
    }
@@ -232,20 +210,19 @@
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClstemplateDTO,codeClassifyTemplateDOCopyFromDTO);
        //检查ts
//        Map<String,Object> condition = new HashMap<>(2);
//        condition.put("oid",codeClstemplateDTO.getOid());
//        condition.put("ts",codeClstemplateDTO.getTs());
        Map<String,Object> condition = new HashMap<>(2);
        condition.put("oid",codeClstemplateDTO.getOid());
        condition.put("ts",codeClstemplateDTO.getTs());
        CodeClstemplateEntity detail = baseMapper
            .selectById(codeClstemplateDTO.getOid());
        if(!detail.getTs().toString().equals(codeClstemplateDTO.getTs().toString())){//不是最新的不让改
            .selectOne(Condition.getQueryWrapper(condition,CodeClstemplateEntity.class));
        if(detail == null){//不是最新的不让改
            return R.fail("当前数据不是最新,请刷新后再修改!");
        }
        //校验下级是否有引用
        if(checkChildIsLinked(codeClstemplateEntity.getOid())){
            return R.fail(DATA_CASCADE_LINKED_NOT_DELETE);
        }
        return R.success(String.valueOf(checkHasChild(codeClstemplateEntity.getOid())));
        return R.status(checkHasChild(codeClstemplateEntity.getOid()));
    }
    /**
@@ -296,7 +273,6 @@
     * @param codeClstemplateDTO åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ•°æ®ä¼ è¾“对象,oid和ts需要传输
     * @return åˆ é™¤ç»“果反馈::success:成功,fail:失败
     */
    @Transactional
    @Override
    public R deleteCodeClassifyTemplate(CodeClstemplateDTO codeClstemplateDTO) {
        checkIsCanDelete(codeClstemplateDTO);
@@ -386,8 +362,8 @@
     * å‚ç…§æ ‘ åˆ†ç±»æ¨¡æ¿å¯¹è±¡
     * @param treeQueryObject æ ‘形查询对象
     * @return åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ˜¾ç¤ºæ ‘
     * @throws VciBaseException æŸ¥è¯¢æ¡ä»¶å’Œåˆ†é¡µå‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Transactional
    @Override
    public List<Tree> referTree(TreeQueryObject treeQueryObject) {
        if(treeQueryObject == null){
@@ -442,7 +418,6 @@
     * @param lcStatus
     * @return
     */
    @Transactional
    @Override
    public R updateLcStatus( String oid, String lcStatus){
        CodeClstemplateEntity codeClassifyTemplateDO = baseMapper.selectById(oid);
@@ -465,7 +440,6 @@
     * å‡ç‰ˆ
     * @param codeClassifyDTO
     */
    @Transactional
    @Override
    public R Upgrade(CodeClstemplateDTO codeClassifyDTO) {
@@ -480,95 +454,93 @@
        //需要新增的升级模板
//        ClientBusinessObject clientBusinessObject_template = boService.selectCBOByOid(codeClassifyDTO.getOid(), "codeclstemplate");
        CodeClstemplateEntity codeCls_template = baseMapper.selectById(templateOldOid);
        CodeClstemplateEntity codeCls_template_insert = new CodeClstemplateEntity();
        CodeClstemplateEntity codeCls_template_insert = null;
//            ClientBusinessObject clientBusinessObject_template_insert = null;
//        try {
//            clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
            codeCls_template_insert.setOid(VciBaseUtil.getPk());
            codeCls_template_insert.setRevisionOid(VciBaseUtil.getPk());
            codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
            codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
            codeCls_template_insert.setLastR(String.valueOf(1));
            codeCls_template_insert.setFirstR(String.valueOf(0));
            codeCls_template_insert.setFirstV(String.valueOf(1));
            codeCls_template_insert.setLastV(String.valueOf(1));
            codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
            codeCls_template_insert.setCreateTime(new Date());
            codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
            codeCls_template_insert.setLastModifyTime(new Date());
            codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
            codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
            Map rvObj = baseMapper.getNextRevision(codeCls_template.getNameOid());
            codeCls_template_insert.setRevisionSeq(Integer.parseInt(rvObj.get("REVISIONSEQ").toString()));
            codeCls_template_insert.setRevisionValue(rvObj.get("REVISIONVAL").toString());
////            clientBusinessObject_template_insert = clientBusinessObjectOperation.reviseBusinessObject(clientBusinessObject_template, "");
////            codeCls_template_insert.setOid((new ObjectUtility()).getNewObjectID36());
////            toBo.setRevisionid((new ObjectUtility()).getNewObjectID36());
//            codeCls_template_insert.setNameOid(codeCls_template.getNameOid());
//            codeCls_template_insert.setBtmname(codeCls_template.getBtmname());
////            codeCls_template_insert.setIsLast(1);
////            codeCls_template_insert.setIsFirstr(0);
////            codeCls_template_insert.setIsFirstv(1);
////            codeCls_template_insert.setIsLastV(1);
//            codeCls_template_insert.setCreator(AuthUtil.getUser().getUserName());
//            codeCls_template_insert.setCreateTime(new Date());
//            codeCls_template_insert.setLastModifier(AuthUtil.getUser().getUserName());
//            codeCls_template_insert.setLastModifyTime(new Date());
//            codeCls_template_insert.setRevisionRule(codeCls_template.getRevisionRule());
//            codeCls_template_insert.setVersionRule(codeCls_template.getVersionRule());
//            RevisionValueObject rvObj = this.getNextRevision(fromBo.getBtmName(), fromBo.getNameoid(), item.revRuleName, item.revInput, revisionVal);
//            codeCls_template_insert.setRevisionSeq(rvObj.getRevisionSeq());
//            codeCls_template_insert.setRevisionValue(rvObj.getRevisionVal());
//            VersionValueObject versionObj = this.getVersionValue(item.verRuleName);
            codeCls_template_insert.setVersionSeq(Integer.parseInt(rvObj.get("VERSIONSEQ").toString()));
            codeCls_template_insert.setVersionValue(rvObj.get("VERSIONVAL").toString());
            codeCls_template_insert.setLctid(codeCls_template.getLctid());
            codeCls_template_insert.setLcStatus("Editing");
            codeCls_template_insert.setId(codeCls_template.getId());
            codeCls_template_insert.setName(codeCls_template.getName());
            codeCls_template_insert.setDescription(codeCls_template.getDescription());
            codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
//            codeCls_template_insert.setCheckinBy(userName);
            codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
//            codeCls_template_insert.setVersionSeq(versionObj.getVersionSeq());
//            codeCls_template_insert.setVersionValue(versionObj.getVersionVal());
//            codeCls_template_insert.setLctId(codeCls_template.getLctId());
//            codeCls_template_insert.setLcStatus(this.getLcFirstStatus(item.lifeCycle));
//            codeCls_template_insert.setId(codeCls_template.getId());
//            codeCls_template_insert.setName(codeCls_template.getName());
//            codeCls_template_insert.setDescription(codeCls_template.getDescription());
//            codeCls_template_insert.setOwner(AuthUtil.getUser().getUserName());
////            codeCls_template_insert.setCheckinBy(userName);
//            codeCls_template_insert.setCopyFromVersion(codeCls_template.getOid());
//        }catch (VCIError e){
//            e.printStackTrace();
//            logger.error("===============>分类模板-升版复制出错oid: "+templateOldOid+",mes"+e.error_message);
//            return BaseResult.error("升版出错");
//        }
        int insertCount = baseMapper.insert(codeCls_template_insert);
//        CodeClstemplateEntity codeClassifyTemplateDO = new CodeClstemplateEntity();
//
//
//        CodeClassifyTemplateDO codeClassifyTemplateDO = new CodeClassifyTemplateDO();
//        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyDTO,codeClassifyTemplateDO);
//        WebUtil.copyValueToObjectFromCbos(clientBusinessObject_template_insert,codeClassifyTemplateDO);
        //modify by weidy@2022-2-27
        //升版后不能使用insert方法,因为那个永远是新增一条数据,
        //上方先从dto转给do,然后把升版的初始化的属性拷贝给do,最后再从do拷贝到cbo上
//        //modify by weidy@2022-2-27
//        //升版后不能使用insert方法,因为那个永远是新增一条数据,
//        //上方先从dto转给do,然后把升版的初始化的属性拷贝给do,最后再从do拷贝到cbo上
//        WebUtil.copyValueToCboFromObj(clientBusinessObject_template_insert,codeClassifyTemplateDO);
        //升版过后的模板oid
        String templateNewOid = codeCls_template_insert.getOid();
        //需要复制的模板属性
        //查询老模板下边的所有属性,赋值新模板oid
//        //升版过后的模板oid
//        String templateNewOid = codeClassifyTemplateDO.getOid();
//
//        //需要复制的模板属性
//        //查询老模板下边的所有属性,赋值新模板oid
//        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
//        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("classifyTemplateOid",templateOldOid);
        List<CodeClstempattrEntity> codeClstempattrEntities = codeClstempattrMapper.selectByMap(condition);
//        List<CodeClassifyTemplateAttrDO> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
        for (CodeClstempattrEntity codeClassifyTemplateAttrDO :codeClstempattrEntities){
//        for (CodeClassifyTemplateAttrDO codeClassifyTemplateAttrDO :codeClassifyTemplateAttrDOList){
//            String attrOid = VciBaseUtil.getPk();
            codeClassifyTemplateAttrDO.setOid(null);
            codeClassifyTemplateAttrDO.setClassifytemplateoid(templateNewOid);
            codeClstempattrMapper.insert(codeClassifyTemplateAttrDO);
        }
        //复制模板流程
        List<CodeClsflowtempEntity>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
        //复制模板阶段,阶段属性
        Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
        List<CodeTempphaseEntity> codeClassifyPhaseDOList = (ArrayList<CodeTempphaseEntity>)phase_attrMap.get("phase");//模板阶段
        List<CodePhaseattrEntity> codePhaseAttrDOList = (ArrayList<CodePhaseattrEntity>)phase_attrMap.get("phaseAttr");//阶段属性
        //复制模板按钮
        List<CodeTempbuttonEntity> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
        //一起保存数据
//            codeClassifyTemplateAttrDO.setOid(attrOid);
//            codeClassifyTemplateAttrDO.setClassifyTemplateOid(templateNewOid);
//        }
//
//        //复制模板流程
//        List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = copyTemplateProcess(templateOldOid,templateNewOid);
//
//        //复制模板阶段,阶段属性
//        Map phase_attrMap = copyTemplatePhase_attr(templateOldOid,templateNewOid);
//
//        List<CodeTemplatePhaseDO> codeClassifyPhaseDOList = (ArrayList<CodeTemplatePhaseDO>)phase_attrMap.get("phase");//模板阶段
//        List<CodePhaseAttrDO> codePhaseAttrDOList = (ArrayList<CodePhaseAttrDO>)phase_attrMap.get("phaseAttr");//阶段属性
//
//        //复制模板按钮
//        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = copyTemplateButton(templateOldOid,templateNewOid);
//
//        //一起保存数据
//        WebUtil.setPersistence(false);//不执行保存
        //保存模板
//        //保存模板
//        BatchCBO batchCBOTemplate = new BatchCBO();
        //batchCBO保存的时候没有能够自动update源数据的isLastR
        //batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
        //使用saveRevisionBuisnessObject可以解决这个问题,这里先暂时执行两次保存
//        //batchCBO保存的时候没有能够自动update源数据的isLastR
//        //batchCBOTemplate.getCreateCbos().add(clientBusinessObject_template_insert);
//        //使用saveRevisionBuisnessObject可以解决这个问题,这里先暂时执行两次保存
//        try {
//            clientBusinessObjectOperation.saveRevisionBuinessObject(clientBusinessObject_template_insert);
//        } catch (VCIError vciError) {
//            throw new VciBaseException("升版保存出错了",new String[0],vciError);
//        }
        // end --modify by lihang @20220408
        //codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
        //保存模板属性
//        // end --modify by lihang @20220408
//        //codeClassifyTemplateMapper.insert(codeClassifyTemplateDO);
//        //保存模板属性
//        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)){
//            BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
//            batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
@@ -600,432 +572,8 @@
//        WebUtil.setPersistence(true);//执行保存
//
//        boService.persistenceBatch(batchCBOTemplate);//一起执行保存
//
//        return BaseResult.success("升版成功!");
        return R.success("升版成功!");
    }
    @Override
    @Transactional
    public R copyTemplate(CodeClstemplateDTO codeClassifyDTO) {
        //旧的模板oid
        String oldOid = codeClassifyDTO.getOid();
        //新的模板oid
        String newOid = VciBaseUtil.getPk();
        //分类oid,复制过来的新的分类oid
        String codeClassifyOid = codeClassifyDTO.getCodeClassifyOid();
        //复制模板
        CodeClstemplateEntity codeClassifyTemplateDO_old = baseMapper.selectById(oldOid);//旧模板
        //验证,业务类型是不是一致
        CodeClassify codeClassifyDO_old = codeClassifyService.selectBtmOrParentBtm(codeClassifyTemplateDO_old.getCodeClassifyOid());
        if(codeClassifyDO_old==null){
            return R.fail("复制的模板所属分类以及上级没有业务类型,请重新选择!");
        }
        //找当前分类下的业务类型
        CodeClassify codeClassifyDO_new = codeClassifyService.selectBtmOrParentBtm(codeClassifyOid);
        if(codeClassifyDO_new==null){
            return R.fail("当前分类没有业务类型,请重新选择!");
        }
        if(!codeClassifyDO_old.getBtmTypeId().equals(codeClassifyDO_new.getBtmTypeId())){
            return R.fail("选择的分类和当前分类业务类型不一致,请重新选择!");
        }
        codeClassifyTemplateDO_old.setId(codeClassifyDTO.getId());//英文名称
        codeClassifyTemplateDO_old.setName(codeClassifyDTO.getName());//中文名称
        codeClassifyTemplateDO_old.setDescription(codeClassifyDTO.getDescription());//描述
        codeClassifyTemplateDO_old.setCodeClassifyOid(codeClassifyOid);//分类oid
        codeClassifyTemplateDO_old.setOid(newOid);
        List<CodeClstemplateEntity> codeClassifyTemplateDOList = new ArrayList<CodeClstemplateEntity>();
        codeClassifyTemplateDOList.add(codeClassifyTemplateDO_old);
        //复制模板属性
        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = copyTemplateAttr(oldOid,newOid);
        //复制模板流程
        List<CodeClsflowtempEntity> codeClassifyProcessTempDOList = copyTemplateProcess(oldOid,newOid);
        //复制模板阶段,阶段属性
        Map  phase_attrMap = copyTemplatePhase_attr(oldOid,newOid);
        List<CodeTempphaseEntity> codeClassifyPhaseDOList = (ArrayList<CodeTempphaseEntity>)phase_attrMap.get("phase");//模板阶段
        List<CodePhaseattrEntity> codePhaseAttrDOList = (ArrayList<CodePhaseattrEntity>)phase_attrMap.get("phaseAttr");//阶段属性
        //复制模板按钮
        List<CodeTempbuttonEntity> codeClassifyTemplateButtonDOList = copyTemplateButton(oldOid,newOid);
//        baseMapper.insert(codeClassifyTemplateDOList);
        this.saveBatch(codeClassifyTemplateDOList);
        codeTempbuttonServiceImpl.saveBatch(codeClassifyTemplateButtonDOList);
        codeClsflowtempServiceImpl.saveBatch(codeClassifyProcessTempDOList);
        codeClstempattrService.saveBatch(codeClassifyTemplateAttrDOList);
        codeTempphaseServiceImpl.saveBatch(codeClassifyPhaseDOList);
        codePhaseattrServiceImpl.saveBatch(codePhaseAttrDOList);
        //一起保存数据
//        WebUtil.setPersistence(false);//不执行保存
//        //保存模板
//        BatchCBO batchCBOTemplate = codeClassifyTemplateMapper.batchInsert(codeClassifyTemplateDOList);
//        //保存模板属性
//        if(!CollectionUtils.isEmpty(codeClassifyTemplateAttrDOList)) {
//            BatchCBO batchCBOTemplateAttr = codeClassifyTemplateAttrDaoI.batchInsert(codeClassifyTemplateAttrDOList);
//            batchCBOTemplate.copyFromOther(batchCBOTemplateAttr);
//        }
//
//        //保存模板流程
//        if(!CollectionUtils.isEmpty(codeClassifyProcessTempDOList)) {
//            BatchCBO batchCBOTemplateProcessAttr = codeClassifyProcessTempDaoI.batchInsert(codeClassifyProcessTempDOList);
//            batchCBOTemplate.copyFromOther(batchCBOTemplateProcessAttr);
//        }
//
//        //模板阶段
//        if(!CollectionUtils.isEmpty(codeClassifyPhaseDOList)) {
//            BatchCBO batchCBOTemplatePhaseAttr = codeTemplatePhaseDaoI.batchInsert(codeClassifyPhaseDOList);
//            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttr);
//        }
//
//        //模板阶段属性
//        if(!CollectionUtils.isEmpty(codePhaseAttrDOList)) {
//            BatchCBO batchCBOTemplatePhaseAttrAttr = codePhaseAttrDaoI.batchInsert(codePhaseAttrDOList);
//            batchCBOTemplate.copyFromOther(batchCBOTemplatePhaseAttrAttr);
//        }
//
//        //模板按钮
//        if(!CollectionUtils.isEmpty(codeClassifyTemplateButtonDOList)) {
//            BatchCBO batchCBOTemplateButtonAttr = codeClassifyTemplateButtonDaoI.batchInsert(codeClassifyTemplateButtonDOList);
//            batchCBOTemplate.copyFromOther(batchCBOTemplateButtonAttr);
//        }
//
//
//        WebUtil.setPersistence(true);//执行保存
//
//        boService.persistenceBatch(batchCBOTemplate);//一起执行保存
        return R.success("复制成功!");
    }
    private HashMap<String,Object> getVersionValue(int verRuleName) {
        HashMap<String,Object> obj = new HashMap<>(2);
        obj.put("VersionSeq",1);
        if (verRuleName == 0) {
            obj.put("VersionVal","1");
        } else if (verRuleName == 1) {
            obj.put("VersionVal","a");
        } else if (verRuleName == 2) {
            obj.put("VersionVal","0");
        }
        return obj;
    }
    /**
     * å¤åˆ¶æ¨¡æ¿æµç¨‹
     */
    public List<CodeClsflowtempEntity> copyTemplateProcess(String templateOldOid,String templateNewOid){
//        VciQueryWrapperForDO processWrapper = new VciQueryWrapperForDO(CodeClassifyProcessTempDO.class);
//        processWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("classifyTemplateOid",templateOldOid);
        List<CodeClsflowtempEntity> codeClsflowtempEntities = codeClsflowtempMapper.selectByMap(condition);
//        List<CodeClassifyProcessTempDO>  codeClassifyProcessTempDOList = codeClassifyProcessTempDaoI.selectByWrapper(processWrapper);//要保存的新的模板流程
        for (CodeClsflowtempEntity codeClassifyProcessTempDO:codeClsflowtempEntities){
//            String newOid = VciBaseUtil.getPk();
            codeClassifyProcessTempDO.setOid(null);
            //codeClassifyProcessTempDO.setCodeClassifyOid(templateNewOid);
            codeClassifyProcessTempDO.setClassifytemplateoid(templateNewOid);
//            codeClsflowtempMapper.insert(codeClassifyProcessTempDO);
            //modify by lihang - @20220406 è®¾ç½®æ¨¡æ¿ä¸»é”®ä½ç½®å‡ºé”™ï¼Œå¯¼è‡´å‡ç‰ˆçš„æ¨¡æ¿ä¸­çš„æµç¨‹æ˜¯ç©ºçš„。
        }
        return codeClsflowtempEntities;
    }
    /**
     * å¤åˆ¶æ¨¡æ¿é˜¶æ®µï¼Œæ¨¡æ¿å±žæ€§
     * @param templateOldOid
     * @param templateNewOid
     * @return map phase:(List<CodeTemplatePhaseDO>) phaseAttr:(List<CodePhaseAttrDO>)
     */
    public Map copyTemplatePhase_attr(String templateOldOid,String templateNewOid){
        //模板阶段
//        VciQueryWrapperForDO phaseWrapper = new VciQueryWrapperForDO(CodeTemplatePhaseDO.class);
//        phaseWrapper.addQueryMap("codeClassifyTemplateOid",templateOldOid);
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("codeclassifyTemplateOid",templateOldOid);
        List<CodeTempphaseEntity> codeTempphaseEntities = codeTempphaseMapper.selectByMap(condition);
//        List<CodeTemplatePhaseDO>  codeClassifyPhaseDOList = codeTemplatePhaseDaoI.selectByWrapper(phaseWrapper);//要保存的新的模板流程
        Map<String,String> phaseKeyMap = new HashMap<String,String>();//需要复制的模板阶段属性,key:value,模板阶段老oid:模板属性新oid
        List<String> phaseOidList = new ArrayList<String>();
        for (CodeTempphaseEntity codeTemplatePhaseDO:codeTempphaseEntities){
            String oldoid = codeTemplatePhaseDO.getOid();
            String newOid = VciBaseUtil.getPk();
            codeTemplatePhaseDO.setOid(newOid);
            codeTemplatePhaseDO.setCodeclassifytemplateoid(templateNewOid);
            phaseKeyMap.put(oldoid,newOid);
            phaseOidList.add(oldoid);
        }
        //模板阶段的属性
        List<CodePhaseattrEntity> codePhaseAttrDOList = new ArrayList<CodePhaseattrEntity>();
        if(!CollectionUtils.isEmpty(phaseOidList)){//size()==0下边方法会报错
//            Map<String,String> conditionMap =  new HashMap<>();
//            conditionMap.put("codephaseoid", QueryOptionConstant.IN + "(" + VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])) + ")");
//            codePhaseAttrDOList = codePhaseAttrDaoI.selectByCondition(conditionMap,new PageHelper(-1));
            codePhaseAttrDOList = codePhaseattrMapper.selectByPhaseaIds(VciBaseUtil.toInSql(phaseOidList.toArray(new String[0])));
        }
        for (CodePhaseattrEntity codePhaseAttrDO:codePhaseAttrDOList){
            String oldPhaseoid = codePhaseAttrDO.getCodephaseoid();
//            String newOid = VciBaseUtil.getPk();
            codePhaseAttrDO.setOid(null);
            codePhaseAttrDO.setCodephaseoid(phaseKeyMap.get(oldPhaseoid));
//            codePhaseattrMapper.insert(codePhaseAttrDO);
        }
        Map phaseMap = new HashMap();
        phaseMap.put("phase",codeTempphaseEntities);
        phaseMap.put("phaseAttr",codePhaseAttrDOList);
        return phaseMap;
    }
    /**
     * å¤åˆ¶æ¨¡æ¿æŒ‰é’®
     */
    public List<CodeTempbuttonEntity> copyTemplateButton(String templateOldOid,String templateNewOid){
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("classifyTemplateOid",templateOldOid);
//        VciQueryWrapperForDO buttonWrapper = new VciQueryWrapperForDO(CodeClassifyTemplateButtonDO.class);
//        buttonWrapper.addQueryMap("classifyTemplateOid",templateOldOid);
        List<CodeTempbuttonEntity> codeTempbuttonEntities = codeTempbuttonMapper.selectByMap(condition);
//        List<CodeClassifyTemplateButtonDO> codeClassifyTemplateButtonDOList = codeClassifyTemplateButtonDaoI.selectByWrapper(buttonWrapper);
        for (CodeTempbuttonEntity codeClassifyTemplateButtonDO:codeTempbuttonEntities){
//            String newOid = VciBaseUtil.getPk();
            codeClassifyTemplateButtonDO.setOid(null);
            codeClassifyTemplateButtonDO.setClassifytemplateoid(templateNewOid);
        }
        return codeTempbuttonEntities;
    }
    /**
     * å¤åˆ¶æ¨¡æ¿å±žæ€§
     */
    public List<CodeClstempattrEntity> copyTemplateAttr(String templateOldOid,String templateNewOid){
//        VciQueryWrapperForDO codeClassifyTemplateAttrQuery = new VciQueryWrapperForDO(CodeClassifyTemplateAttrDO.class);
//        codeClassifyTemplateAttrQuery.addQueryMap("classifyTemplateOid",templateOldOid);
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("classifyTemplateOid",templateOldOid);
//        List<CodeClstempattrEntity> codeClassifyTemplateAttrDOList = codeClassifyTemplateAttrDaoI.selectByWrapper(codeClassifyTemplateAttrQuery);
        List<CodeClstempattrEntity> codeClstempattrEntities = codeClstempattrMapper.selectByMap(condition);
        for (CodeClstempattrEntity codeClassifyTemplateAttrDO :codeClstempattrEntities){
//            String attrOid = VciBaseUtil.getPk();
            codeClassifyTemplateAttrDO.setOid(null);
            codeClassifyTemplateAttrDO.setClassifytemplateoid(templateNewOid);
//            codeClstempattrMapper.insert(codeClassifyTemplateAttrDO);
        }
        return codeClstempattrEntities;
    }
    /**
     * åˆ†ç±»æ¨¡æ¿åˆ—表
     *
     * @param plCodeClstemplate æŸ¥è¯¢æ¡ä»¶
     * @param query   åˆ†é¡µå¯¹è±¡
     * @return æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public DataGrid<CodeClstemplateVO> gridCodeClassifyTemplate(CodeClstemplateVO plCodeClstemplate, Query query) throws VciBaseException {
        DataGrid<CodeClstemplateVO> dataGrid=new DataGrid<CodeClstemplateVO>();
        //没有传分类id,不执行查询逻辑,直接返回
//        if(conditionMap.size()==0){
//            dataGrid.setData(new ArrayList<>());
//            dataGrid.setTotal(0);
//            return dataGrid;
//        }
//        if (pageHelper == null) {
//            pageHelper = new PageHelper(-1);
//        }
//        pageHelper.addDefaultDesc("revisionSeq");
        List<CodeClstemplateVO> doList = codeClstemplateMapper.selectPlCodeClstemplatePage(Condition.getPage(query), plCodeClstemplate);
        if (!CollectionUtils.isEmpty(doList)) {
//            QueryWrapper<CodeClstemplateVO> codeClstemplateVOQueryWrapper = new QueryWrapper<>();
//            codeClstemplateVOQueryWrapper.allEq(plCodeClstemplate);
            List<CodeClstemplateEntity> codeClstemplateEntity = new ArrayList<>();
            BeanUtils.copyProperties(doList,codeClstemplateEntity);
            dataGrid.setData(codeClassifyTemplateDO2VOs(codeClstemplateEntity));
            dataGrid.setTotal(VciBaseUtil.getInt(String.valueOf(codeClstemplateMapper.selectCount(Condition.getQueryWrapper(plCodeClstemplate)))));
        }
        return dataGrid;
    }
    /**
     * å¢žåŠ åˆ†ç±»æ¨¡æ¿å¯¹è±¡
     * @param codeClassifyTemplateDTO åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ•°æ®ä¼ è¾“对象
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    @Override
    public R<CodeClstemplateVO> addSave(CodeClstemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"需要添加的数据对象");
        //将DTO转换为DO
        CodeClstemplateEntity codeClassifyTemplateDO = new CodeClstemplateEntity();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDO);
        //查询分类以及上级分类的业务类型btmtypeid、btmtypename
        List<CodeClassify> codeClassifyDOList = codeClassifyService.selectAllLevelParents(codeClassifyTemplateDTO.getCodeClassifyOid());
        //所有分类都没有业务类型,返回提示
        if(codeClassifyDOList.size()==0){
            return R.fail("添加模板添加失败,分类和上级分类都没有关联业务类型!");
        }
        //设置btmtypeid和name
        CodeClassify codeClassifyDO = codeClassifyDOList.get(0);
        codeClassifyTemplateDO.setBtmTypeId(codeClassifyDO.getBtmTypeId());
        codeClassifyTemplateDO.setBtmTypeName(codeClassifyDO.getBtmTypeName());
        codeClassifyTemplateDO.setLcStatus(FRAMEWORK_RELEASE_EDITING);
        codeClassifyTemplateDO.setTs(new Date());
        codeClassifyTemplateDO.setOwner(AuthUtil.getUser().getUserName());
        codeClassifyTemplateDO.setLctid("codeClsTempLc");
        codeClassifyTemplateDO.setVersionValue("1");
        codeClassifyTemplateDO.setVersionSeq(1);
        codeClassifyTemplateDO.setRevisionValue("1");
        codeClassifyTemplateDO.setRevisionSeq(1);
        codeClassifyTemplateDO.setVersionRule("0");
        codeClassifyTemplateDO.setRevisionRule("numberversionrule");
        codeClassifyTemplateDO.setLastModifyTime(new Date());
        codeClassifyTemplateDO.setLastModifier(AuthUtil.getUser().getUserName());
        codeClassifyTemplateDO.setCreator(AuthUtil.getUser().getUserName());
        codeClassifyTemplateDO.setCreateTime(new Date());
        codeClassifyTemplateDO.setLastV("1");
        codeClassifyTemplateDO.setLastR("1");
        codeClassifyTemplateDO.setFirstV("1");
        codeClassifyTemplateDO.setFirstR("1");
        codeClassifyTemplateDO.setBtmname("codeclstemplate");
        baseMapper.insert(codeClassifyTemplateDO);
        //默认添加模板属性
//        List<CodeClassifyTemplateAttrDO> attrDOList = new ArrayList<>();
//        CodeClassifyTemplateAttrDO codeAttr = new CodeClassifyTemplateAttrDO();
//        codeAttr.setId("id");
//        codeAttr.setName("企业编码");
//        codeAttr.setAttributeDataType("VTString");
//        codeAttr.setAttrTableWidth(150);
//        codeAttr.setOrderNum(1);
//        codeAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
//        codeAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
//        codeAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
//        attrDOList.add(codeAttr);
//
//
//        CodeClassifyTemplateAttrDO groupAttr = new CodeClassifyTemplateAttrDO();
//        groupAttr.setId("name");
//        groupAttr.setName("集团码");
//        groupAttr.setAttributeDataType("VTString");
//        groupAttr.setAttrTableWidth(150);
//        groupAttr.setOrderNum(2);
//        groupAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
//        groupAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
//        groupAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
//        attrDOList.add(groupAttr);
//
//        CodeClassifyTemplateAttrDO descAttr = new CodeClassifyTemplateAttrDO();
//        descAttr.setId("description");
//        descAttr.setName("描述");
//        descAttr.setAttrTableWidth(150);
//        descAttr.setAttributeDataType("VTString");
//        descAttr.setOrderNum(3);
//        descAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
//        descAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
//        descAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
//        attrDOList.add(descAttr);
//
//        CodeClassifyTemplateAttrDO statusAttr = new CodeClassifyTemplateAttrDO();
//        statusAttr.setId("lcstatus");
//        statusAttr.setName("状态");
//        statusAttr.setAttrTableWidth(70);
//        statusAttr.setOrderNum(4);
//        statusAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
//        statusAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
//        statusAttr.setAttributeDataType("VTString");
//        statusAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
//        attrDOList.add(statusAttr);
//
//
//        CodeClassifyTemplateAttrDO secAttr = new CodeClassifyTemplateAttrDO();
//        secAttr.setId("secretgrade");
//        secAttr.setName("密级");
//        secAttr.setAttrTableWidth(70);
//        secAttr.setAttributeDataType(VciFieldTypeEnum.VTInteger.name());
//        secAttr.setEnumId("Enumsecretgrade");
//        secAttr.setEnumName("密级");
//        secAttr.setOrderNum(4);
//        secAttr.setFormDisplayFlag(BooleanEnum.TRUE.getValue());
//        secAttr.setTableDisplayFlag(BooleanEnum.TRUE.getValue());
//        secAttr.setClassifyTemplateOid(codeClassifyTemplateDO.getOid());
//        attrDOList.add(secAttr);
        return R.data(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
    }
    /**
     * ä¿®æ”¹åˆ†ç±»æ¨¡æ¿å¯¹è±¡
     * @param codeClassifyTemplateDTO åˆ†ç±»æ¨¡æ¿å¯¹è±¡æ•°æ®ä¼ è¾“对象
     * @return æ‰§è¡Œç»“æžœ
     * @throws VciBaseException å‚数为空,唯一项,必输项不通过时会抛出异常
     */
    @Override
    public R editSave(CodeClstemplateDTO codeClassifyTemplateDTO) throws VciBaseException{
        VciBaseUtil.alertNotNull(codeClassifyTemplateDTO,"数据对象",codeClassifyTemplateDTO.getOid(),"分类模板对象主键");
        //检查ts
        CodeClstemplateEntity codeClassifyTemplateDOCopyFromDTO = new CodeClstemplateEntity();
        BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyTemplateDTO,codeClassifyTemplateDOCopyFromDTO);
        CodeClstemplateEntity codeClassifyTemplateDO = null;
        if(codeClassifyTemplateDOCopyFromDTO.getOid() == null){
            baseMapper.insert(codeClassifyTemplateDOCopyFromDTO);
            return R.data(codeClassifyTemplateDOCopyFromDTO);
        }else{
//            Map<String,Object> condition = new HashMap<>(2);
//            condition.put("oid",codeClassifyTemplateDOCopyFromDTO.getOid());
//            condition.put("ts",codeClassifyTemplateDOCopyFromDTO.getTs());
            CodeClstemplateEntity detail = baseMapper
                .selectById(codeClassifyTemplateDOCopyFromDTO.getOid());
    //        boolean tsBoolean = boService.checkTs(codeClassifyTemplateAttrDOListemplateDOCopyFromDTO);
            if(detail.getTs().compareTo(codeClassifyTemplateDOCopyFromDTO.getTs()) != 0){//不是最新的不让改
                return R.fail("当前数据不是最新,请刷新后再修改!");
            }
            //将DTO转换为DO
            codeClassifyTemplateDO = selectByOid(codeClassifyTemplateDTO.getOid());
            String lcstatus = codeClassifyTemplateDO.getLcStatus();
            String versionvalue = codeClassifyTemplateDO.getVersionValue();
            //只有编辑中才能修改
            if(!CodeClassifyTemplateLC.EDITING.getValue().equals(codeClassifyTemplateDO.getLcStatus())){
                return R.fail("只有编辑中的,模板才能修改!");
            }
            revisionModelUtil.copyFromDTOIgnore(codeClassifyTemplateDTO,codeClassifyTemplateDO);
            //不修改版本号和状态
            codeClassifyTemplateDO.setLcStatus(lcstatus);
            codeClassifyTemplateDO.setVersionValue(versionvalue);
            codeClassifyTemplateDO.setTs(new Date());
            codeClassifyTemplateDO.setLastModifier(AuthUtil.getUser().getUserName());
            codeClassifyTemplateDO.setLastModifyTime(new Date());
            baseMapper.updateById(codeClassifyTemplateDO);
        }
        return R.data(codeClassifyTemplateDO2VO(codeClassifyTemplateDO));
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
@@ -18,14 +18,12 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.entity.CodeClstempattrEntity;
import com.vci.ubcs.code.entity.CodePhaseattrEntity;
import com.vci.ubcs.code.entity.CodeTempphaseEntity;
import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
import com.vci.ubcs.code.mapper.CodeTempphaseMapper;
import com.vci.ubcs.code.service.ICodeTempphaseService;
import com.vci.ubcs.code.vo.CodeTempphaseVO;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -47,8 +45,6 @@
    @Autowired(required = false)
    private CodePhaseattrMapper codePhaseattrMapper;
    @Autowired(required = false)
    private CodePhaseattrServiceImpl codePhaseattrServiceImpl;
    @Override
    public IPage<CodeTempphaseVO> selectCodeTempphasePage(IPage<CodeTempphaseVO> page, CodeTempphaseVO CodeTempphase) {
@@ -65,7 +61,7 @@
    public int codeTemplateDeleteTrigger(String templateOid) {
        int updateCount = 0;
        Map<String,Object> condition = new HashMap<>(1);
        condition.put("codeclassifytemplateoid",templateOid);
        condition.put("classifyTemplateOid",templateOid);
        List<CodeTempphaseEntity> codeTempphaseEntities = baseMapper.selectByMap(condition);
        if(!CollectionUtils.isEmpty(codeTempphaseEntities)) {
            updateCount += baseMapper.deleteBatchIds(codeTempphaseEntities.stream().map(CodeTempphaseEntity::getOid).collect(Collectors.toList()));
@@ -77,36 +73,6 @@
            }
        }
        return updateCount;
    }
    /**
     * æ¨¡æ¿ä¿®æ”¹è§¦å‘功能
     * @param attrDOList å±žæ€§çš„æ•°æ®å¯¹è±¡
     * @return å—影响的数据
     */
    @Override
    public List<CodeClstempattrEntity> codeTemplateAttrModifyTrigger(List<CodeClstempattrEntity> attrDOList){
        //属性修改的时候,需要同步修改对应属性的名称
//        BatchCBO batchCBO = new BatchCBO();
        List<CodePhaseattrEntity> phaseAttrDOS =codePhaseattrMapper.listLinkAttrDOByTemplateAttrDOS(VciBaseUtil.toInSql(attrDOList.stream()
            .map(CodeClstempattrEntity::getId).collect(Collectors.toList()).toArray(new String[0])),attrDOList.get(0).getClassifytemplateoid());
        if(!CollectionUtils.isEmpty(phaseAttrDOS)){
            //说明有属性,我们去替换一下
            Map<String, CodeClstempattrEntity> attrDOMap = attrDOList.stream().collect(Collectors.toMap(s -> s.getId(), t -> t));
            phaseAttrDOS.stream().forEach(phaseAttrDO->{
                if(attrDOMap.containsKey(phaseAttrDO.getId())){
                    CodeClstempattrEntity attrDO = attrDOMap.get(phaseAttrDO.getId());
                    phaseAttrDO.setId(attrDO.getId());
                    phaseAttrDO.setName(attrDO.getName());
                    phaseAttrDO.setAttributegroup(attrDO.getAttributegroup());
                }
            });
//            codePhaseattrMapper.
            codePhaseattrServiceImpl.saveBatch(phaseAttrDOS);
//            BatchCBO updateCBO =
//            codePhaseAttrMapper.batchUpdate(phaseAttrDOS);
//            batchCBO.copyFromOther(updateCBO);
        }
        return attrDOList;
    }
}
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodeButtonWrapper.java
@@ -18,9 +18,14 @@
import com.vci.ubcs.code.entity.CodeButtonEntity;
import com.vci.ubcs.code.vo.CodeButtonVO;
import com.vci.ubcs.omd.cache.DictCache;
import com.vci.ubcs.system.cache.DictBizCache;
import com.vci.ubcs.system.cache.DictCache;
import com.vci.ubcs.system.enums.DictEnum;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import java.util.List;
import java.util.Objects;
@@ -40,8 +45,8 @@
    @Override
    public CodeButtonVO entityVO(CodeButtonEntity codebutton) {
        CodeButtonVO codebuttonVO = Objects.requireNonNull(BeanUtil.copy(codebutton, CodeButtonVO.class));
        codebuttonVO.setUsedpositiontypeName(DictCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
        codebuttonVO.setLcstatusName(DictCache.getValue("codeLcstatus", codebutton.getLcstatus()));
        codebuttonVO.setUsedpositiontypeName(DictBizCache.getValue("codeButtonPosition", codebutton.getUsedpositiontype()));
        codebuttonVO.setLcstatusName(DictBizCache.getValue("codeLcstatus", codebutton.getLcstatus()));
        return codebuttonVO;
    }
Source/UBCS/ubcs-service/ubcs-code/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
com.vci.ubcs.starter.revision.service.RevisionModelUtil
Source/UBCS/ubcs-service/ubcs-ddl/pom.xml
@@ -25,6 +25,11 @@
        </dependency>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-omd-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.vci.ubcs</groupId>
            <artifactId>ubcs-util-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
@@ -3,17 +3,22 @@
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.ddl.bo.DdlTableBO;
import com.vci.ubcs.ddl.service.IDdlService;
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.BtmTypeVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Objects;
/**
 * Description: æ•°æ®åº“操作控制器
@@ -33,14 +38,14 @@
    /**
     * æ–°å¢žæˆ–修改数据库表
     * @param dto ä¸šåŠ¡ç±»åž‹
     * @param ddlDTO ä¸šåŠ¡ç±»åž‹+链接类型
     * @return æ‰§è¡Œç»“æžœ
     */
    @PostMapping("/submitBtmType")
    @PostMapping("/submit")
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "新增或修改", notes = "传入业务类型传输对象")
    public R submitBtmType(@Valid @RequestBody BtmTypeDTO dto) {
        return ddlService.submitBtmType(dto);
    @ApiOperation(value = "新增或修改", notes = "业务类型链接类型传输对象")
    public R submitBtmType(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO) {
        return ddlService.submit(ddlDTO);
    }
    /**
@@ -65,4 +70,17 @@
    public R<List<DdlTableBO>> getAllTableInfo(){
        return R.data(ddlService.getAllTableInfo());
    }
    /**
     * èŽ·å–æ•°æ®åº“å’Œä¸šåŠ¡ç±»åž‹ä¸­çš„ä¸åŒçš„åœ°æ–¹
     * @param ddlDTO åŒ…含业务类型和链接类型的包装
     * @return ä¸åŒçš„地方,每一个业务类型或者链接类型一条数据
     */
    @PostMapping("/checkDifferentAndReflex")
    @ApiOperation(value = "检查业务类型的数据与数据库中是否相同")
    @ApiOperationSupport(order = 5)
    public R<List<ModifyAttributeInfo>> checkDifferentAndReflex(@RequestBody BtmAndLinkTypeDdlDTO ddlDTO){
        Func.requireNotNull(ddlDTO,"业务类型与链接对象传输对象不能为空");
        return R.data(ddlService.checkDifferent(ddlDTO.getBtmTypeList(),ddlDTO.getLinkTypeList()));
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMSMapper.java
@@ -63,8 +63,6 @@
     * @param tableName è¡¨æ ¼çš„名称
     * @return æ•°æ®åº“表的字段信息
     */
    @ResultMap("ddlTableColumnInfo")
    @Select("")
    List<DdlTableInDataBaseBO> selectTableColumnInfo(@Param("tableName") String tableName);
    /**
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DdlMySqlMapper.java
@@ -91,8 +91,6 @@
     * @param tableName è¡¨æ ¼çš„名称
     * @return æ•°æ®åº“表的字段信息
     */
    @ResultMap("ddlTableColumnInfo")
    @Select("")
    List<DdlTableInDataBaseBO> selectTableColumnInfo(@Param("tableName")String tableName);
    /**
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/mapper/DllMySqlMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.vci.ubcs.ddl.mapper;
import org.springframework.stereotype.Repository;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/4/26
 */
@Repository
public interface DllMySqlMapper extends DllMapper{
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessStrategy.java
@@ -1,8 +1,15 @@
package com.vci.ubcs.ddl.processor.ddl;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.vci.ubcs.ddl.mapper.DdlMSMapper;
import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
@@ -16,20 +23,20 @@
    @Value("${spring.datasource.driver-class-name}")
    private static final String DATABASE_DRIVER = "";
    public static List<DdlMapperProcessor> processors = Lists.newArrayList();
    private final static List<DdlMapperProcessor> PROCESSORS = Lists.newArrayList();
    static {
        processors.add(new DdlMsMapperProcessor());
        processors.add(new DdlMySqlMapperProcessor());
        processors.add(new DdlOracleMapperProcessor());
        PROCESSORS.add(VciSpringUtil.getBean(DdlOracleMapperProcessor.class));
        PROCESSORS.add(VciSpringUtil.getBean(DdlMySqlMapperProcessor.class));
        PROCESSORS.add(VciSpringUtil.getBean(DdlMsMapperProcessor.class));
    }
    public static DdlMapperProcessor getProcessor(){
        for (DdlMapperProcessor processor : processors) {
        for (DdlMapperProcessor processor : PROCESSORS) {
            if (processor.support(DATABASE_DRIVER)){
                return processor;
            }
        }
        return DdlOracleMapperProcessor.SINGLE.INSTANCE;
        return VciSpringUtil.getBean(DdlOracleMapperProcessor.class);
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMapperProcessor.java
@@ -3,6 +3,7 @@
import com.vci.ubcs.ddl.bo.DdlTableBO;
import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
import com.vci.ubcs.ddl.mapper.DdlMapper;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import java.util.List;
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMsMapperProcessor.java
@@ -3,7 +3,9 @@
import com.vci.ubcs.ddl.mapper.DdlMSMapper;
import com.vci.ubcs.ddl.mapper.DdlMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
@@ -17,20 +19,20 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Component
public class DdlMsMapperProcessor extends DdlMapperProcessor{
    @Resource
    private DdlMSMapper msMapper;
    private static DdlMapper mapper = VciSpringUtil.getBean(DdlMSMapper.class);
    private static DdlMapper mapper;
    @PostConstruct
    public void init(){
        mapper = msMapper;
    }
    public DdlMsMapperProcessor() {
        super(mapper);
        System.out.println("-----------------");
        if (mapper != null){
            System.out.println("[success]::加载Sql Server数据库DDL操作服务成功");
        }else {
            System.out.println("[fail]::加载Sql Server数据库DDL操作服务失败");
        }
    }
    @Override
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlMySqlMapperProcessor.java
@@ -3,7 +3,9 @@
import com.vci.ubcs.ddl.mapper.DdlMapper;
import com.vci.ubcs.ddl.mapper.DdlMySqlMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
@@ -17,21 +19,19 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Repository
@Component
public class DdlMySqlMapperProcessor extends DdlMapperProcessor{
    @Resource
    private DdlMySqlMapper myMapper;
    private static DdlMapper mapper;
    @PostConstruct
    public void init(){
        mapper = myMapper;
    }
    private static DdlMapper mapper = VciSpringUtil.getBean(DdlMySqlMapper.class);
    public DdlMySqlMapperProcessor() {
        super(mapper);
        System.out.println("-----------------");
        if (mapper != null){
            System.out.println("[success]::加载MySql数据库DDL操作服务成功");
        }else {
            System.out.println("[fail]::加载MySql数据库DDL操作服务失败");
        }
    }
    @Override
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/ddl/DdlOracleMapperProcessor.java
@@ -2,6 +2,10 @@
import com.vci.ubcs.ddl.mapper.DdlMapper;
import com.vci.ubcs.ddl.mapper.DdlOracleMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@@ -12,30 +16,24 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Component
public class DdlOracleMapperProcessor extends DdlMapperProcessor{
    @Resource
    private DdlOracleMapper oracleMapper;
    private static DdlMapper mapper = VciSpringUtil.getBean(DdlOracleMapper.class);
    public DdlOracleMapperProcessor() {
        super(mapper);
        System.out.println("-----------------");
        if (mapper != null){
            System.out.println("[success]::加载Oracle数据库DDL操作服务成功");
        }else {
            System.out.println("[fail]::加载Oracle数据库DDL操作服务失败");
        }
    }
    @Override
    boolean support(String url) {
        return "oracle.jdbc.OracleDriver".equals(url);
    }
    public static class SINGLE {
        public static DdlOracleMapperProcessor INSTANCE = new DdlOracleMapperProcessor();
    }
    private static DdlMapper mapper;
    @PostConstruct
    public void init(){
        mapper = oracleMapper;
    }
    public DdlOracleMapperProcessor() {
        super(mapper);
    }
    @Override
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllBehavior.java
@@ -26,80 +26,4 @@
     */
    String DEFAULT = "default";
    /**
     * å­—符串
     */
    String VARCHAR = "varchar2";
    /**
     * æ•°å­—
     */
    String NUMBER = "number";
    /**
     * æ—¥æœŸï¼Œæ—¥æœŸæ—¶é—´ï¼Œæ—¶é—´æˆ³
     */
    String TIMESTAMP = "TIMESTAMP";
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList);
    /**
     * å¤„理整数类型的sql转换
     * @param attributeVO å±žæ€§
     * @return sql
     */
    String dealNumberCreateSql(BtmTypeAttributeVO attributeVO);
    /**
     * è°ƒç”¨å¤„理默认值和非空
     * @param attributeVO å±žæ€§
     * @return æ‰§è¡Œç»“æžœ
     */
    String dealDefaultAndNull(BtmTypeAttributeVO attributeVO);
    /**
     * å¤„理默认值
     * @param defaultValue é»˜è®¤å€¼
     * @return sql
     */
    String dealDefaultValue(String defaultValue);
    /**
     * å¤„理浮点数类型的sql转换
     * @param attributeVO å±žæ€§
     * @return sql
     */
    String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO);
    /**
     * å¤„理非空
     * @return sql
     */
    String dealNullableSql(BtmTypeAttributeVO attributeVO);
    /**
     * å¤„理布尔类型的sql转换
     * @param attributeVO å±žæ€§
     * @return sql
     */
    String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO);
    /**
     * å¤„理日期时间类型的sql转换
     * @param attributeVO å±žæ€§
     * @return sql
     */
    String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO);
    /**
     * å¤„理字符串类型的sql转换
     * @param attributeVO å±žæ€§
     * @return sql
     */
    String dealStringCreateSql(BtmTypeAttributeVO attributeVO);
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessor.java
@@ -1,8 +1,19 @@
package com.vci.ubcs.ddl.processor.dll;
import com.vci.ubcs.ddl.mapper.DllMapper;
import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
import com.vci.ubcs.ddl.mapper.*;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import org.apache.commons.lang3.StringUtils;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.StringPool;
import org.springblade.core.tool.utils.StringUtil;
import java.util.ArrayList;
import java.util.List;
/**
 * Description:DLL的处理接口
@@ -10,7 +21,57 @@
 * @author LiHang
 * @date 2023/4/24
 */
public abstract class DllMapperProcessor implements DllBehavior {
public abstract class DllMapperProcessor {
    private final static BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAPPING_MAP;
    static {
        FIELD_MAPPING_MAP = new DualHashBidiMap<>();
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMBER",26,8,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR2",5,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR2",100,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("VTClob",null,null,true,null));
        FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR2",255,null,true,null));
    }
    protected abstract DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum);
    protected final DdlFieldMappingAttrBO getMappingBOInMap(VciFieldTypeEnum fieldTypeEnum,BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map){
        if (!map.containsKey(fieldTypeEnum)){
            throw new VciBaseException("找不到字段的映射");
        }
        DdlFieldMappingAttrBO bo = map.get(fieldTypeEnum);
        return BeanUtil.copy(bo,DdlFieldMappingAttrBO.class);
    }
    protected static BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> getMappingMapCopy(){
        BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map = new DualHashBidiMap<>();
        map.putAll(FIELD_MAPPING_MAP);
        return map;
    }
    /**
     * æŒ‰æ•°æ®åº“字段类型列举所有的VCI字段类型
     * @param columnStr æ•°æ®åº“字段类型
     * @return VCI字段类型
     */
    public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr){
        return listFieldInMapByColumnStr(columnStr,FIELD_MAPPING_MAP);
    }
    protected final List<VciFieldTypeEnum> listFieldInMapByColumnStr(String columnStr,BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> map){
        VciBaseUtil.alertNotNull(columnStr,"数据库字段类型",map,"字段映射集合");
        List<VciFieldTypeEnum> fieldTypeList = new ArrayList<>();
        map.values().stream().filter(s -> StringUtil.equals(s.getDataType(),columnStr)).forEach(s -> {
            fieldTypeList.add(map.getKey(s));
        });
        return fieldTypeList;
    }
    private DllMapper mapper;
@@ -64,126 +125,24 @@
        return mapper.countAll(tableName);
    }
    /**
     * å¤„理整数类型的sql转换
     *
     * èŽ·å–å­—æ®µåˆ›å»ºsql
     * @param fieldType VT字段类型
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) {
        StringBuilder snb = new StringBuilder().append(NUMBER + SPACE);
        dealDefaultAndNull(attributeVO);
        return snb.toString();
    }
    /**
     * è°ƒç”¨å¤„理默认值和非空
     *
     * @param attributeVO å±žæ€§
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public String dealDefaultAndNull(BtmTypeAttributeVO attributeVO) {
        String value = "";
        if (StringUtils.isNotBlank(attributeVO.getDefaultValue())) {
            value += dealDefaultValue(attributeVO.getDefaultValue());
    public String getColumnTypeSql(VciFieldTypeEnum fieldType,BtmTypeAttributeVO attributeVO){
        DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType);
        mappingBO.setDataLength(attributeVO.getAttributeLength());
        if (fieldType.equals(VciFieldTypeEnum.VTDouble)){
            mappingBO.setDataPrecision(attributeVO.getPrecisionLength());
        }
        mappingBO.setNullable(attributeVO.isNullableFlag());
        mappingBO.setDefaultValue(attributeVO.getDefaultValue());
        return mappingBO.toString() + (StringUtil.equals(attributeVO.getId(),"OID") ? StringPool.SPACE +  "primary key" + StringPool.SPACE : "");
        if (!attributeVO.isNullableFlag()){
            value += dealNullableSql(attributeVO);
        }
        return value;
    }
    /**
     * å¤„理默认值
     *
     * @return sql
     */
    @Override
    public String dealDefaultValue(String defualValule) {
        return DEFAULT + SPACE + defualValule + SPACE;
    }
    /**
     * å¤„理浮点数类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) {
        Integer length = attributeVO.getPrecisionLength();
        if(length == null || length == 0){
            length = 20;
        }
        Integer scaleLength = attributeVO.getScaleLength();
        if(scaleLength == null){
            scaleLength = 2;
        }
        StringBuilder sb = new StringBuilder().append(NUMBER).append("(").append(String.valueOf(length.intValue()))
            .append(",").append(String.valueOf(scaleLength.intValue()))
            .append(")").append(SPACE);
        sb.append(dealDefaultAndNull(attributeVO));
        return sb.toString();
    }
    /**
     * å¤„理非空
     *
     * @return sql
     */
    @Override
    public String dealNullableSql(BtmTypeAttributeVO attributeVO) {
        if (!attributeVO.isNullableFlag()) {
            return SPACE + "not null" + SPACE;
        }
        return "";
    }
    /**
     * å¤„理布尔类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
        return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
    }
    /**
     * å¤„理日期时间类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
        return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO);
    }
    /**
     * å¤„理字符串类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealStringCreateSql(BtmTypeAttributeVO attributeVO) {
        StringBuilder sb = new StringBuilder();
        Integer length2 = attributeVO.getAttributeLength();
        if (length2 == null) {
            length2 = 250;
        }
        sb.append("VARCHAR").append("(").
            append(String.valueOf(length2.intValue())).append(")").append(SPACE);
        if (OID.equalsIgnoreCase(attributeVO.getId())) {
            sb.append(" primary key ");
            //强制设置OID为主键
        }
        sb.append(dealDefaultAndNull(attributeVO));
        return sb.toString();
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMapperProcessorStrategy.java
@@ -1,8 +1,14 @@
package com.vci.ubcs.ddl.processor.dll;
import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import com.vci.ubcs.ddl.mapper.DllMsMapper;
import com.vci.ubcs.ddl.mapper.DllOracleMapper;
import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
@@ -19,8 +25,10 @@
    public static List<DllMapperProcessor> processors = Lists.newArrayList();
    static {
        processors.add(new DllOracleMapperProcessor());
        processors.add(new DllSqlLiteMapperProcessor());
        processors.add(VciSpringUtil.getBean(DllMsMapperProcessor.class));
        processors.add(VciSpringUtil.getBean(DllSqlLiteMapperProcessor.class));
        processors.add(VciSpringUtil.getBean(DllMySqlMapperProcessor.class));
        processors.add(VciSpringUtil.getBean(DllOracleMapperProcessor.class));
    }
    public static DllMapperProcessor getProcessor(){
@@ -29,6 +37,6 @@
                return processor;
            }
        }
        return DllOracleMapperProcessor.SINGLE.INSTANCE;
        return VciSpringUtil.getBean(DllOracleMapperProcessor.class);
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMsMapperProcessor.java
@@ -1,18 +1,17 @@
package com.vci.ubcs.ddl.processor.dll;
import com.vci.ubcs.ddl.mapper.DdlMSMapper;
import com.vci.ubcs.ddl.mapper.DllMapper;
import com.vci.ubcs.ddl.mapper.DllMsMapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
<<<<<<< HEAD
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.lang3.StringUtils;
=======
>>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
import org.springblade.core.tool.utils.StringPool;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
@@ -21,24 +20,19 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Component
public class DllMsMapperProcessor extends DllMapperProcessor {
    @Resource
    private DllMsMapper realMapper;
    private static DllMapper mapper;
    @PostConstruct
    public void init(){
        mapper = realMapper;
    }
    private static DllMapper mapper = VciSpringUtil.getBean(DllMsMapper.class);
    public DllMsMapperProcessor() {
        super(mapper);
    }
    public static class SINGLE {
        public static DllMsMapperProcessor INSTANCE = new DllMsMapperProcessor();
        System.out.println("-----------------");
        if (mapper != null){
            System.out.println("[success]::加载Sql Server数据库DLL操作服务成功");
        }else {
            System.out.println("[fail]::加载Sql Server数据库DLL操作服务失败");
        }
    }
    @Override
@@ -46,131 +40,5 @@
        return "oracle.jdbc.OracleDiver".equals(url);
    }
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     *
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    @Override
    public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
        StringBuilder sb = new StringBuilder();
        attributeVOList.forEach(a -> {
            sb.append(a.getId()).append(SPACE);
            VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
            if (fieldTypeEnum == null) {
                throw new VciBaseException("属性有误");
            }
            switch (fieldTypeEnum) {
                case VTInteger:
                case VTLong:
                    sb.append(dealNumberCreateSql(a));
                    break;
                case VTDouble:
                    sb.append(dealDoubleCreateSql(a));
                    break;
                case VTBoolean:
                    sb.append(dealBooleanCreateSql(a));
                    break;
                case VTDate:
                case VTTime:
                case VTDateTime:
                    sb.append(dealDateTimeCreateSql(a));
                    break;
                case VTFilePath:
                    sb.append("VARCHAR").append("(100)").append(SPACE);
                    break;
                case VTClob:
                    sb.append("varchar(max)").append(SPACE);
                    if(!a.isNullableFlag()){
                        sb.append(SPACE).append("not null").append(SPACE);
                    }
                    break;
                default:
                    dealStringCreateSql(a);
                    break;
            }
            sb.append(",\n\t");
        });
        return sb.substring(0,sb.lastIndexOf(","));
    }
    /**
     * å¤„理整数类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) {
        return "INT" + SPACE + dealDefaultAndNull(attributeVO);
    }
    /**
     * å¤„理浮点数类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) {
        Integer length = attributeVO.getPrecisionLength();
        if(length == null || length == 0){
            length = 20;
        }
        Integer scaleLength = attributeVO.getScaleLength();
        if(scaleLength == null){
            scaleLength = 2;
        }
        StringBuilder sb = new StringBuilder().append("numeric").append("(").append(String.valueOf(length.intValue()))
            .append(",").append(String.valueOf(scaleLength.intValue()))
            .append(")").append(SPACE);
        sb.append(dealDefaultAndNull(attributeVO));
        return sb.toString();
    }
    /**
     * å¤„理布尔类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
        return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
    }
    /**
     * å¤„理日期时间类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
        return "DATETIME" + SPACE + dealNullableSql(attributeVO);
    }
    /**
     * å¤„理字符串类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealStringCreateSql(BtmTypeAttributeVO attributeVO) {
        Integer length2 = attributeVO.getAttributeLength();
        if(length2 == null){
            length2 = 250;
        }
        StringBuilder sb = new StringBuilder().append("VARCHAR").append("(").
            append(String.valueOf(length2.intValue())).append(")").append(SPACE);
        if (OID.equalsIgnoreCase(attributeVO.getId())) {
            sb.append(" primary key ");
            //强制设置OID为主键
        }
        sb.append(dealDefaultAndNull(attributeVO));
        return sb.toString();
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllMySqlMapperProcessor.java
@@ -1,18 +1,14 @@
package com.vci.ubcs.ddl.processor.dll;
import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
import com.vci.ubcs.ddl.mapper.DllMapper;
import com.vci.ubcs.ddl.mapper.DllOracleMapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
<<<<<<< HEAD
import com.vci.ubcs.ddl.mapper.DllMySqlMapper;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.lang3.StringUtils;
=======
>>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
import org.apache.commons.collections4.BidiMap;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
@@ -21,24 +17,36 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Component
public class DllMySqlMapperProcessor extends DllMapperProcessor {
    @Resource
    private DllOracleMapper realMapper;
    private static final DllMapper MAPPER = VciSpringUtil.getBean(DllMySqlMapper.class);
    private static DllMapper mapper;
    private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
    @PostConstruct
    public void init() {
        mapper = realMapper;
    static {
        // éœ€è¦é‡æ–°æ˜ å°„的字段类型在这里写
        FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMERIC",26,8,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("INT",22,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("BIGINT",22,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("varchar(max)",100,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
    }
    public DllMySqlMapperProcessor() {
        super(mapper);
    }
    public static class SINGLE {
        public static DllMySqlMapperProcessor INSTANCE = new DllMySqlMapperProcessor();
        super(MAPPER);
        System.out.println("-----------------");
        if (MAPPER != null){
            System.out.println("[success]::加载MySql数据库DLL操作服务成功");
        }else {
            System.out.println("[fail]::加载MySql数据库DLL操作服务失败");
        }
    }
    @Override
@@ -46,118 +54,20 @@
        return "oracle.jdbc.OracleDiver".equals(url);
    }
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     *
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    @Override
    public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
        StringBuilder sb = new StringBuilder();
        attributeVOList.forEach(a -> {
            sb.append(a.getId()).append(SPACE);
            VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
            if (fieldTypeEnum == null) {
                throw new VciBaseException("属性有误");
            }
            switch (fieldTypeEnum) {
                case VTInteger:
                case VTLong:
                    sb.append(dealNumberCreateSql(a));
                    break;
                case VTDouble:
                    sb.append(dealDoubleCreateSql(a));
                    break;
                case VTBoolean:
                    sb.append(dealBooleanCreateSql(a));
                    break;
                case VTDate:
                case VTTime:
                case VTDateTime:
                    sb.append(dealDateTimeCreateSql(a));
                case VTFilePath:
                    sb.append("VARCHAR").append("(100)").append(SPACE);
                    break;
                case VTClob:
                    sb.append("LONGTEXT").append(SPACE);
                    if (!a.isNullableFlag()) {
                        sb.append(SPACE).append("not null").append(SPACE);
                    }
                    break;
                default:
                    sb.append(dealStringCreateSql(a));
                    break;
            }
            sb.append(",\n\t");
        });
        return sb.substring(0, sb.lastIndexOf(","));
    protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
        return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
    }
    /**
     * å¤„理整数类型的sql转换
     * æŒ‰æ•°æ®åº“字段类型列举所有的VCI字段类型
     *
     * @param attributeVO å±žæ€§
     * @return sql
     * @param columnStr æ•°æ®åº“字段类型
     * @return VCI字段类型
     */
    @Override
    public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) {
        StringBuilder sb = new StringBuilder();
        if (VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attributeVO.getAttrDataType())) {
            sb.append("INT").append(SPACE);
        } else {
            sb.append("BIGINT").append(SPACE);
        }
        sb.append(dealDefaultAndNull(attributeVO));
        return sb.toString();
    }
    /**
     * å¤„理浮点数类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) {
        StringBuilder sb = new StringBuilder();
        Integer length = attributeVO.getPrecisionLength();
        if (length == null || length == 0) {
            length = 20;
        }
        Integer scaleLength = attributeVO.getScaleLength();
        if (scaleLength == null) {
            scaleLength = 2;
        }
        sb.append("DOUBLE").append("(").append(String.valueOf(length.intValue()))
            .append(",").append(String.valueOf(scaleLength.intValue()))
            .append(")").append(SPACE);
        sb.append(dealDefaultAndNull(attributeVO));
        return sb.toString();
    }
    /**
     * å¤„理布尔类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
        return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO);
    }
    /**
     * å¤„理日期时间类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
        return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO);
    public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
        return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllOracleMapperProcessor.java
@@ -1,23 +1,13 @@
package com.vci.ubcs.ddl.processor.dll;
<<<<<<< HEAD
=======
import com.vci.starter.web.enumpck.VciFieldTypeEnum;
>>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
import com.vci.ubcs.ddl.mapper.DllMapper;
import com.vci.ubcs.ddl.mapper.DllOracleMapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
<<<<<<< HEAD
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
=======
>>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
import org.apache.commons.collections4.BidiMap;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
 * Description:
@@ -25,122 +15,31 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Component
public class DllOracleMapperProcessor extends DllMapperProcessor {
    @Resource
    private DllOracleMapper realMapper;
    private static DllMapper mapper = VciSpringUtil.getBean(DllOracleMapper.class);
    private static DllMapper mapper;
    @PostConstruct
    public void init(){
        mapper = realMapper;
    }
    private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
    public DllOracleMapperProcessor() {
        super(mapper);
        System.out.println("-----------------");
        if (mapper != null){
            System.out.println("[success]::加载Oracle数据库DLL操作服务成功");
        }else {
            System.out.println("[fail]::加载Oracle数据库DLL操作服务失败");
        }
    }
    public static class SINGLE {
        public static DllOracleMapperProcessor INSTANCE = new DllOracleMapperProcessor();
    @Override
    protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
        return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
    }
    @Override
    public boolean support(String url) {
        return "oracle.jdbc.OracleDiver".equals(url);
    }
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     *
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    @Override
    public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
        StringBuilder sb = new StringBuilder();
        attributeVOList.forEach(a -> {
            sb.append(a.getId()).append(SPACE);
            VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
            if (fieldTypeEnum == null) {
                throw new VciBaseException("属性有误");
            }
            switch (fieldTypeEnum) {
                case VTInteger:
                case VTLong:
                    sb.append(dealNumberCreateSql(a));
                    break;
                case VTDouble:
                    sb.append(dealDoubleCreateSql(a));
                    break;
                case VTBoolean:
                    sb.append(dealBooleanCreateSql(a));
                    break;
                case VTDate:
                case VTDateTime:
                case VTTime:
                    sb.append(dealDateTimeCreateSql(a));
                    break;
                case VTFilePath:
                    sb.append(VARCHAR).append("(100)").append(SPACE);
                    break;
                case VTClob:
                    sb.append("CLOB").append(SPACE);
                    if(!a.isNullableFlag()){
                        sb.append(SPACE).append("not null").append(SPACE);
                    }
                    break;
                default:
                    sb.append(dealStringCreateSql(a));
                    break;
            }
            sb.append(",\n\t");
        });
        return sb.substring(0,sb.lastIndexOf(","));
    }
    /**
     * å¤„理字符串类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealStringCreateSql(BtmTypeAttributeVO attributeVO) {
        Integer length2 = attributeVO.getAttributeLength();
        StringBuilder sb = new StringBuilder();
        if(length2 == null){
            length2 = 250;
        }
        sb.append(VARCHAR).append("(").
            append(String.valueOf(length2.intValue())).append(")").append(SPACE);
        if (OID.equalsIgnoreCase(attributeVO.getId())) {
            sb.append(" primary key ");
            //强制设置OID为主键
        }
        sb.append(dealDefaultAndNull(attributeVO));
        return sb.toString();
    }
    /**
     * å¤„理日期时间类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) {
        return TIMESTAMP + SPACE + dealNullableSql(attributeVO);
    }
    /**
     * å¤„理布尔类型的sql转换
     *
     * @param attributeVO å±žæ€§
     * @return sql
     */
    @Override
    public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) {
        return VARCHAR + "(5)" + SPACE + dealDefaultAndNull(attributeVO);
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/processor/dll/DllSqlLiteMapperProcessor.java
@@ -1,11 +1,13 @@
package com.vci.ubcs.ddl.processor.dll;
import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO;
import com.vci.ubcs.ddl.mapper.DllMapper;
import com.vci.ubcs.ddl.mapper.DllSqlLiteMapper;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.starter.util.VciSpringUtil;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import org.apache.commons.collections4.BidiMap;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
/**
@@ -14,21 +16,33 @@
 * @author LiHang
 * @date 2023/4/24
 */
@Component
public class DllSqlLiteMapperProcessor extends DllMapperProcessor{
    private static DllMapper mapper = VciSpringUtil.getBean(DllSqlLiteMapper.class);
    private static final BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAP = getMappingMapCopy();
    @Resource
    private DllSqlLiteMapper realMapper;
    private static DllMapper mapper;
    @PostConstruct
    public void init(){
        mapper = realMapper;
    static {
         // éœ€è¦é‡æ–°æ˜ å°„的字段类型在这里写
        FIELD_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMERIC",26,8,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("INT",22,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("INT",22,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR",5,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("DATETIME",null,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("varchar(max)",100,null,true,null));
        FIELD_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR",100,null,true,null));
    }
    public DllSqlLiteMapperProcessor() {
        super(mapper);
        System.out.println("-----------------");
        if (mapper != null){
            System.out.println("[success]::加载SqlLite数据库DLL操作服务成功");
        }else {
            System.out.println("[fail]::加载SqlList数据库DLL操作服务失败");
        }
    }
    @Override
@@ -36,14 +50,19 @@
        return "org.sqlite.JDBC".equals(url);
    }
    @Override
    protected DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum) {
        return getMappingBOInMap(fieldTypeEnum,FIELD_MAP);
    }
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     * æŒ‰æ•°æ®åº“字段类型列举所有的VCI字段类型
     *
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     * @param columnStr æ•°æ®åº“字段类型
     * @return VCI字段类型
     */
    @Override
    public String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList) {
        return null;
    public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr) {
        return listFieldInMapByColumnStr(columnStr,FIELD_MAP);
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
@@ -2,8 +2,9 @@
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.ModifyAttributeInfoDO;
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;
@@ -66,6 +67,13 @@
     * @throws VciBaseException å‚数为空或者创建表出现了错误的时候会抛出异常
     */
    void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException;
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList);
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹åˆ›å»ºæ•°æ®åº“è¡¨
@@ -157,14 +165,16 @@
     * @param linkTypeVOList é“¾æŽ¥ç±»åž‹å¯¹è±¡ï¼Œæœ‰å±žæ€§æ—¶éœ€è¦åŒ…含属性
     * @return ä¸åŒçš„地方,每一个业务类型或者链接类型一条数据
     */
    List<ModifyAttributeInfoDO> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
    List<ModifyAttributeInfo> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
    /**
     * æ¸…理业务类型中和数据库里不一样的
     * @param differentAttributeList ä¸åŒçš„属性的列表
     * @param btmTypeVOList ä¸šåŠ¡ç±»åž‹æ•°æ®
     * @param linkTypeVOList é“¾æŽ¥ç±»åž‹æ•°æ®
     * @throws VciBaseException å‚数为空或者执行出错的时候会抛出异常
     */
    void reflexDifferent(List<ModifyAttributeInfoDO> differentAttributeList) throws VciBaseException;
    void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList,List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
    /**
     * èŽ·å–æ•°æ®åº“ä¸­æ‰€æœ‰çš„è¡¨æ ¼
@@ -220,10 +230,10 @@
    /**
     * æ•°æ®åº“新增或修改表
     * @param dto ä¸šåŠ¡ç±»åž‹ä¼ è¾“å¯¹è±¡
     * @param ddlDTO ä¸šåŠ¡ç±»åž‹ä¼ è¾“å¯¹è±¡
     * @return æ‰§è¡Œç»“æžœ
     */
    R submitBtmType(BtmTypeDTO dto);
    R submit(BtmAndLinkTypeDdlDTO ddlDTO);
    /**
     * æŒ‰è¡¨åèŽ·å–è¡¨ä¿¡æ¯
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -1,14 +1,12 @@
package com.vci.ubcs.ddl.service.impl;
<<<<<<< HEAD
import com.alibaba.nacos.client.naming.NacosNamingService;
=======
import com.vci.starter.web.util.VciBaseUtil;
>>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
import com.alibaba.nacos.shaded.com.google.protobuf.ServiceException;
import com.vci.starter.word.bo.WordMergeStartTableDataBO;
import com.vci.ubcs.ddl.bo.DdlTableBO;
import com.vci.ubcs.ddl.bo.DdlTableInDataBaseBO;
import com.vci.ubcs.ddl.enums.BusinessTypeEnum;
import com.vci.ubcs.ddl.enums.ModifyTableTaskEnum;
import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessStrategy;
import com.vci.ubcs.ddl.processor.ddl.DdlMapperProcessor;
import com.vci.ubcs.ddl.processor.dll.DllMapperProcessor;
@@ -17,15 +15,17 @@
import com.vci.ubcs.ddl.properties.DdlPropertise;
import com.vci.ubcs.ddl.service.IDdlService;
import com.vci.ubcs.omd.cache.BtmTypeCache;
import com.vci.ubcs.omd.dto.BtmTypeDTO;
import com.vci.ubcs.omd.entity.ModifyAttributeInfoDO;
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.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.vo.*;
import com.vci.ubcs.starter.exception.VciBaseException;
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.apache.commons.lang3.StringUtils;
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;
@@ -34,7 +34,9 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotNull;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
@@ -63,15 +65,61 @@
     */
    private final DdlMapperProcessor ddlMapper = DdlMapperProcessStrategy.getProcessor();
    /**
     * dll数据操作服务
     */
    private final DllMapperProcessor dllMapper = DllMapperProcessorStrategy.getProcessor();
    /**
     * è¡¨åå‰ç¼€
     */
    private final String TABLE_PREFIX = "PL";
    private static final String YES = "Y";
    private static final String NO = "N";
    private final Map<String, BtmTypeVO> idBtmMap = new ConcurrentHashMap<>();
    private final Map<String, LinkTypeVO> idLinkMap = new ConcurrentHashMap<>();
    private void putBtm(@NotNull BtmTypeVO... voList) throws ServiceException {
        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 {
            throw new ServiceException("业务类型:[" + collect + "]正在被其他用户操作");
        }
    }
    private void putLink(@NotNull LinkTypeVO... voList) throws ServiceException {
        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 {
            throw new ServiceException("链接类型:[" + collect + "]正在被其他用户操作");
        }
    }
    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("解锁对象不存在");
        }
    }
    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("解锁对象不存在");
        }
    }
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹çš„æ•°æ®åº“è¡¨ä¸­æ˜¯å¦æœ‰æ•°æ®
@@ -165,7 +213,7 @@
     */
    @Override
    public void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException {
        VciBaseUtil.alertCollectionNotNull("业务类型/链接类型的主键集合", oidCollection);
        VciBaseUtil.alertNotNull("业务类型/链接类型的主键集合", oidCollection);
        List<BtmTypeVO> btmTypeVOList = BtmTypeCache.listBtmTypeByOidCollection(oidCollection);
//        List<OsLinkTypeVO> linkTypeVOList = linkTypeService.listLinkTypeByOidCollection(oidCollection);
        if (!CollectionUtils.isEmpty(btmTypeVOList)) {
@@ -194,16 +242,33 @@
        } 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());
                });
            }
        }
    }
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     *
     * @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));
        });
        return sb.substring(0, sb.lastIndexOf(","));
    }
    /**
@@ -238,7 +303,7 @@
     */
    @Override
    public void changeColumnForBtm(List<BtmTypeAttributeVO> modifyLengthAttrVOList) throws VciBaseException {
        VciBaseUtil.alertCollectionNotNull("要修改长度的属性集", modifyLengthAttrVOList);
        VciBaseUtil.alertNotNull("要修改长度的属性集", modifyLengthAttrVOList);
        Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeVOMap = modifyLengthAttrVOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
        btmTypeHasAttributeVOMap.forEach((k, v) -> {
            BtmTypeVO btmTypeVO = BtmTypeCache.getDetail(k);
@@ -265,7 +330,7 @@
     * @param attributeVOList è¦æ·»åŠ çš„å±žæ€§å­—æ®µ
     */
    private void changeColumnsForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) {
        String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList);
        String attributeSql = getCreateSqlByAttributeForBtm(attributeVOList);
        //先判断表格是否存在
        boolean tableExist = false;
        try {
@@ -289,7 +354,7 @@
     */
    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());
            });
        }
@@ -314,9 +379,9 @@
     */
    @Override
    public void addColumn2TableForBtm(List<BtmTypeAttributeVO> addAttrDOList) throws VciBaseException {
        VciBaseUtil.alertCollectionNotNull("要添加到数据库表中的属性集", addAttrDOList);
        Map<String, List<BtmTypeAttributeVO>> btmTypeHasAttributeVOMap = addAttrDOList.stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
        btmTypeHasAttributeVOMap.forEach((k, v) -> {
        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 VciBaseException("要修改属性列长度的业务类型不存在");
@@ -334,12 +399,8 @@
     * @param attributeVOList å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException æ‰§è¡Œæˆ–者获取sql语句的时候出现错误会抛出异常
     */
<<<<<<< HEAD
    private void addColumnForTable(String tableName, List<OmdBtmTypeAttributeVO> attributeVOList) throws VciBaseException{
=======
    private void addColumnForTable(String tableName, List<BtmTypeAttributeVO> attributeVOList) {
>>>>>>> dd3a6c681f938fd53d5f6cc3a4fcee40e71b259c
        String attributeSql = dllMapper.getCreateSqlByAttributeForBtm(attributeVOList);
        String attributeSql = getCreateSqlByAttributeForBtm(attributeVOList);
        //先判断表格是否存在
        if (!checkTableExistByTableName(tableName)) {
            BtmTypeAttributeVO attributeVO = attributeVOList.get(0);
@@ -358,7 +419,11 @@
     */
    @Override
    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) -> {
        });
    }
    /**
@@ -458,8 +523,281 @@
     * @return ä¸åŒçš„地方,每一个业务类型或者链接类型一条数据
     */
    @Override
    public List<ModifyAttributeInfoDO> checkDifferent(List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> 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));
                }
            }
        });
        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));
                    }
                }
        });
        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;
        }
    }
    /**
@@ -469,8 +807,138 @@
     * @throws VciBaseException å‚数为空或者执行出错的时候会抛出异常
     */
    @Override
    public void reflexDifferent(List<ModifyAttributeInfoDO> differentAttributeList) throws VciBaseException {
    public void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList, List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
        VciBaseUtil.alertNotNull(differentAttributeList, "要清理的数据库的信息为空");
        Map<String, BtmTypeVO> idBtmTypeMap = btmTypeVOList.stream().collect(Collectors.toMap(BtmTypeVO::getId, t -> t, (o1, o2) -> o1));
        Map<String, LinkTypeVO> idLinkTypeMap = linkTypeVOList.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;
        }
    }
    /**
@@ -492,7 +960,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));
@@ -561,49 +1029,30 @@
    /**
     * ä¸šåŠ¡ç±»åž‹æ•°æ®åº“æ–°å¢žæˆ–ä¿®æ”¹è¡¨
     *
     * @param dto ä¸šåŠ¡ç±»åž‹ä¼ è¾“å¯¹è±¡
     * @param ddlDTO ä¸šåŠ¡ç±»åž‹é“¾æŽ¥ç±»åž‹ä¼ è¾“å¯¹è±¡
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public R submitBtmType(BtmTypeDTO dto) {
        VciBaseUtil.alertNotNull(dto, "业务类型", dto.getAttributesDTOList(), "业务类型属性");
        BtmTypeVO btmTypeVO = Objects.requireNonNull(BeanUtil.copy(dto, BtmTypeVO.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) {
        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(BtmTypeVO btmTypeVO) {
        if (checkTableExistByTableName(btmTypeVO.getTableName())) {
            // è¡¨å·²å­˜åœ¨ï¼Œæ ¡éªŒå±žæ€§
            List<BtmTypeVO> vos = new ArrayList<>();
            vos.add(btmTypeVO);
            List<ModifyAttributeInfoDO> 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);
            R<List<ModifyAttributeInfo>> result = R.success("数据库操作成功");
            result.setData(changedList);
            return result;
        } catch (ServiceException e) {
            throw new RuntimeException(e.getMessage());
        }
    }
@@ -615,7 +1064,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);
@@ -635,10 +1084,11 @@
    /**
     * è¡¨åèŽ·å–è¡¨ä¿¡æ¯
     *
     * @param tableName è¡¨å
     * @return è¡¨ä¿¡æ¯
     */
    private DdlTableBO getTableInfoByTableName(String tableName){
    private DdlTableBO getTableInfoByTableName(String tableName) {
        VciBaseUtil.alertNotNull(tableName, "表格名称");
        return ddlMapper.selectTableComment(tableName);
    }
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/BtmTypeController.java
@@ -1,11 +1,13 @@
package com.vci.ubcs.omd.controller;
import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.omd.constant.OmdCacheConstant;
import com.vci.ubcs.omd.dto.BtmTypeDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.IBtmTypeService;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
@@ -107,12 +109,12 @@
     * @param dto å…ƒæ•°æ®é¡µé¢ä¼ è¾“对象
     * @return æ‰§è¡Œç»“æžœ
     */
    @PostMapping("/submit")
    @PostMapping("/submit/{auto}")
    @ApiOperationSupport(order = 3)
    @ApiOperation(value = "新增或修改", notes = "传入元数据对象")
    public R submit(@Valid @RequestBody BtmTypeDTO dto) {
    @ApiOperation(value = "新增或修改", notes = "传入业务类型对象")
    public R submit(@Valid @RequestBody BtmTypeDTO dto,@PathVariable(value = "auto") boolean auto) {
        CacheUtil.clear(OmdCacheConstant.BTM_CACHE);
        return R.status(btmTypeService.submit(dto));
        return btmTypeService.submit(dto,auto);
    }
    /**
@@ -134,4 +136,18 @@
        }
        return R.status(btmTypeService.removeBatchByIds(oidList));
    }
    /**
     * èŽ·å–é¢†åŸŸå€¼
     */
    @GetMapping("/domain")
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "获取领域值")
    public R<List<String>> getDomain(){
        try {
            return R.data(DomainRepeater.getDomain());
        } catch (NacosException e) {
            return R.fail(e.getErrMsg());
        }
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmTypeClient.java
@@ -54,7 +54,7 @@
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<IPage<BtmTypeVO>> getRef(Map<String, Object> condition, Query query, String domain) {
    public R<IPage<BtmTypeVO>> getRefPage(Map<String, Object> condition, Query query, String domain) {
        Func.requireNotNull(domain,"领域值");
        IPage<BtmType> page = btmTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, BtmType.class).lambda().eq(BtmType::getDomain, domain).orderByAsc(BtmType::getId));
        IPage<BtmTypeVO> pageVO = new Page<>();
@@ -66,6 +66,20 @@
    }
    /**
     * å‚照列表查询
     *
     * @param condition æŸ¥è¯¢æ¡ä»¶
     * @param domain    é¢†åŸŸå€¼
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public R<List<BtmTypeVO>> getRef(Map<String, Object> condition, String domain) {
        Func.requireNotNull(domain,"领域值");
        List<BtmType> list = btmTypeService.list(Condition.getQueryWrapper(condition, BtmType.class).lambda().eq(BtmType::getDomain, domain).orderByAsc(BtmType::getId));
        return R.data(BtmTypeWrapper.build().listEntityVO(list));
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°æ‰¹é‡æŸ¥è¯¢å¯¹è±¡
     *
     * @param ids å¯¹è±¡è‹±æ–‡åç§° ä½†æ˜¯ä¸èƒ½è¶…过1000
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/BtmTypeAttributeMapper.java
@@ -1,13 +1,37 @@
package com.vci.ubcs.omd.mapper;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import org.apache.ibatis.annotations.Param;
import org.springblade.core.mp.mapper.BladeMapper;
import java.util.Collection;
import java.util.List;
/**
 * Description:
 * Description: ä¸šåŠ¡ç±»åž‹å…³è”å±žæ€§çš„mapper
 *
 * @author LiHang
 * @date 2023/4/23
 */
public interface BtmTypeAttributeMapper extends BladeMapper<BtmTypeAttribute> {
    int batchDelete(List<String> records);
    int batchUpdate(List<BtmTypeAttribute> btmTypeAttributeDOList);
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ä¸­çš„æŒ‡å®šå±žæ€§
     * @param id ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @param attributeIdCollection å±žæ€§çš„id,
     * @return å±žæ€§çš„æ•°æ®å¯¹è±¡
     */
    List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(@Param("btmTypeId")String id, @Param("ids") Collection<String> attributeIdCollection);
    /**
     * é€šè¿‡ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°èŽ·å–å…³è”çš„å±žæ€§
     * @param ids ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°é›†åˆ
     * @return åŒ…含的属性
     */
    List<BtmTypeAttribute> selectByBtmTypeIds(@Param("ids") Collection<String> ids);
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/ModifyAttributeInfoMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.vci.ubcs.omd.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/5/4
 */
public interface ModifyAttributeInfoMapper extends BaseMapper<ModifyAttributeInfo> {
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
@@ -6,7 +6,10 @@
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.ServiceInfo;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@@ -16,13 +19,13 @@
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Description: é¢†åŸŸè½¬å‘器
@@ -30,9 +33,8 @@
 * @author LiHang
 * @date 2023/4/25
 */
@Component
public class DomainRepeater {
    private DomainRepeater() {
    }
    /**
     * æŽ§åˆ¶å™¨è·¯å¾„
@@ -42,63 +44,183 @@
    /**
     * æ–°å¢žæˆ–修改的转发路径名称
     */
    public static final String API_SUBMIT_BTM_TYPE = API_PREFIX + StringPool.SLASH +"submitBtmType";
    public static final String API_SUBMIT = API_PREFIX + StringPool.SLASH + "submit";
    /**
     * è¡¨åèŽ·å–è¡¨ä¿¡æ¯
     */
    public static final String API_GET_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getTableColumnByTableName";
    public static final String API_GET_TABLE_INFO = API_PREFIX + StringPool.SLASH + "getTableColumnByTableName";
    /**
     * èŽ·å–å…¨éƒ¨è¡¨ä¿¡æ¯
     */
    public static final String API_GET_ALL_TABLE_INFO = API_PREFIX + StringPool.SLASH +"getAllTableInfo";
    public static final String API_GET_ALL_TABLE_INFO = API_PREFIX + StringPool.SLASH + "getAllTableInfo";
    /**
     * èŽ·å–æ•°æ®åº“å’Œä¸šåŠ¡ç±»åž‹ä¸­çš„ä¸åŒçš„åœ°æ–¹
     */
    public static final String API_CHECK_DIFFERENT_REFLEX = API_PREFIX + StringPool.SLASH + "checkDifferentAndReflex";
    /**
     * ç”¨äºŽæž„建静态服务类
     */
    public static DomainRepeater domainRepeater;
    /**
     * Nacos服务列表
     */
    private static NamingService namingService = SINGLE.build();
    private static NamingService namingService;
    private static class SINGLE {
        @Autowired
        private NacosServiceManager manager;
        private static NacosServiceManager nacosServiceManager;
    @Autowired
    private NacosServiceManager manager;
        @Autowired
        private NacosDiscoveryProperties properties;
        private static NacosDiscoveryProperties nacosDiscoveryProperties;
    @Autowired
    private NacosDiscoveryProperties properties;
        @PostConstruct
        private void init(){
            nacosServiceManager = manager;
            nacosDiscoveryProperties = properties;
        }
        private static NamingService build(){
            return nacosServiceManager.getNamingService(nacosDiscoveryProperties.getNacosProperties());
        }
    @PostConstruct
    private void init() {
        domainRepeater = this;
        namingService = manager.getNamingService(properties.getNacosProperties());
    }
    public static R submitBtmType (String serviceName, BtmTypeVO btmTypeVO) throws NacosException {
        Instance service = namingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
    /**
     * ä¸€è‡´æ€§æ£€æŸ¥
     * @param ddlDTO ä¸šåŠ¡ç±»åž‹ã€é“¾æŽ¥ç±»åž‹ä¼ è¾“å¯¹è±¡
     * @param serviceName æœåŠ¡å
     * @return æ‰§è¡Œç»“果,有修改的就会返回。
     * @throws NacosException nacos查询服务出错时抛出异常
     */
    public static R checkDifferent(BtmAndLinkTypeDdlDTO ddlDTO,String serviceName) throws NacosException {
        try {
            String url = "http://" + service.getIp() +StringPool.COLON+ service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + API_SUBMIT_BTM_TYPE;
            ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(btmTypeVO), null);
            if (responseEntity.getStatusCode().equals(HttpStatus.OK)){
                return responseEntity.getBody();
            String url = getUrl(serviceName, API_CHECK_DIFFERENT_REFLEX);
            ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
            if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
                R body = Objects.requireNonNull(responseEntity.getBody());
                return body;
            }
            return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
        }catch (HttpClientErrorException e) {
            if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
                R fail = R.fail("调用服务失败");
                fail.setCode(HttpStatus.NOT_FOUND.value());
                return fail;
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return R.fail("未知错误");
    }
    private static ResponseEntity<R> executePost(String url, String body,Map<String,String> extraHeaders) throws IOException {
    /**
     * æ ¹æ®api接口拼接url地址
     * @param serviceName æœåŠ¡å
     * @param api æŽ¥å£åœ°å€
     * @return url地址
     * @throws NacosException nacos查询服务出错时抛出异常
     */
    public static String getUrl(String serviceName,String api) throws NacosException {
        Instance service = namingService.selectOneHealthyInstance(AppConstant.APPLICATION_GATEWAY_NAME);
        return "http://" + service.getIp() + StringPool.COLON + service.getPort() + StringPool.SLASH + serviceName + StringPool.SLASH + api;
    }
    /**
     * æ–°å¢žæˆ–修改业务类型
     * @param vo ä¸šåŠ¡ç±»åž‹ä¼ è¾“å¯¹è±¡
     * @param serviceName æœåŠ¡å
     * @return æ‰§è¡Œç»“果,有修改的就会返回。
     */
    public static R submitBtmType(String serviceName, BtmTypeVO vo) {
        try {
            String url = getUrl(serviceName, API_SUBMIT);
            BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
            ddlDTO.setBtmTypeList(new ArrayList<>(Collections.singletonList(vo)));
            ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
            if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
                return responseEntity.getBody();
            }
            return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
        } catch (HttpClientErrorException e) {
            if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
                R fail = R.fail("调用服务失败");
                fail.setCode(HttpStatus.NOT_FOUND.value());
                return fail;
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return R.fail("未知错误");
    }
    /**
     * æ–°å¢žæˆ–修改链接类型
     * @param vo ä¸šåŠ¡ç±»åž‹ä¼ è¾“å¯¹è±¡
     * @param serviceName æœåŠ¡å
     * @return æ‰§è¡Œç»“果,有修改的就会返回。
     */
    public static R submitLinkType(String serviceName, LinkTypeVO vo) {
        try {
            String url = getUrl(serviceName, API_SUBMIT);
            BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
            ddlDTO.setLinkTypeList(new ArrayList<>(Collections.singletonList(vo)));
            ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(ddlDTO), null);
            if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
                return responseEntity.getBody();
            }
            return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
        } catch (HttpClientErrorException e) {
            if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
                R fail = R.fail("调用服务失败");
                fail.setCode(HttpStatus.NOT_FOUND.value());
                return fail;
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return R.fail("未知错误");
    }
    /**
     * æ‰§è¡ŒhttpPost接口
     *
     * @param url          åœ°å€
     * @param body         è¯·æ±‚体
     * @param extraHeaders è¯·æ±‚头参数
     * @return æ‰§è¡Œç»“æžœ
     */
    private static ResponseEntity<R> executePost(String url, String body, Map<String, String> extraHeaders) {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Content-Type","application/json;charset=UTF-8");
        httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
        httpHeaders.add("Blade-Auth", AuthUtil.getHeader());
        Optional.ofNullable(extraHeaders).orElseGet(HashMap::new).forEach(httpHeaders::add);
        HttpEntity<String> request = new HttpEntity<>(body,httpHeaders);
        HttpEntity<String> request = new HttpEntity<>(body, httpHeaders);
        return restTemplate.postForEntity(url, request, R.class);
    }
    /**
     * èŽ·å–æ‰€æœ‰å·²æ³¨å†Œçš„æœåŠ¡
     * @return ä¸åŒ…含默认服务的其他服务
     * @throws NacosException
     */
    public static List<String> getDomain() throws NacosException {
        List<ServiceInfo> services = namingService.getSubscribeServices();
        Set<String> serviceNames = new HashSet<>();
        serviceNames.add(AppConstant.APPLICATION_GATEWAY_NAME);
        serviceNames.add(AppConstant.APPLICATION_ADMIN_NAME);
        serviceNames.add(AppConstant.APPLICATION_AUTH_NAME);
        serviceNames.add(AppConstant.APPLICATION_DESK_NAME);
        serviceNames.add(AppConstant.APPLICATION_DEVELOP_NAME);
        serviceNames.add(AppConstant.APPLICATION_FLOW_NAME);
        serviceNames.add(AppConstant.APPLICATION_FLOWDESIGN_NAME);
        serviceNames.add(AppConstant.APPLICATION_LOG_NAME);
        serviceNames.add(AppConstant.APPLICATION_REPORT_NAME);
        serviceNames.add(AppConstant.APPLICATION_SWAGGER_NAME);
        serviceNames.add(AppConstant.APPLICATION_SYSTEM_NAME);
        serviceNames.add(AppConstant.APPLICATION_TURBINE_NAME);
        serviceNames.add(AppConstant.APPLICATION_USER_NAME);
        serviceNames.add(AppConstant.APPLICATION_WEBSOCKET_NAME);
        serviceNames.add(AppConstant.APPLICATION_ZIPKIN_NAME);
        serviceNames.add(AppConstant.APPLICATION_NAME_OMD);
        return services.stream().map(ServiceInfo::getName).filter(s -> !serviceNames.contains(s)).collect(Collectors.toList());
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeAttributeService.java
@@ -3,10 +3,10 @@
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseService;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * Description:业务类型关联属性的服务
@@ -22,9 +22,9 @@
     * @param attributesDTOList é¡µé¢ä¼ è¾“对象集合
     * @param creator åˆ›å»ºäºº
     * @param now ts时间戳
     * @return å—影响的行数
     * @return ä¿å­˜çš„æ˜¾ç¤ºå¯¹è±¡
     */
    int checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
    List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
    /**
     * æ‰¹é‡æ’å…¥
@@ -38,4 +38,46 @@
     * @return æŸ¥è¯¢ç»“æžœ
     */
    List<BtmTypeAttributeVO> getAttributeByBtmTypeOid(String btmTypeOid);
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹ä¸»é”®èŽ·å–å…³è”çš„æ‰€æœ‰å±žæ€§å¯¹è±¡
     *
     * @param oidCollection ä¸šåŠ¡ç±»åž‹ä¸»é”®é›†åˆ
     * @return æ‰€æœ‰çš„属性对象,包括系统内置属性,key是业务类型主键,value是包含的属性
     * @throws ServiceException ä¸šåŠ¡ç±»åž‹ä¸å­˜åœ¨ï¼Œå‚æ•°ä¸ºç©ºæˆ–è€…æŸ¥è¯¢å‡ºé”™æ—¶ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection);
    /**
     * æ£€æŸ¥å±žæ€§å­˜åœ¨å¹¶åˆ é™¤
     * @param records ä¸»é”®é›†åˆ
     * @return å—影响的行数
     */
    int checkAndRemove(List<String> records);
    /**
     * æ£€æŸ¥å±žæ€§å­˜åœ¨å¹¶æ·»åŠ 
     * @param btmTypeOid ä¸šåŠ¡ç±»åž‹ä¸»é”®
     * @param attributesDTOList é¡µé¢ä¼ è¾“对象集合
     * @param creator åˆ›å»ºäºº
     * @param now ts时间戳
     * @return ä¿å­˜çš„æ˜¾ç¤ºå¯¹è±¡
     */
    List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now);
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ä¸­çš„æŒ‡å®šå±žæ€§
     * @param id ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @param attributeIdCollection å±žæ€§çš„id,若为空则获取全部
     * @return å±žæ€§çš„æ•°æ®å¯¹è±¡
     */
    List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection);
    /**
     * é€šè¿‡ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°èŽ·å–å…³è”çš„å±žæ€§
     * @param idList ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°é›†åˆ
     * @return åŒ…含的属性
     */
    List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList);
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IBtmTypeService.java
@@ -4,12 +4,13 @@
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.entity.ModifyAttributeInfoDO;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseService;
import org.springblade.core.tool.api.R;
import java.util.Collection;
import java.util.Date;
@@ -170,24 +171,6 @@
    boolean checkBtmTypeUseds(Collection<String> oidCollection) throws ServiceException;
    /**
     * æ·»åŠ ä¸šåŠ¡ç±»åž‹
     * @param btmTypeDTO ä¸šåŠ¡ç±»åž‹æ•°æ®ä¼ è¾“å¯¹è±¡
     * @param autoCreateTable æ˜¯å¦è‡ªåŠ¨åˆ›å»ºè¡¨æ ¼
     * @return æ·»åŠ åŽçš„ä¸šåŠ¡ç±»åž‹
     * @throws ServiceException æ·»åŠ å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    BtmTypeDTO addSave(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException;
    /**
     * ä¿®æ”¹ä¸šåŠ¡ç±»åž‹
     * @param btmTypeDTO ä¸šåŠ¡ç±»åž‹æ•°æ®ä¼ è¾“å¯¹è±¡
     * @param autoEditTable æ˜¯å¦è‡ªåŠ¨æ›´æ–°è¡¨æ ¼
     * @return ä¿®æ”¹åŽçš„业务类型
     * @throws ServiceException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    BtmTypeDTO editSave(BtmTypeDTO btmTypeDTO, boolean autoEditTable) throws ServiceException;
    /**
     * åˆ é™¤ä¸šåŠ¡ç±»åž‹
     * @param btmTypeVO ä¸šåŠ¡ç±»åž‹æ˜¾ç¤ºå¯¹è±¡
     * @param autoDeleteTable è‡ªåŠ¨åˆ é™¤è¡¨æ ¼
@@ -209,82 +192,22 @@
     * @return ä¸åŒçš„属性信息
     * @throws ServiceException å‚数为空或者查询出错时会抛出异常
     */
    List<ModifyAttributeInfoDO> checkDbTableSame(String pkBtmType) throws ServiceException;
    List<ModifyAttributeInfo> checkDbTableSame(String pkBtmType) throws ServiceException;
    /**
     * èŽ·å–æ•°æ®åº“è¡¨ï¼Œæ”¯æŒä¸šåŠ¡ç±»åž‹å’Œè§†å›¾
     * @param id ä¸šåŠ¡ç±»åž‹çš„åç§°
     * @param domain é¢†åŸŸåç§°
     * @return æ•°æ®åº“表的名称
     * @throws ServiceException å‚数为空的时候会抛出异常
     */
    String getTableName(String id) throws ServiceException;
    /**
     * å°†ä¸šåŠ¡ç±»åž‹ä½¿ç”¨çš„å±žæ€§çš„ä¼ è¾“å¯¹è±¡è½¬æ¢ä¸ºæ•°æ®å¯¹è±¡
     * @param attributesDTO å±žæ€§çš„æ•°æ®ä¼ è¾“对象
     * @param pkBtmType ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @param creator åˆ›å»ºäºº
     * @param now å½“前时间
     * @return å±žæ€§çš„æ•°æ®å¯¹è±¡
     */
    BtmTypeAttribute btmTypeAttributeDTO2DO(BtmTypeLinkAttributesDTO attributesDTO, String pkBtmType, String creator, Date now);
    /**
     * ä¸šåŠ¡ç±»åž‹çš„å±žæ€§æ˜¾ç¤ºå¯¹è±¡è½¬æ¢ä¸ºæ•°æ®å¯¹è±¡
     * @param thisBtmTypeHasAttributeVOList ä¸šåŠ¡ç±»åž‹å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @return æ•°æ®å¯¹è±¡
     */
    List<BtmTypeAttribute> btmTypeAttributeVO2DO(List<BtmTypeAttributeVO> thisBtmTypeHasAttributeVOList);
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹çš„æ•°æ®å¯¹è±¡è½¬æ¢ä¸ºæ˜¾ç¤ºå¯¹è±¡
     * @param attributeDOList å±žæ€§çš„æ•°æ®å¯¹è±¡åˆ—表
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     */
    List<BtmTypeAttributeVO> batchBtmTypeAttributeDO2VO(List<BtmTypeAttribute> attributeDOList);
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹çš„æ•°æ®å¯¹è±¡è½¬æ¢ä¸ºæ˜¾ç¤ºå¯¹è±¡
     * @param attributesDO å±žæ€§çš„æ•°æ®å¯¹è±¡
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     */
    BtmTypeAttributeVO btmTypeAttributeDO2VO(BtmTypeAttribute attributesDO);
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹çš„æŒ‡å®šå±žæ€§
     * @param id é“¾æŽ¥ç±»åž‹çš„英文名称
     * @param attributeIdCollection å±žæ€§çš„集合,如果为空则获取全部
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    List<BtmTypeAttribute> listAttributeDOByIdsForBtm(String id, Collection<String> attributeIdCollection);
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹çš„ç¼–å·èŽ·å–å±žæ€§
     * @param id ä¸šåŠ¡ç±»åž‹çš„ç¼–å·
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    List<BtmTypeAttributeVO> listAttributeByBtmTypeId(String id);
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®èŽ·å–å±žæ€§
     * @param oid ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    List<BtmTypeAttributeVO> listAttributeByBtmTypeOid(String oid);
    /**
     * æ‰¹é‡æ ¹æ®ä¸šåŠ¡ç±»åž‹ç¼–å·æˆ–è€…ä¸»é”®èŽ·å–åŒ…å«çš„å±žæ€§
     * @param oidsOrIds ä¸»é”®æˆ–者编号集合
     * @param queryById æ˜¯å¦ä½¿ç”¨ç¼–号查询
     * @return key是业务类型的主键或者编号,值是包含的属性的信息
     * @throws ServiceException å‚数为空或者查询出错会抛出异常
     */
     List<BtmTypeAttributeVO> batchListAttributeByBtmType(Collection<String> oidsOrIds, boolean queryById) throws ServiceException;
    String getTableName(String id,String domain) throws ServiceException;
    /**
     * æ–°å¢žæˆ–修改业务类型
     * @param btmTypeDTO ä¸šåŠ¡ç±»åž‹é¡µé¢ä¼ è¾“å¯¹è±¡
     * @param autoCreateTable è‡ªåŠ¨åˆ›å»ºè¡¨
     * @return æ‰§è¡Œç»“æžœ
     */
    boolean submit(BtmTypeDTO btmTypeDTO);
    R submit(BtmTypeDTO btmTypeDTO,boolean autoCreateTable);
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.vci.ubcs.omd.service;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import org.springblade.core.mp.base.BaseService;
/**
 * Description:需要修改数据库表中字段的信息服务
 *
 * @author LiHang
 * @date 2023/5/4
 */
public interface IModifyAttributeService extends BaseService<ModifyAttributeInfo> {
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.omd.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,6 +13,8 @@
import com.vci.ubcs.omd.vo.AttributeVO;
import com.vci.ubcs.omd.wrapper.AttributeWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.cache.utils.CacheUtil;
import org.springblade.core.log.exception.ServiceException;
@@ -180,6 +183,30 @@
     */
    @Override
    public boolean checkAttributePass(String id, String attrDataType, Integer attributeLength, String defaultValue) throws VciBaseException {
        String attributeDataTypeText = VciFieldTypeEnum.getTextByValue(attrDataType);
        if(StringUtils.isBlank(attributeDataTypeText)){
            throw new VciBaseException("英文名称为{0}的属性的类型不符合要求",new Object[]{id});
        }
        //必须要输入长度
        if( VciBaseUtil.inArray(new String[] {VciFieldTypeEnum.VTString.name()},attrDataType)
            && (attributeLength == null ||attributeLength < 1)){
            throw new VciBaseException("英文名称为{0}的属性的为{1}类型时,必须要输入长度的值",new Object[]{id,attributeDataTypeText});
        }
        //判断默认值
        if(StringUtils.isNotBlank(defaultValue)){
            if(VciFieldTypeEnum.VTDouble.name().equalsIgnoreCase(attrDataType)
                && !defaultValue.matches(OmdRegExpConstant.DOUBLE)){
                throw new VciBaseException("英文名称为{0}的属性的默认值不是双精度类型",new Object[]{id});
            }
            if(VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(defaultValue)
                && !defaultValue.matches(OmdRegExpConstant.INT)){
                throw new VciBaseException("英文名称为{0}的属性的默认值不是整数型",new Object[]{id});
            }
            if(VciFieldTypeEnum.VTLong.name().equalsIgnoreCase(defaultValue)
                && !defaultValue.matches(OmdRegExpConstant.LONG)){
                throw new VciBaseException("英文名称为{0}的属性的默认值不是长整形",new Object[]{id});
            }
        }
        return true;
    }
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
@@ -9,16 +9,15 @@
import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.*;
/**
 * Description: ä¸šåŠ¡ç±»åž‹å…³è”å±žæ€§çš„æœåŠ¡å®žçŽ°ç±»
@@ -49,7 +48,7 @@
     * @return å—影响的行数
     */
    @Override
    public int checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
    public List<BtmTypeAttributeVO> checkAndInsert(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
        List<String> attributeIdList = new ArrayList<>();
        List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(attributesDTOList)) {
@@ -61,14 +60,62 @@
            //检查属性是否都存在
            boolean exists = attributeService.checkAttributeExists(attributeIdList);
            if (!exists){
                return -1;
                return null;
            }
            return batchInsert(btmTypeAttributeDOList);
            batchInsert(btmTypeAttributeDOList);
            return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
//                btmTypeAttributeDOMapper.insert(s);
//            });
        }
        return 0;
        return null;
    }
    /**
     * æ£€æŸ¥å±žæ€§å­˜åœ¨å¹¶åˆ é™¤
     *
     * @param records ä¸»é”®é›†åˆ
     * @return å—影响的行数
     */
    @Override
    public int checkAndRemove(List<String> records) {
        if (CollectionUtils.isEmpty(records)){
            return 0;
        }
        return baseMapper.batchDelete(records);
    }
    /**
     * æ£€æŸ¥å±žæ€§å­˜åœ¨å¹¶æ·»åŠ 
     *
     * @param btmTypeOid        ä¸šåŠ¡ç±»åž‹ä¸»é”®
     * @param attributesDTOList é¡µé¢ä¼ è¾“对象集合
     * @param creator           åˆ›å»ºäºº
     * @param now               ts时间戳
     * @return å—影响的行数
     */
    @Override
    public List<BtmTypeAttributeVO> checkAndUpdate(String btmTypeOid, List<BtmTypeLinkAttributesDTO> attributesDTOList, String creator, Date now) {
        List<String> attributeIdList = new ArrayList<>();
        List<BtmTypeAttribute> btmTypeAttributeDOList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(attributesDTOList)) {
            attributesDTOList.stream().forEachOrdered(s -> {
                attributeService.checkAttribute(s);
                btmTypeAttributeDOList.add(BtmTypeAttributeWrapper.build().copyBtmTypeAttributeDTO2Entity(s,btmTypeOid, creator, now));
                attributeIdList.add(s.getId().toLowerCase().trim());
            });
            //检查属性是否都存在
            boolean exists = attributeService.checkAttributeExists(attributeIdList);
            if (!exists){
                return null;
            }
            baseMapper.batchUpdate(btmTypeAttributeDOList);
            return BtmTypeAttributeWrapper.build().listEntityVO(btmTypeAttributeDOList);
//            btmTypeAttributeDOList.stream().forEachOrdered(s -> {
//                btmTypeAttributeDOMapper.insert(s);
//            });
        }
        return null;
    }
    /**
@@ -95,4 +142,41 @@
            ).orElseGet(ArrayList::new)
        );
    }
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹ä¸»é”®èŽ·å–å…³è”çš„æ‰€æœ‰å±žæ€§å¯¹è±¡
     *
     * @param oidCollection ä¸šåŠ¡ç±»åž‹ä¸»é”®é›†åˆ
     * @return æ‰€æœ‰çš„属性对象,包括系统内置属性,key是业务类型主键,value是包含的属性
     * @throws VciBaseException ä¸šåŠ¡ç±»åž‹ä¸å­˜åœ¨ï¼Œå‚æ•°ä¸ºç©ºæˆ–è€…æŸ¥è¯¢å‡ºé”™æ—¶ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    @Override
    public List<BtmTypeAttributeVO> batchListHasAttributesByBtmTypeOidCollection(Collection<String> oidCollection) throws VciBaseException {
        VciBaseUtil.alertNotNull(oidCollection,"业务类型主键");
        List<BtmTypeAttribute> doList = baseMapper.selectList(Wrappers.<BtmTypeAttribute>query().lambda().in(BtmTypeAttribute::getPkBtmType, oidCollection));
        return BtmTypeAttributeWrapper.build().listEntityVO(doList);
    }
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹ä¸­çš„æŒ‡å®šå±žæ€§
     *
     * @param id                    ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @param attributeIdCollection å±žæ€§çš„id,若为空则获取全部
     * @return å±žæ€§çš„æ•°æ®å¯¹è±¡
     */
    @Override
    public List<BtmTypeAttribute> selectByBtmTypeIdAndAttributeIds(String id, Collection<String> attributeIdCollection) {
        return baseMapper.selectByBtmTypeIdAndAttributeIds(id,attributeIdCollection);
    }
    /**
     * é€šè¿‡ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°èŽ·å–å…³è”çš„å±žæ€§
     *
     * @param idList ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°é›†åˆ
     * @return åŒ…含的属性
     */
    @Override
    public List<BtmTypeAttribute> selectByBtmTypeIds(List<String> idList) {
        return baseMapper.selectByBtmTypeIds(idList);
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -4,22 +4,27 @@
import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
import com.vci.ubcs.omd.service.IModifyAttributeService;
import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
import com.vci.ubcs.omd.wrapper.ModifyAttributeWrapper;
import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
import com.vci.ubcs.omd.dto.BtmTypeDTO;
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.entity.ModifyAttributeInfoDO;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.mapper.BtmTypeMapper;
import com.vci.ubcs.omd.service.IBtmTypeService;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciDateUtil;
import org.springblade.core.log.exception.ServiceException;
@@ -27,6 +32,7 @@
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
@@ -37,6 +43,7 @@
import javax.validation.constraints.NotEmpty;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Description: ä¸šåŠ¡ç±»åž‹æœåŠ¡çš„å®žçŽ°ç±»
@@ -58,6 +65,17 @@
     */
    @Autowired
    private IBtmTypeAttributeService btmTypeAttributeService;
    /**
     * å­—段修改信息的服务
     */
    @Autowired
    private IModifyAttributeService modifyAttributeService;
    /**
     * è¡¨åå‰ç¼€
     */
    public static final String PL = "PL";
    /**
     * è®¾ç½®å¹³å°æœ¬èº«çš„业务类型
@@ -93,7 +111,10 @@
     */
    @Override
    public List<BtmTypeVO> listBtmTypeByOids(String pkBtmTypes) throws ServiceException {
        return null;
        VciBaseUtil.alertNotNull(pkBtmTypes, "业务类型的主键");
        List<String> pkList = new ArrayList<>();
        Collections.addAll(pkList, pkBtmTypes.split(","));
        return listBtmTypeByOidCollection(pkList);
    }
    /**
@@ -105,6 +126,12 @@
     */
    @Override
    public List<BtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) throws ServiceException {
        if (!CollectionUtils.isEmpty(pkBtmTypeCollection)) {
            List<BtmType> btmTypeDOList = listBtmTypeDOByOidCollection(pkBtmTypeCollection);
            if (!CollectionUtils.isEmpty(btmTypeDOList)) {
                return BtmTypeWrapper.build().listEntityVO(btmTypeDOList);
            }
        }
        return null;
    }
@@ -117,6 +144,11 @@
     */
    @Override
    public BtmTypeVO getBtmTypeById(String id) throws ServiceException {
        VciBaseUtil.alertNotNull(id, "业务类型的英文名称");
        List<BtmTypeVO> btmTypeVOList = listBtmTypeByIds(id);
        if (!CollectionUtils.isEmpty(btmTypeVOList)) {
            return btmTypeVOList.get(0);
        }
        return null;
    }
@@ -129,7 +161,8 @@
     */
    @Override
    public List<BtmTypeVO> listBtmTypeByIds(String ids) throws ServiceException {
        return null;
        Func.requireNotNull(ids,"英文名称不能为空");
        return listBtmTypeByIdCollection(Func.toStrList(",",ids));
    }
    /**
@@ -141,7 +174,7 @@
     */
    @Override
    public List<BtmTypeVO> listBtmTypeByIdCollection(Collection<String> idCollection) throws ServiceException {
        return null;
        return CollectionUtils.isEmpty(idCollection) ?  null : BtmTypeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId,idCollection)));
    }
    /**
@@ -153,7 +186,7 @@
     */
    @Override
    public List<BtmType> listBtmTypeDOByIdCollection(Collection<String> idCollection) throws ServiceException {
        return null;
        return CollectionUtils.isEmpty(idCollection) ? null : baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection));
    }
    /**
@@ -165,6 +198,9 @@
     */
    @Override
    public List<BtmType> listBtmTypeDOByOidCollection(Collection<String> oidCollection) throws ServiceException {
        if (!CollectionUtils.isEmpty(oidCollection)) {
            return baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getOid, oidCollection));
        }
        return null;
    }
@@ -177,7 +213,7 @@
     */
    @Override
    public String getNameByOid(String oid) throws ServiceException {
        return null;
        return Objects.requireNonNull(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getOid,oid))).getName();
    }
    /**
@@ -189,7 +225,7 @@
     */
    @Override
    public String getNameById(String id) throws ServiceException {
        return null;
        return Objects.requireNonNull(baseMapper.selectOne(Wrappers.<BtmType>query().lambda().eq(BtmType::getId,id))).getName();
    }
    /**
@@ -213,6 +249,16 @@
     */
    @Override
    public List<BtmTypeAttributeVO> listHasAttributeById(String id) throws ServiceException {
        VciBaseUtil.alertNotNull(id,"业务类型英文名称");
        List<String> ids = Func.toStrList(",", id);
        Map<String, List<BtmTypeAttributeVO>> attributeMap = batchListHasAttributesByIdCollection(ids);
        if (!CollectionUtils.isEmpty(attributeMap)) {
            List<BtmTypeAttributeVO> attributeVOList = new ArrayList<>();
            attributeMap.forEach((k, v) -> {
                attributeVOList.addAll(v);
            });
            return attributeVOList;
        }
        return null;
    }
@@ -225,7 +271,7 @@
     */
    @Override
    public Map<String, List<BtmTypeAttributeVO>> batchListHasAttributesByOidCollection(Collection<String> oidCollection) throws ServiceException {
        return null;
        return btmTypeAttributeService.batchListHasAttributesByBtmTypeOidCollection(oidCollection).stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
    }
    /**
@@ -237,7 +283,8 @@
     */
    @Override
    public Map<String, List<BtmTypeAttributeVO>> batchListHasAttributesByIdCollection(Collection<String> idCollection) throws ServiceException {
        return null;
        List<String> btmTypeOidList = baseMapper.selectList(Wrappers.<BtmType>query().lambda().in(BtmType::getId, idCollection)).stream().map(BtmType::getOid).collect(Collectors.toList());
        return btmTypeAttributeService.batchListHasAttributesByBtmTypeOidCollection(btmTypeOidList).stream().collect(Collectors.groupingBy(BtmTypeAttributeVO::getPkBtmType));
    }
    /**
@@ -261,7 +308,8 @@
     */
    @Override
    public boolean checkBtmTypeUsed(String pkBtmType) throws ServiceException {
        return false;
        VciBaseUtil.alertNotNull(pkBtmType, "业务类型主键");
        return checkBtmTypeUseds(VciBaseUtil.str2List(pkBtmType));
    }
    /**
@@ -273,113 +321,40 @@
     */
    @Override
    public boolean checkBtmTypeUseds(Collection<String> oidCollection) throws ServiceException {
        VciBaseUtil.alertCollectionNotNull("校验是否引用的业务类型对象的主键", oidCollection);
        //检查链接类型
        //因为链接类型中fromBtmType和toBtmType都是逗号分隔的,所以直接查询所有的链接类型中的使用的业务类型名称
        List<BtmType> btmTypeDOList = listBtmTypeDOByOidCollection(oidCollection);
        if (CollectionUtils.isEmpty(btmTypeDOList)) {
            return false;
        }
        /*Set<String> usedBtmTypeSet = linkTypeServiceI.listUsedBtmType();
        if (btmTypeDOList.stream().anyMatch(s -> usedBtmTypeSet.contains(s.getId().trim().toLowerCase()))) {
            return true;
        }*/
        return false;
    }
    /**
     * æ·»åŠ ä¸šåŠ¡ç±»åž‹
     *
     * @param btmTypeDTO      ä¸šåŠ¡ç±»åž‹æ•°æ®ä¼ è¾“å¯¹è±¡
     * @param autoCreateTable æ˜¯å¦è‡ªåŠ¨åˆ›å»ºè¡¨æ ¼
     * @return æ·»åŠ åŽçš„ä¸šåŠ¡ç±»åž‹
     * @throws ServiceException æ·»åŠ å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     * æ·»åŠ é»˜è®¤çš„å­—æ®µ
     * @param attributes å­—段集
     * @param fieldMap é»˜è®¤å­—段集
     * @return æ·»åŠ åŽçš„å­—æ®µé›†
     */
    @Override
    public BtmTypeDTO addSave(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) throws ServiceException {
        TransactionStatus transaction = null;
        DefaultTransactionDefinition def = null;
        if (autoCreateTable) {
            def = new DefaultTransactionDefinition();
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            // äº‹ç‰©éš”离级别,开启新事务,这样会比较安全些。
            transaction = dataSourceTransactionManager.getTransaction(def);
            // èŽ·å¾—äº‹åŠ¡çŠ¶æ€
        }
        BtmType btmTypeDO = new BtmType();
        try {
            VciBaseUtil.alertNotNull(btmTypeDTO, "要添加的业务类型", btmTypeDTO.getId(), "业务类型的英文名称", btmTypeDTO.getName(), "业务类型中文名称");
            if (btmTypeDTO.isViewFlag() && (StringUtils.isBlank(btmTypeDTO.getViewCreateSql())
                || StringUtils.isBlank(btmTypeDTO.getTableName()))) {
                throw new VciBaseException("如果当前是业务类型是视图的时候,请必须输入视图的创建语句和视图名称");
    private List<BtmTypeLinkAttributesDTO> addAttributeByFieldMap(List<BtmTypeLinkAttributesDTO> attributes, Map<String, String> fieldMap) {
        Map<String, BtmTypeLinkAttributesDTO> existFieldMap = attributes.stream().collect(Collectors.toMap(BtmTypeLinkAttributesDTO::getId, t -> t, (o1, o2) -> o1));
        fieldMap.forEach((k,v) -> {
            if (!existFieldMap.containsKey(k)){
                BtmTypeLinkAttributesDTO attr = new BtmTypeLinkAttributesDTO();
                attr.setId(k);
                attr.setAttrDataType(VciFieldTypeEnum.VTString.name());
                attr.setAttributeLength(50);
                attr.setNullableFlag(false);
                attr.setDescription(v);
                attributes.add(attr);
            }
            if (!btmTypeDTO.isViewFlag()) {
                VciBaseUtil.alertCollectionNotNull("属性", btmTypeDTO.getAttributesDTOList());
            }
            if (!btmTypeDTO.getId().matches(OmdRegExpConstant.LETTER)) {
                throw new VciBaseException("业务类型英文名称只能是纯英文,目前为{0}", new Object[]{btmTypeDTO.getId()});
            }
            if (btmTypeDTO.getId().length() > 24) {
                throw new VciBaseException("业务类型英文名称不能超过18,目前长度为{0}", new Object[]{btmTypeDTO.getId().length()});
            }
            List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
            if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
                BtmType existBtmType = btmTypeDOList.get(0);
                throw new VciBaseException("业务类型英文名称已经存在(不区分大小写),这个英文名称对应的中文名称为{0},创建人{1},创建时间{2}"
                    , new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
            }
            /*
            //检查使用的版本规则是否存在
            if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
                if (revisionRuleServiceI.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
                    throw new VciBaseException("版本规则{0}[{1}]在系统中不存在,请先查证",
                        new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
                }
            }
            //检查使用的生命周期是否存在
            if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
                && !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
                if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
                    throw new VciBaseException("生命周期{0}[{1}]在系统中不存在,请先查证",
                        new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
                }
            }
            if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
                if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
                    throw new VciBaseException("备用生命周期{0}[{1}]中其中有某些在系统中不存在,请先查证",
                        new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
                }
            }
            */
            if (StringUtils.isBlank(btmTypeDTO.getOid())) {
                btmTypeDTO.setOid(VciBaseUtil.getPk());
            }
            BeanUtil.copy(btmTypeDTO, btmTypeDO);
            String creator = AuthUtil.getUserAccount();
            Date now = new Date();
            btmTypeDO.setCreator(creator);
            btmTypeDO.setCreateTime(now);
            btmTypeDO.setOwner(creator);
            btmTypeDO.setBtmname(BtmTypeConstant.OMD_BTMTYPE);
            btmTypeDO.setTs(now);
            if (StringUtils.isBlank(btmTypeDO.getTableName())) {
                btmTypeDO.setTableName(getTableName(btmTypeDO.getId()));
            }
            //处理属性
            addAttributeForBtm(btmTypeDTO, creator, now);
            baseMapper.insert(btmTypeDO);
            if (autoCreateTable) {
                dataSourceTransactionManager.commit(transaction);
            }
        } catch (ServiceException e) {
            if (autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        } catch (Throwable e) {
            if (autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }
        if (autoCreateTable) {
            BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
            btmTypeVO.setAttributes(listHasAttributesByOid(btmTypeDO.getOid()));
            checkTableSame(btmTypeVO);
        }
        return btmTypeDTO;
        });
        return attributes;
    }
    /**
@@ -388,43 +363,44 @@
     * @param btmTypeVO ä¸šåŠ¡ç±»åž‹çš„æ˜¾ç¤ºå¯¹è±¡
     */
    private void checkTableSame(BtmTypeVO btmTypeVO) {
        /*List<OmdBtmTypeVO> btmTypeVOList = new ArrayList<>();
        List<BtmTypeVO> btmTypeVOList = new ArrayList<>();
        btmTypeVOList.add(btmTypeVO);
        List<OsModifyAttributeInfoDO> modifyAttributeInfoDOList = ddlServiceI.checkDifferent(btmTypeVOList, null);
        BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
        ddlDTO.setBtmTypeList(btmTypeVOList);
        try {
            modifyAttributeServiceI.batchAddSave(modifyAttributeInfoDOList);
        } catch (Throwable e) {
            if (logger.isErrorEnabled()) {
                logger.error("保存【修改属性】数据", e);
            // å°†ä»¥å‰çš„checkDifferent和reflexDifferent结合了
            R result = DomainRepeater.checkDifferent(ddlDTO,btmTypeVO.getDomain());
            if (result.isSuccess()){
                List<ModifyAttributeInfo> infoList = new ArrayList<>();
                Object data = result.getData();
                if (data instanceof List){
                    List dataList = (List) data;
                    dataList.forEach(s -> {
                        if (s instanceof ModifyAttributeInfo){
                            ModifyAttributeInfo info = (ModifyAttributeInfo) s;
                            infoList.add(info);
                        }
                    });
                    modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
                }
            }
        } catch (NacosException e) {
            if (log.isDebugEnabled()) {
                log.error("保存【修改属性】数据", e);
            }
            throw new RuntimeException(e);
        }
        ddlServiceI.reflexDifferent(modifyAttributeInfoDOList);
        modifyAttributeServiceI.finishModify(modifyAttributeInfoDOList);*/
//        modifyAttributeServiceI.finishModify(modifyAttributeInfoList);
    }
    /**
     * æ·»åŠ å±žæ€§åˆ°ä¸šåŠ¡ç±»åž‹ä¸­
     *
     * @param btmTypeDTO ä¸šåŠ¡ç±»åž‹çš„æ•°æ®ä¼ è¾“å¯¹è±¡
     * @param creator    åˆ›å»ºäºº
     * @param now        å½“前时间
     */
    private void addAttributeForBtm(BtmTypeDTO btmTypeDTO, String creator, Date now) throws VciBaseException{
        List<BtmTypeLinkAttributesDTO> attributesDTOList = btmTypeDTO.getAttributesDTOList();
        btmTypeAttributeService.checkAndInsert(btmTypeDTO.getOid(),attributesDTOList,creator,now);
    }
    /**
     * ä¿®æ”¹ä¸šåŠ¡ç±»åž‹
     *
     * @param btmTypeDTO    ä¸šåŠ¡ç±»åž‹æ•°æ®ä¼ è¾“å¯¹è±¡
     * @param autoEditTable æ˜¯å¦è‡ªåŠ¨æ›´æ–°è¡¨æ ¼
     * @return ä¿®æ”¹åŽçš„业务类型
     * @throws ServiceException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public BtmTypeDTO editSave(BtmTypeDTO btmTypeDTO, boolean autoEditTable) throws ServiceException {
        return null;
    private List<BtmTypeAttributeVO> addAttributeForBtm(BtmTypeDTO btmTypeDTO) throws VciBaseException{
        List<BtmTypeLinkAttributesDTO> attributesDTOList = btmTypeDTO.getAttributes();
        return btmTypeAttributeService.checkAndInsert(btmTypeDTO.getOid(),attributesDTOList,AuthUtil.getUserAccount(),new Date());
    }
    /**
@@ -459,7 +435,7 @@
     * @throws ServiceException å‚数为空或者查询出错时会抛出异常
     */
    @Override
    public List<ModifyAttributeInfoDO> checkDbTableSame(String pkBtmType) throws ServiceException {
    public List<ModifyAttributeInfo> checkDbTableSame(String pkBtmType) throws ServiceException {
        return null;
    }
@@ -471,102 +447,14 @@
     * @throws ServiceException å‚数为空的时候会抛出异常
     */
    @Override
    public String getTableName(String id) throws ServiceException {
        return null;
    }
    /**
     * å°†ä¸šåŠ¡ç±»åž‹ä½¿ç”¨çš„å±žæ€§çš„ä¼ è¾“å¯¹è±¡è½¬æ¢ä¸ºæ•°æ®å¯¹è±¡
     *
     * @param attributesDTO å±žæ€§çš„æ•°æ®ä¼ è¾“对象
     * @param pkBtmType     ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @param creator       åˆ›å»ºäºº
     * @param now           å½“前时间
     * @return å±žæ€§çš„æ•°æ®å¯¹è±¡
     */
    @Override
    public BtmTypeAttribute btmTypeAttributeDTO2DO(BtmTypeLinkAttributesDTO attributesDTO, String pkBtmType, String creator, Date now) {
        return null;
    }
    /**
     * ä¸šåŠ¡ç±»åž‹çš„å±žæ€§æ˜¾ç¤ºå¯¹è±¡è½¬æ¢ä¸ºæ•°æ®å¯¹è±¡
     *
     * @param thisBtmTypeHasAttributeVOList ä¸šåŠ¡ç±»åž‹å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @return æ•°æ®å¯¹è±¡
     */
    @Override
    public List<BtmTypeAttribute> btmTypeAttributeVO2DO(List<BtmTypeAttributeVO> thisBtmTypeHasAttributeVOList) {
        return null;
    }
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹çš„æ•°æ®å¯¹è±¡è½¬æ¢ä¸ºæ˜¾ç¤ºå¯¹è±¡
     *
     * @param attributeDOList å±žæ€§çš„æ•°æ®å¯¹è±¡åˆ—表
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     */
    @Override
    public List<BtmTypeAttributeVO> batchBtmTypeAttributeDO2VO(List<BtmTypeAttribute> attributeDOList) {
        return null;
    }
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹çš„æ•°æ®å¯¹è±¡è½¬æ¢ä¸ºæ˜¾ç¤ºå¯¹è±¡
     *
     * @param attributesDO å±žæ€§çš„æ•°æ®å¯¹è±¡
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     */
    @Override
    public BtmTypeAttributeVO btmTypeAttributeDO2VO(BtmTypeAttribute attributesDO) {
        return null;
    }
    /**
     * èŽ·å–ä¸šåŠ¡ç±»åž‹çš„æŒ‡å®šå±žæ€§
     *
     * @param id                    é“¾æŽ¥ç±»åž‹çš„英文名称
     * @param attributeIdCollection å±žæ€§çš„集合,如果为空则获取全部
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    public List<BtmTypeAttribute> listAttributeDOByIdsForBtm(String id, Collection<String> attributeIdCollection) {
        return null;
    }
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹çš„ç¼–å·èŽ·å–å±žæ€§
     *
     * @param id ä¸šåŠ¡ç±»åž‹çš„ç¼–å·
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    public List<BtmTypeAttributeVO> listAttributeByBtmTypeId(String id) {
        return null;
    }
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®èŽ·å–å±žæ€§
     *
     * @param oid ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    public List<BtmTypeAttributeVO> listAttributeByBtmTypeOid(String oid) {
        return null;
    }
    /**
     * æ‰¹é‡æ ¹æ®ä¸šåŠ¡ç±»åž‹ç¼–å·æˆ–è€…ä¸»é”®èŽ·å–åŒ…å«çš„å±žæ€§
     *
     * @param oidsOrIds ä¸»é”®æˆ–者编号集合
     * @param queryById æ˜¯å¦ä½¿ç”¨ç¼–号查询
     * @return key是业务类型的主键或者编号,值是包含的属性的信息
     * @throws ServiceException å‚数为空或者查询出错会抛出异常
     */
    @Override
    public List<BtmTypeAttributeVO> batchListAttributeByBtmType(Collection<String> oidsOrIds, boolean queryById) throws ServiceException {
        return null;
    public String getTableName(String id,String domain) throws ServiceException {
        VciBaseUtil.alertNotNull(id,"业务类型英文名称",domain,"领域名称");
        if (domain.contains("ubcs-")){
            domain = domain.split("ubcs-")[1];
        }else {
            throw new VciBaseException("领域名称不符合规则");
        }
        return PL + StringPool.UNDERSCORE + domain + StringPool.UNDERSCORE + id;
    }
    /**
@@ -576,16 +464,154 @@
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public boolean submit(BtmTypeDTO btmTypeDTO) {
        addSave(btmTypeDTO,false);
        try {
            R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), Objects.requireNonNull(BeanUtil.copy(btmTypeDTO, BtmTypeVO.class)));
            return result.isSuccess();
        } catch (NacosException e) {
            throw new RuntimeException(e);
    public R submit(BtmTypeDTO btmTypeDTO, boolean autoCreateTable) {
        TransactionStatus transaction = null;
        DefaultTransactionDefinition def = null;
        if (autoCreateTable) {
            def = new DefaultTransactionDefinition();
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            // äº‹ç‰©éš”离级别,开启新事务,这样会比较安全些。
            transaction = dataSourceTransactionManager.getTransaction(def);
            // èŽ·å¾—äº‹åŠ¡çŠ¶æ€
        }
        checkBtmTypeBeforeSave(btmTypeDTO);
        BtmType btmTypeDO = Optional.ofNullable(BeanUtil.copy(btmTypeDTO, BtmType.class)).orElseGet(BtmType::new);
        List<BtmTypeLinkAttributesDTO> attributes = btmTypeDTO.getAttributes();
        List<BtmTypeAttributeVO> afterAttributes;
        if (StringUtils.isBlank(btmTypeDO.getOid())){
            btmTypeDO = BtmTypeWrapper.build().entityBeforeInsert(btmTypeDO);
            if (StringUtils.isBlank(btmTypeDO.getTableName())) {
                btmTypeDO.setTableName(getTableName(btmTypeDO.getId(),btmTypeDO.getDomain()));
            }
            // æ·»åŠ å±žæ€§
            afterAttributes = addAttributeForBtm(btmTypeDTO);
            baseMapper.insert(btmTypeDO);
        }else {
            BtmTypeVO btmTypeByOid = getBtmTypeByOid(btmTypeDO.getOid());
            List<BtmTypeAttributeVO> beforeAttributes = btmTypeByOid.getAttributes();
            // å¤„理属性,多余的删除,不存在的添加
            afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
        }
        BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
        btmTypeVO.setAttributes(afterAttributes);
        try {
            if (autoCreateTable) {
                checkTableSame(btmTypeVO);
                R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), btmTypeVO);
                if (result.isSuccess()){
                    List<ModifyAttributeInfo> infoList = new ArrayList<>();
                    Object data = result.getData();
                    if (data instanceof List){
                        List dataList = (List) data;
                        dataList.forEach(s -> {
                            if (s instanceof ModifyAttributeInfo){
                                ModifyAttributeInfo info = (ModifyAttributeInfo) s;
                                infoList.add(info);
                            }
                        });
                        modifyAttributeService.saveBatch(ModifyAttributeWrapper.build().listEntityBeforeSave(infoList));
                    }
                    dataSourceTransactionManager.commit(transaction);
                }else {
                    dataSourceTransactionManager.rollback(transaction);
                }
            }
        } catch (Throwable e) {
            if (autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
        }
        return R.data(btmTypeVO);
    }
    /**
     * æ›´æ–°ä¸šåŠ¡ç±»åž‹çš„å±žæ€§
     * @param oid é€æ¸
     * @param beforeAttr æ›´æ–°å‰çš„属性
     * @param afterAttr æ›´æ–°åŽçš„属性
     */
    private List<BtmTypeAttributeVO> updateAttributeForBtm(String oid, List<BtmTypeAttributeVO> beforeAttr, List<BtmTypeLinkAttributesDTO> afterAttr) {
        List<BtmTypeAttributeVO> deleteList = beforeAttr.stream().filter(before -> afterAttr.stream().noneMatch(after -> StringUtils.equals(before.getId(), after.getId()))).collect(Collectors.toList());
        List<BtmTypeLinkAttributesDTO> addList = afterAttr.stream().filter(after -> beforeAttr.stream().noneMatch(before -> StringUtils.equals(before.getId(), after.getId()))).collect(Collectors.toList());
        List<BtmTypeLinkAttributesDTO> modifyList = new ArrayList<>();
        Map<String, BtmTypeAttributeVO> beforeAttrMap = beforeAttr.stream().collect(Collectors.toMap(BtmTypeAttributeVO::getId, t -> t, (o1, o2) -> o1));
        Map<String, BtmTypeLinkAttributesDTO> afterAttrMap = afterAttr.stream().collect(Collectors.toMap(BtmTypeLinkAttributesDTO::getId, t -> t, (o1, o2) -> o1));
        afterAttrMap.forEach((k,v) -> {
            if (beforeAttrMap.containsKey(k)){
                modifyList.add(v);
            }
        });
        btmTypeAttributeService.checkAndRemove(deleteList.stream().map(BtmTypeAttributeVO::getOid).collect(Collectors.toList()));
        List<BtmTypeAttributeVO> voListAdd = btmTypeAttributeService.checkAndInsert(oid, addList, AuthUtil.getUserAccount(), new Date());
        List<BtmTypeAttributeVO> voListUpdate = btmTypeAttributeService.checkAndUpdate(oid, modifyList, AuthUtil.getUserAccount(), new Date());
        List<BtmTypeAttributeVO> returnList = new ArrayList<>();
        returnList.addAll(Objects.requireNonNull(voListAdd));
        returnList.addAll(Objects.requireNonNull(voListUpdate));
        return returnList;
    }
    /**
     * æ£€æŸ¥ä¸šåŠ¡ç±»åž‹ç¬¦åˆè§„èŒƒ
     * @param btmTypeDTO ä¸šåŠ¡ç±»åž‹é¡µé¢ä¼ è¾“å¯¹è±¡
     */
    private void checkBtmTypeBeforeSave(BtmTypeDTO btmTypeDTO) {
        VciBaseUtil.alertNotNull(btmTypeDTO, "要添加的业务类型", btmTypeDTO.getId(), "业务类型的英文名称", btmTypeDTO.getName(), "业务类型中文名称");
        if (btmTypeDTO.isViewFlag() && (StringUtils.isBlank(btmTypeDTO.getViewCreateSql())
            || StringUtils.isBlank(btmTypeDTO.getTableName()))) {
            throw new VciBaseException("如果当前是业务类型是视图的时候,请必须输入视图的创建语句和视图名称");
        }
        if (!btmTypeDTO.isViewFlag()) {
            VciBaseUtil.alertCollectionNotNull("属性", btmTypeDTO.getAttributes());
        }
        if (!btmTypeDTO.getId().matches(OmdRegExpConstant.LETTER)) {
            throw new VciBaseException("业务类型英文名称只能是纯英文,目前为{0}", new Object[]{btmTypeDTO.getId()});
        }
        if (btmTypeDTO.getId().length() > 24) {
            throw new VciBaseException("业务类型英文名称不能超过18,目前长度为{0}", new Object[]{btmTypeDTO.getId().length()});
        }
        List<BtmType> btmTypeDOList = listBtmTypeDOByIdCollection(VciBaseUtil.str2List(btmTypeDTO.getId()));
        if (!CollectionUtils.isEmpty(btmTypeDOList) && btmTypeDOList.size() > 0) {
            BtmType existBtmType = btmTypeDOList.get(0);
            throw new VciBaseException("业务类型英文名称已经存在(不区分大小写),这个英文名称对应的中文名称为{0},创建人{1},创建时间{2}"
                , new Object[]{existBtmType.getName(), existBtmType.getCreator(), VciDateUtil.date2Str(existBtmType.getCreateTime(), VciDateUtil.DateFormat)});
        }
        if (btmTypeDTO.isRevisionFlag()){
            // éœ€è¦æŽ§åˆ¶ç‰ˆæœ¬
            // æ£€æŸ¥ä½¿ç”¨çš„版本规则是否存在
//                if (StringUtils.isNotBlank(btmTypeDTO.getRevisionRuleId())) {
//                    if (revisionRuleServiceI.checkRevisionRuleExist(btmTypeDTO.getRevisionRuleId())) {
//                        throw new VciBaseException("版本规则{0}[{1}]在系统中不存在,请先查证",
//                            new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
//                    }
//                }
            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
        }
        if (btmTypeDTO.isLifeCycleFlag()){
            // éœ€è¦æŽ§åˆ¶ç”Ÿå‘½å‘¨æœŸ
            //检查使用的生命周期是否存在
//                if (StringUtils.isNotBlank(btmTypeDTO.getLifeCycleId())
//                    && !FrameWorkLcStatusConstant.EMTYPE_LIFE_CYCLE.equalsIgnoreCase(btmTypeDTO.getLifeCycleId())) {
//                    if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getLifeCycleId())) {
//                        throw new VciBaseException("生命周期{0}[{1}]在系统中不存在,请先查证",
//                            new Object[]{btmTypeDTO.getLifeCycleId(), btmTypeDTO.getLifeCycleName()});
//                    }
//                }
//                if (StringUtils.isNotBlank(btmTypeDTO.getSubLifeCycleId())) {
//                    if (lifeCycleServiceI.checkLifeCycleExist(btmTypeDTO.getSubLifeCycleId())) {
//                        throw new VciBaseException("备用生命周期{0}[{1}]中其中有某些在系统中不存在,请先查证",
//                            new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
//                    }
//                }
            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP));
        }
        if (btmTypeDTO.isSecretFlag()){
            // éœ€è¦æŽ§åˆ¶å¯†çº§
            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP));
        }
        if (StringUtils.isBlank(btmTypeDTO.getOid())) {
            btmTypeDTO.setOid(VciBaseUtil.getPk());
        }
    }
    @Override
    public boolean deleteLogic(@NotEmpty List<Long> ids) {
        return false;
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.vci.ubcs.omd.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.mapper.ModifyAttributeInfoMapper;
import com.vci.ubcs.omd.service.IModifyAttributeService;
import org.springframework.stereotype.Service;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
 * Description: éœ€è¦ä¿®æ”¹æ•°æ®åº“表中字段的信息服务实现类
 *
 * @author LiHang
 * @date 2023/5/4
 */
@Service
public class ModifyAtributeServiceImpl extends ServiceImpl<ModifyAttributeInfoMapper, ModifyAttributeInfo> implements IModifyAttributeService {
    @Override
    public boolean deleteLogic(@NotEmpty List<Long> ids) {
        return false;
    }
    @Override
    public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) {
        return false;
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
@@ -59,5 +59,4 @@
        // åœ¨è¿™è¿›è¡Œé€šç”¨å­—段处理
        return entity;
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java
@@ -3,7 +3,10 @@
import com.vci.ubcs.omd.dto.BtmTypeDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.BeanUtil;
import java.util.Date;
@@ -31,6 +34,12 @@
    public BtmTypeVO entityVO(BtmType entity) {
        BtmTypeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, BtmTypeVO.class));
        // åœ¨è¿™é‡Œè®¾ç½®æžšä¸¾æ˜¾ç¤ºå€¼
        vo.setRevisionFlag(BooleanEnum.TRUE.getValue().equals(entity.getRevisionFlag()));
        vo.setSecretFlag(BooleanEnum.TRUE.getValue().equals(entity.getSecretFlag()));
        vo.setLifeCycleFlag(BooleanEnum.TRUE.getValue().equals(entity.getLifeCycleFlag()));
        vo.setInputRevisionFlag(BooleanEnum.TRUE.getValue().equals(entity.getInputRevisionFlag()));
        vo.setViewFlag(BooleanEnum.TRUE.getValue().equalsIgnoreCase(entity.getViewFlag()));
        vo.setAbstractFlag(BooleanEnum.TRUE.getValue().equals(entity.getAbstractFlag()));
        return vo;
    }
@@ -58,4 +67,29 @@
        return entity;
    }
    public BtmType entityBeforeInsert(BtmType btmType) {
        btmType = entityBeforeSave(btmType);
        String userAccount = AuthUtil.getUserAccount();
        btmType.setOwner(userAccount);
        btmType.setCreator(userAccount);
        Date now = new Date();
        btmType.setCreateTime(now);
        return btmType;
    }
    /**
     * æ’入前包装默认字段
     * @param btmTypeDO do数据
     * @return åŒ…装后
     */
    public BtmType entityBeforeSave(BtmType btmTypeDO) {
        btmTypeDO.setOid(VciBaseUtil.getPk());
        btmTypeDO.setBtmname("btmType");
        Date now  = new Date();
        String userAccount = AuthUtil.getUserAccount();
        btmTypeDO.setLastModifier(userAccount);
        btmTypeDO.setLastModifyTime(now);
        btmTypeDO.setTs(now);
        return btmTypeDO;
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.vci.ubcs.omd.wrapper;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.vo.ModifyAttributeInfoVO;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.secure.utils.AuthUtil;
import java.util.Date;
import java.util.List;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/5/4
 */
public class ModifyAttributeWrapper extends BaseEntityWrapper<ModifyAttributeInfo, ModifyAttributeInfoVO> {
    public static ModifyAttributeWrapper build() {
        return new ModifyAttributeWrapper();
    }
    @Override
    public ModifyAttributeInfoVO entityVO(ModifyAttributeInfo entity) {
        return null;
    }
    public List<ModifyAttributeInfo> listEntityBeforeSave(List<ModifyAttributeInfo> dataList){
        dataList.forEach(data -> {
            data.setOid(VciBaseUtil.getPk());
            data.setCreateTime(new Date());
            data.setCreator(AuthUtil.getUserAccount());
            data.setBtmname("modifyAttributeInfo");
            data.setHandleDate(new Date());
            data.setHandleFinishFlag(BooleanEnum.TRUE.getValue());
            data.setHandleUserName(AuthUtil.getUserAccount());
        });
        return dataList;
    }
}