迁移链接类型后台接口,修正属性字段,增加元数据查找应用范围功能
已修改31个文件
已删除1个文件
已重命名1个文件
已添加14个文件
2406 ■■■■ 文件已修改
Source/UBCS-WEB/src/api/omd/OmdAttribute.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/cycle.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/original.vue 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/TableAddColumnDTO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/TableCheckDTO.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/TableCheckResultDTO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Attribute.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkType.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/AttributeVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/NewAppConstantEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/AttributeController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/AttributeMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LinkTypeAttributeMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LinkTypeMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IAttributeService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeService.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java 868 ●●●●● 补丁 | 查看 | 原始文档 | 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/service/impl/ModifyAttributeServiceImpl.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/StatusServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/ModifyAttributeInfoMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/omd/OmdAttribute.js
@@ -63,3 +63,13 @@
  })
}
export const getApplyRange = (oid) => {
  return request({
    url: '/api/ubcs-omd/attribute/apply-range',
    method: 'get',
    params: {
      oid
    }
  })
}
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
@@ -366,8 +366,8 @@
            this.attrRef.queryNotIn = "";
            this.attrRef.selectData.forEach(item => {
                this.btmType.attributes.push({
                    id: item.key,
                    name: item.label,
                    id: item.id,
                    name: item.name,
                    typeValue: item.typeValue,
                    typeKey: item.typeValue,
                    attrDataType : item.typeValue,
@@ -375,7 +375,7 @@
                    description: item.description,
                    attributeLength: item.maxLength
                });
                this.attrRef.queryNotIn += (item.key + ",")
                this.attrRef.queryNotIn += (item.id + ",")
            });
            this.closeAttrDialog();
        },
Source/UBCS-WEB/src/views/modeling/cycle.vue
@@ -10,14 +10,14 @@
  <basic-container >
    <el-button type="primary" @click="dialogTableVisible=true" size="small">创建模板</el-button>
    <el-button type="primary"  size="small" @click="addHandlers">编辑模板</el-button>
    <el-button type="primary" size="small" @click="$refs.flow.addNode('测试节点')">添加节点</el-button>
    <el-button type="primary" size="small" @click="$refs.flow.addNode('ffff')">添加节点</el-button>
    <br/><br/>
    <avue-flow ref="flow" v-model="form" :height="703" :option="option" :width="1500">
      <template slot="header" slot-scope="scope">
        <i class="el-icon-delete" @click="$refs.flow.deleteNode(scope.node.id)" style="margin-top: 8px"></i>
      </template>
      <div slot-scope="{node}">
        <span>自定义{{ (node || {}).name }}</span>
        <span>{{ (node || {}).name }}</span>
      </div>
    </avue-flow>
    <!--    åˆ›å»ºå¯¹è¯æ¡†-->
@@ -70,21 +70,6 @@
            prop:"filetype",
            formslot: true,
            span:24
            // type:"select",
            // dicData:[
            //   {
            //     label:"测试1",
            //     value:0
            //   },
            //   {
            //     label:"测试2",
            //     value:1
            //   },
            //   {
            //     label:"测试3",
            //     value:2
            //   },
            // ]
          },
          {
            label: "描述",
@@ -126,7 +111,7 @@
        defaultExpandAll: true,
      },
      option: {
        "nodeList": [
        nodeList: [
          {
            "id": "nodeA",
            "name": "流程A-节点A",
@@ -152,7 +137,7 @@
            "top": 20,
          }
        ],
        "lineList": [
        lineList: [
          {
            "from": "nodeA",
            "to": "nodeB"
Source/UBCS-WEB/src/views/modeling/original.vue
@@ -17,7 +17,20 @@
                        :label="row.$index">&nbsp;
                    </el-radio>
                </template>
         <template slot="menuLeft">
            <el-button size="small"
                       plain
                       type="primary"
                       icon="el-icon-zoom-in"
                       @click="applyRangeOpen">查看使用范围
            </el-button>
          </template>
        </avue-crud>
        <el-dialog :visible.sync="applyRange.display" append-to-body :title="applyRange.title" width="600px"
        @close="applyRangeClose">
            <avue-crud v-model="applyRange.model" :option="applyRange.option" :data="applyRange.data" class="applyRangeTable"
            ></avue-crud>
        </el-dialog>
        <el-dialog :visible.sync="referType.display" append-to-body :title="referType.title" width="1000px">
          <original-range @rowchange="rowchange"></original-range>
          <span slot="footer" class="dialog-footer">
@@ -40,10 +53,10 @@
          <el-tab-pane label="属性项" name="attrTab">
            <el-form ref="form" :model="itemData" label-width="80px" style="height: 656px;">
              <el-form-item label="属性编码">
                <el-input v-model="itemData.key" :disabled="true"></el-input>
                <el-input v-model="itemData.id" :disabled="true"></el-input>
              </el-form-item>
              <el-form-item label="属性名称">
                <el-input v-model="itemData.label" :disabled="true"></el-input>
                <el-input v-model="itemData.name" :disabled="true"></el-input>
              </el-form-item>
              <el-form-item label="属性类型">
                <el-input v-model="itemData.typeValue" :disabled="true"></el-input>
@@ -96,7 +109,7 @@
  getList,
  remove,
  add,
  update, getPage
  update, getPage, getApplyRange
} from "@/api/omd/OmdAttribute";
import { getDictionary } from "@/api/omd/enum";
@@ -157,17 +170,18 @@
            label: '选择',
            prop: 'radio',
            width: 60,
            hide: false
            hide: false,
            display: false
          },
          {
            label: '属性编号',
            prop: 'key',
            prop: 'id',
            align: 'left',
            display: false,
            width: 200
          }, {
            label: '属性名称',
            prop: 'label',
            prop: 'name',
            align: 'left',
            display: false
          },
@@ -237,13 +251,13 @@
            prop: "index",
            column: [
              {
                label: '属性编码',
                prop: 'key',
                label: '属性编号',
                prop: 'id',
                align: 'left',
              },
              {
                label: '属性名称',
                prop: 'label',
                prop: 'name',
                align: 'left',
              },
              {
@@ -421,6 +435,36 @@
          }
        ]
      },
      applyRange: {
        model: "",
        title: "应用的业务类型",
        option: {
          height: 360,
          addBtn: false,
          refreshBtn: false,
          columnBtn: false,
          menu: false,
          border: true,
          reserveSelection: true,
          searchMenuSpan:8,
          searchShowBtn: false,
          highlightCurrentRow: true,
          column: [
            {
                label: '业务类型编号',
                prop: 'id',
                align: 'left',
              },
              {
                label: '业务类型名称',
                prop: 'name',
                align: 'left',
              },
          ]
        },
        data: [],
        display: false,
      }
    }
  },
@@ -466,7 +510,6 @@
      this.packageLinkBox = false
    },
    selectChange(val) {
       console.log(val);
       this.referType.key = val.value
      if (val.value == 'businessType'){
        this.referType.value = '业务类型'
@@ -477,7 +520,6 @@
      if(val.value){
        this.referType.disable = false
      }
      console.log(this.referType.disable)
    },
    selchange(val) {
      this.banList = val
@@ -487,17 +529,7 @@
      this.onLoad(this.pageParent, this.query);
    },
    beforeOpen(done, type) {
      if (['view', 'edit'].includes(type)) {
        // æŸ¥çœ‹å’Œç¼–辑逻辑
        console.log("编辑")
      } else {
        //新增逻辑
        console.log(this.Typelist)
        console.log(this.banList)
        console.log("新增")
        console.log(this.typeSelectList)
      }
      done();
    },
@@ -563,8 +595,31 @@
        this.referType.display = true;
        this.referType.title = "请选择" + this.referType.value
    },
    applyRangeOpen(){
        if (!this.selectRow){
          this.$message({
            type:"warning",
            message: "请先选择属性"
          })
        }
        var oid = this.data[this.selectRow].oid;
        console.log(oid);
        getApplyRange(oid).then(res => {
            this.applyRange.data = res.data.data;
        })
        console.log("success");
        this.applyRange.display = true;
    },
    applyRangeClose(){
      this.applyRange.data = [];
      this.applyRange.display = false;
    }
  },
}
</script>
<style lang="scss"></style>
<style lang="scss">
.applyRangeTable > .el-card:nth-of-type(2) > .el-card__body > .avue-crud__menu{
    display: none !important;
}
</style>
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/BtmTypeCache.java
@@ -9,6 +9,7 @@
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.core.tool.utils.StringPool;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -71,7 +72,7 @@
    public static List<BtmTypeVO> listBtmTypeByOidCollection(Collection<String> pkBtmTypeCollection) {
        String  keyPrefix = BTM_IDS.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
        return CacheUtil.get(BTM_TYPE_CACHE,keyPrefix,Func.toStr(pkBtmTypeCollection.stream().map(s -> s.substring(0,5))),() ->{
            R<List<BtmTypeVO>> result = getBtmTypeClient().listBtmTypeByOidCollection(pkBtmTypeCollection);
            R<List<BtmTypeVO>> result = getBtmTypeClient().listBtmTypeByOidCollection(new ArrayList<>(pkBtmTypeCollection));
            return result.getData();
        });
    }
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/constant/BtmTypeConstant.java
@@ -11,130 +11,90 @@
    /**
     * å±žæ€§çš„业务类型名称
     */
    public static final String OMD_ATTRIBUTE_BTM_TYPE = "attribute";
    public static final String ATTRIBUTE = "attribute";
    /**
     * ä¸šåŠ¡ç±»åž‹å¯¹è±¡çš„ ä¸šåŠ¡ç±»åž‹åç§°
     */
    public static final String OMD_BTMTYPE = "btmtype";
    public static final String BTMTYPE = "btmType";
    /**
     * ä¸šåŠ¡ç±»åž‹åŒ…å«çš„å±žæ€§çš„   ä¸šåŠ¡ç±»åž‹åç§°
     */
    public static final String OMD_BTNTYPE_ATTRIBUTE_BTM_TYPE = "btmtypeAttribute";
    public static final String BTM_TYPE_ATTRIBUTE = "btmTypeAttribute";
    /**
     * æžšä¸¾çš„业务类型名称
     */
    public static final String OMD_ENUM_BTM_TYPE = "enum";
    public static final String ENUM = "enum";
    /**
     * æžšä¸¾é¡¹çš„业务类型名称
     */
    public static final String OMD_ENUM_ITEM_BTM_TYPE = "enumitem";
    public static final String ENUM_ITEM = "enumItem";
    /**
     * ç±»æ³¨é‡Šçš„业务类型名称
     */
    public static final String OMD_CLASS_ANNOTATION_BTM_TYPE = "classannotation";
    public static final String CLASS_ANNOTATION = "classAnnotation";
    /**
     * å±žæ€§æ³¨é‡Šçš„业务类型名称
     */
    public static final String OMD_FIELD_ANNOTATION_BTM_TYPE = "fieldannotation";
    public static final String FIELD_ANNOTATION = "fieldAnnotation";
    /**
     * ç”Ÿå‘½å‘¨æœŸçš„业务类型名称
     */
    public static final String OMD_LIFE_CYCLE_BTM_TYPE = "lifecycle";
    public static final String LIFE_CYCLE = "lifecycle";
    /**
     * ç”Ÿå‘½å‘¨æœŸäº‹ä»¶çš„业务类型名称
     */
    public static final String OMD_LIFE_CYCLE_EVENT_BTM_TYPE = "lifecycleevent";
    public static final String LIFE_CYCLE_EVENT = "lifeCycleEvent";
    /**
     * ç”Ÿå‘½å‘¨æœŸè¿žæŽ¥çº¿çš„业务类型名称
     */
    public static final String OMD_LIFE_CYCLE_LINE_BTM_TYPE = "lifecycleline";
    public static final String LIFE_CYCLE_LINE = "lifeCycleLine";
    /**
     * ç”Ÿå‘½å‘¨æœŸè¿žæŽ¥çº¿çš„事件  çš„业务类型名称
     */
    public static final String OMD_LIFE_CYCLE_LINE_EVENT_BTM_TYPE = "lifecyclelineevent";
    public static final String LIFE_CYCLE_LINE_EVENT = "lifeCycleLineEvent";
    /**
     * é“¾æŽ¥ç±»åž‹çš„属性 çš„业务类型名称
     */
    public static final String OMD_LINK_TYPE_ATTRIBUTE_BTM_TYPE = "linktypeattribute";
    public static final String LINK_TYPE_ATTRIBUTE = "linkTypeAttribute";
    /**
     * é“¾æŽ¥ç±»åž‹ çš„业务类型名称
     */
    public static final String OMD_LINK_TYPE_BTM_TYPE = "linktype";
    public static final String LINK_TYPE = "linkType";
    /**
     * æ–¹æ³•注释 çš„业务类型名称
     */
    public static final String OMD_METHOD_ANNOTATION_BTM_TYPE = "methodannotation";
    public static final String METHOD_ANNOTATION = "methodAnnotation";
    /**
     * ä¿®æ”¹å±žæ€§çš„ ä¸šåŠ¡ç±»åž‹åç§°
     */
    public static final String OMD_MODIFY_ATTRIBUTE_BTM_TYPE = "modifyattribute";
    public static final String MODIFY_ATTRIBUTE = "modifyAttribute";
    /**
     * å‚数注释 çš„业务类型名称
     */
    public static final String OMD_PARAM_ANNOTATION_BTM_TYPE = "paramannotation";
    public static final String PARAM_ANNOTATION = "paramAnnotation";
    /**
     * ç‰ˆæœ¬è§„则 çš„业务类型名称
     */
    public static final String OMD_REVISION_RULE_BTM_TYPE = "revisionrule";
    public static final String REVISION_RULE = "revisionRule";
    /**
     * çŠ¶æ€ çš„业务类型名称
     */
    public static final String OMD_STATUS_BTM_TYPE = "status";
    /**
     * ç¼–码规则 çš„业务类型名称
     */
    public static final String OMD_CODE_RULE_BTM_TYPE = "codeRule";
    /**
     * ç¼–码规则元素的业务类型名称
     */
    public static final String OMD_CODE_RULE_ELEMENT_BTM_TYPE = "codeRuleElement";
    /**
     * ç¼–码规则中的枚举值映射
     */
    public static final String OMD_CODE_ENUM_BTM_TYPE = "codeEnum";
    /**
     * ç¼–码元素中的特殊映射
     */
    public static final String OMD_CODE_ELEMENT_MAP_BTM_TYPE = "codeElementMap";
    /**
     * ç¼–码的断号
     */
    public static final String OMD_CODE_BREAK_CODE_BTM_TYPE = "codeBreakCode";
    /**
     * ç¼–码的流水号
     */
    public static final String OMD_CODE_SERIAL_NUMBER_BTM_TYPE = "codeSerialNumber";
    /**
     * ä»£ç ç”Ÿæˆæ–¹æ¡ˆ
     */
    public static final String OMD_CODE_GEN_SCHEMA_BTM_TYPE =  "codeGenSchema";
    /**
     * ä»£ç ç”Ÿæˆæ–¹æ¡ˆjs配置
     */
    public static final String OMD_CODE_GEN_SCHEMA_JS ="codeGenSchemaJs" ;
    public static final String STATUS = "status";
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/TableAddColumnDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.vci.ubcs.omd.dto;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * Description:数据表添加字段的传输对象
 *
 * @author LiHang
 * @date 2023/5/24
 */
@Data
public class TableAddColumnDTO implements Serializable {
    private static final long serialVersionUID = -2024919650323368441L;
    private String tableName;
    private List<BtmTypeAttributeVO> btmTypeAttributeVOList;
    private List<LinkTypeAttributeVO> linkTypeAttributeVOList;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/TableCheckDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.vci.ubcs.omd.dto;
import lombok.Data;
import java.io.Serializable;
/**
 * Description: å‘送DDL服务的对象
 *
 * @author LiHang
 * @date 2023/5/24
 */
@Data
public class TableCheckDTO implements Serializable {
    /**
     * åºåˆ—化
     */
    private static final long serialVersionUID = -8701934126197627838L;
    /**
     * ç±»åž‹åç§°
     */
    private String btmName;
    /**
     * è¡¨å
     */
    private String tableName;
    /**
     * æ˜¯å¦æ£€éªŒè¡¨ä¸­
     */
    private Boolean checkTableHasData;
    /**
     * æ˜¯å¦åˆ é™¤
     */
    private Boolean needDelete;
    /**
     * é¢†åŸŸå€¼
     */
    private String domain;
    private Boolean done;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/dto/TableCheckResultDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.vci.ubcs.omd.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * Description: DDL服务操作的返回值
 *
 * @author LiHang
 * @date 2023/5/24
 */
@Data
public class TableCheckResultDTO implements Serializable {
    /**
     * åºåˆ—化
     */
    private static final long serialVersionUID = 4014121972227815830L;
    /**
     * æ“ä½œæˆåŠŸçš„
     */
    private List<TableCheckDTO> successList;
    /**
     * æ“ä½œå¤±è´¥çš„
     */
    private List<TableCheckDTO> failList;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Attribute.java
@@ -7,12 +7,11 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springblade.core.mp.base.BaseEntity;
import org.springframework.data.annotation.Transient;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@@ -24,33 +23,33 @@
 */
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@TableName("pl_omd_attribute")
@ApiModel(value = "属性对象", description = "属性对象")
public class Attribute extends BaseEntity {
public class Attribute implements Serializable {
    /**
     * åºåˆ—化
     */
    private static final long serialVersionUID = -6792640675358002410L;
    /**
     * ç§Ÿæˆ·ID
     * ä¸»é”®
     */
    @ApiModelProperty(value = "租户ID")
    private String tenantId;
    @ApiModelProperty(value = "主键")
    @NotNull
    private String oid;
    /**
     * å­—段编号
     */
    @ApiModelProperty(value = "字段编号")
    @NotNull
    private String key;
    private String id;
    /**
     * å­—段名称
     */
    @ApiModelProperty(value = "字段名称")
    private String label;
    private String name;
    /**
     * å±žæ€§ç±»åž‹å­—典码
@@ -184,4 +183,41 @@
    @Transient
    @TableField(exist = false)
    private String calculateValue;
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    @ApiModelProperty("业务类型名称")
    private String btmName;
    /**
     * æ‹¥æœ‰è€…
     */
    @ApiModelProperty("拥有者")
    private String owner;
    /**
     * åˆ›å»ºäºº
     */
    @ApiModelProperty("创建人")
    private String creator;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @ApiModelProperty("创建时间")
    private Date createTime;
    /**
     * æœ€åŽä¿®æ”¹äºº
     */
    @ApiModelProperty("最后修改人")
    private String lastModifier;
    /**
     * æœ€åŽä¿®æ”¹æ—¶é—´ï¼Œæ ¼å¼æ˜¯yyyy-MM-dd HH:mm:ss
     */
    @ApiModelProperty("最后修改时间")
    private Date lastModifyTime;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/BtmType.java
@@ -16,7 +16,8 @@
@Data
@TableName("pl_omd_btm_type")
@ApiModel(value = "业务类型", description = "业务类型")
public class BtmType implements java.io.Serializable{
public class
BtmType implements java.io.Serializable{
    /**
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkType.java
ÎļþÃû´Ó Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeDO.java ÐÞ¸Ä
@@ -15,7 +15,7 @@
@Data
@TableName("pl_omd_link_type")
@ApiModel(value = "链接类型", description = "链接类型")
public class LinkTypeDO implements java.io.Serializable{
public class LinkType implements java.io.Serializable{
    /**
     * ç¦æ­¢ä¿®æ”¹è¿™ä¸ªå€¼
@@ -76,7 +76,7 @@
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    private String btmname;
    private String btmName;
    /**
     * æ‹¥æœ‰è€…
@@ -108,4 +108,9 @@
     */
    private Date ts;
    /**
     * é¢†åŸŸå€¼
     */
    private String domain;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java
@@ -10,8 +10,8 @@
/**
 *
 * é“¾æŽ¥ç±»åž‹åŒ…含的属性
 * @author weidy
 * @date 2019/10/11 3:21 PM
 * @author LiHang
 * @date 2023/5/24
 */
@Data
@TableName("pl_omd_link_type_attr")
@@ -107,7 +107,7 @@
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    private String btmname;
    private String btmName;
    /**
     * æ‹¥æœ‰è€…
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/ModifyAttributeInfo.java
@@ -115,7 +115,7 @@
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    private String btmname;
    private String btmName;
    /**
     * åˆ›å»ºäºº
     */
@@ -130,4 +130,14 @@
     * æ—¶é—´æˆ³
     */
    private Date ts;
    /**
     * æœ€åŽä¿®æ”¹äºº
     */
    private String lastModifier;
    /**
     * æœ€åŽä¿®æ”¹æ—¶é—´ï¼Œæ ¼å¼æ˜¯yyyy-MM-dd HH:mm:ss
     */
    private Date lastModifyTime;
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/AttributeVO.java
@@ -28,10 +28,10 @@
    private static final long serialVersionUID = 279638479374768539L;
    /**
     * ä¸»é”®ID
     * ä¸»é”®
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    private String oid;
    @ApiModelProperty("字段范围")
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
@@ -113,7 +113,7 @@
    /**
     * ä¸šåŠ¡ç±»åž‹åç§°
     */
    private String btmname;
    private String btmName;
    /**
     * æ‹¥æœ‰è€…
@@ -145,12 +145,12 @@
     */
    private Date ts;
    public String getBtmname() {
        return btmname;
    public String getBtmName() {
        return btmName;
    }
    public void setBtmname(String btmname) {
        this.btmname = btmname;
    public void setBtmName(String btmName) {
        this.btmName = btmName;
    }
    public String getOwner() {
@@ -378,7 +378,7 @@
                ", enumName='" + enumName + '\'' +
                ", enumFlag=" + enumFlag +
                ", enumItemMap=" + enumItemMap +
                ", btmname='" + btmname + '\'' +
                ", btmname='" + btmName + '\'' +
                ", owner='" + owner + '\'' +
                ", creator='" + creator + '\'' +
                ", createTime=" + createTime +
Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/enumpck/NewAppConstantEnum.java
@@ -7,7 +7,7 @@
    /**
     * ç¼–码规则,服务启动名
     */
    APPLICATION_NAME_CODE(AppConstant.APPLICATION_NAME_CODE,"编码规则服务"),
    APPLICATION_NAME_CODE(AppConstant.APPLICATION_NAME_CODE,"主数据"),
    ;
    /**
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/controller/DdlController.java
@@ -3,8 +3,7 @@
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.dto.*;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import io.swagger.annotations.Api;
@@ -83,4 +82,30 @@
        Func.requireNotNull(ddlDTO,"业务类型与链接对象传输对象不能为空");
        return R.data(ddlService.checkDifferent(ddlDTO.getBtmTypeList(),ddlDTO.getLinkTypeList()));
    }
    /**
     * æ£€æŸ¥æ•°æ®è¡¨æ˜¯å¦å­˜åœ¨æ•°æ®ï¼Œä¸å­˜åœ¨åˆ™åˆ é™¤
     * @param tableCheckDTOList éœ€è¦æ£€æŸ¥çš„表集合
     * @return æ£€æŸ¥ç»“æžœ
     */
    @PostMapping("/checkTableHasDataThenDelete")
    @ApiOperation(value = "检查数据表是否存在数据,不存在则删除")
    @ApiOperationSupport(order = 6)
    public R<TableCheckResultDTO> checkTableHasDataThenDelete(@RequestBody List<TableCheckDTO> tableCheckDTOList){
        Func.requireNotNull(tableCheckDTOList,"需要检查的表集合");
        return R.data(ddlService.checkTableHasDataThenDelete(tableCheckDTOList));
    }
    /**
     * ä¸ºè¡¨æ·»åŠ å­—æ®µ
     * @param addColumnDTO æ·»åŠ çš„å¯¹è±¡
     * @return æ‰§è¡Œç»“æžœ
     */
    @PostMapping("/addColumnForTable")
    @ApiOperation(value = "为表添加字段")
    @ApiOperationSupport(order = 6)
    public R addColumnForTable(@RequestBody TableAddColumnDTO addColumnDTO){
        Func.requireNotNull(addColumnDTO,"添加的对象");
        return R.status(ddlService.addColumnForTable(addColumnDTO));
    }
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
@@ -1,8 +1,7 @@
package com.vci.ubcs.ddl.service;
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.dto.*;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
@@ -22,37 +21,6 @@
 * @date 2023/4/24
 */
public interface IDdlService {
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹çš„æ•°æ®åº“è¡¨ä¸­æ˜¯å¦æœ‰æ•°æ®
     * @param pkBtmType ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @return true表示有数据,false表示没有数据
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    boolean checkTableHasData(String pkBtmType) throws VciBaseException;
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„ä¸»é”®èŽ·å–æ•°æ®åº“è¡¨æ ¼çš„åç§°
     * @param pkBtmType  ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„ä¸»é”®
     * @return æ•°æ®åº“表名称
     */
    String getTableNameByBtmTypeOid(String pkBtmType);
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹èŽ·å–é“¾æŽ¥ç±»åž‹çš„è‹±æ–‡åç§°èŽ·å–æ•°æ®åº“è¡¨æ ¼çš„åç§°
     * @param id ä¸šåŠ¡ç±»åž‹èŽ·å–é“¾æŽ¥ç±»åž‹çš„è‹±æ–‡åç§°
     * @return æ•°æ®åº“表名称
     */
    String getTableNameByBtmTypeId(String id);
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹çš„æ•°æ®åº“è¡¨ä¸­æ˜¯å¦æœ‰æ•°æ®
     * @param id ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°
     * @return true表示有数据,false表示没有数据
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    boolean checkTableHasDataById(String id) throws VciBaseException;
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹åˆ›å»ºæ•°æ®åº“è¡¨
     * @param pkBtmTypes ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
@@ -137,12 +105,6 @@
     */
    void dropColumnByName(String tableName, String columnName);
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„å¯¹åº”çš„è¡¨æ ¼æ˜¯å¦å­˜åœ¨
     * @param pkBtmType ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„è¡¨æ ¼
     * @return true表示存在,false表示不存在
     */
    boolean checkTableExist(String pkBtmType);
    /**
     * æ ¹æ®è¡¨æ ¼çš„名称判断表格是否存在
@@ -151,12 +113,6 @@
     */
    boolean checkTableExistByTableName(String tableName);
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹æ‰€å¯¹åº”çš„è¡¨æ ¼æ˜¯å¦å­˜åœ¨
     * @param id ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„è‹±æ–‡åç§°
     * @return true表示存在,false表示不存在
     */
    boolean checkTableExistById(String id);
    /**
     * èŽ·å–æ•°æ®åº“å’Œä¸šåŠ¡ç±»åž‹ä¸­çš„ä¸åŒçš„åœ°æ–¹
@@ -246,4 +202,18 @@
     * @return è¡¨ä¿¡æ¯é›†åˆ
     */
    List<BtmTypeVO> getAllTableInfo();
    /**
     * æ£€æŸ¥æ•°æ®è¡¨æ˜¯å¦å­˜åœ¨æ•°æ®ï¼Œä¸å­˜åœ¨åˆ™åˆ é™¤
     * @param tableCheckDTOList éœ€è¦æ£€æŸ¥çš„表集合
     * @return æ£€æŸ¥ç»“æžœ
     */
    TableCheckResultDTO checkTableHasDataThenDelete(List<TableCheckDTO> tableCheckDTOList);
    /**
     * ä¸ºè¡¨æ·»åŠ å­—æ®µ
     * @param addColumnDTO æ·»åŠ çš„å¯¹è±¡
     * @return æ‰§è¡Œç»“果标识
     */
    Boolean addColumnForTable(TableAddColumnDTO addColumnDTO);
}
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -17,6 +17,9 @@
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.dto.TableAddColumnDTO;
import com.vci.ubcs.omd.dto.TableCheckDTO;
import com.vci.ubcs.omd.dto.TableCheckResultDTO;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.vo.*;
import com.vci.ubcs.starter.exception.VciBaseException;
@@ -119,77 +122,6 @@
        }
    }
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹çš„æ•°æ®åº“è¡¨ä¸­æ˜¯å¦æœ‰æ•°æ®
     *
     * @param pkBtmType ä¸šåŠ¡ç±»åž‹çš„ä¸»é”®
     * @return true表示有数据,false表示没有数据
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public boolean checkTableHasData(String pkBtmType) throws VciBaseException {
        return checkTableHasDataByTableName(getTableNameByBtmTypeOid(pkBtmType));
    }
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„ä¸»é”®èŽ·å–æ•°æ®åº“è¡¨æ ¼çš„åç§°
     *
     * @param pkBtmType ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„ä¸»é”®
     * @return æ•°æ®åº“表名称
     */
    @Override
    public String getTableNameByBtmTypeOid(String pkBtmType) {
        VciBaseUtil.alertNotNull(pkBtmType, "业务类型或者链接类型的主键");
        BtmTypeVO btmType = BtmTypeCache.getDetail(pkBtmType);
        String tableName = "";
        if (btmType == null || StringUtils.isBlank(btmType.getOid())) {
            /*OsLinkTypeDO linkTypeDO = linkTypeDOMapper.selectByPrimaryKey(pkBtmType.trim());
            if(linkTypeDO == null || StringUtils.isBlank(linkTypeDO.getOid()) ){
                throw new com.vci.starter.web.exception.VciBaseException("不是业务类型,也不是链接类型,请查证");
            }else{
                tableName = linkTypeService.getTableName(linkTypeDO.getId());
            }*/
        } else {
            tableName = btmType.getTableName();
        }
        return tableName;
    }
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹èŽ·å–é“¾æŽ¥ç±»åž‹çš„è‹±æ–‡åç§°èŽ·å–æ•°æ®åº“è¡¨æ ¼çš„åç§°
     *
     * @param id ä¸šåŠ¡ç±»åž‹èŽ·å–é“¾æŽ¥ç±»åž‹çš„è‹±æ–‡åç§°
     * @return æ•°æ®åº“表名称
     */
    @Override
    public String getTableNameByBtmTypeId(String id) {
        VciBaseUtil.alertNotNull(id, "业务类型或者链接类型的英文名称");
        List<BtmTypeVO> btmTypeList = BtmTypeCache.selectByIdCollection(VciBaseUtil.str2List(id));
        String tableName = "";
        if (CollectionUtils.isEmpty(btmTypeList)) {
            /*List<OsLinkTypeDO> linkTypeDOList = linkTypeDOMapper.selectByIdCollection(VciBaseUtil.str2List(id));
            if(CollectionUtils.isEmpty(linkTypeDOList)){
                throw new com.vci.starter.web.exception.VciBaseException("不是业务类型,也不是链接类型,请查证");
            }else{
                tableName = linkTypeService.getTableName(linkTypeDOList.get(0).getId());
            }*/
        } else {
            tableName = btmTypeList.get(0).getTableName();
        }
        return tableName;
    }
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹çš„æ•°æ®åº“è¡¨ä¸­æ˜¯å¦æœ‰æ•°æ®
     *
     * @param id ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°
     * @return true表示有数据,false表示没有数据
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public boolean checkTableHasDataById(String id) throws VciBaseException {
        return checkTableHasDataByTableName(getTableNameByBtmTypeId(id));
    }
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹åˆ›å»ºæ•°æ®åº“è¡¨
@@ -480,16 +412,6 @@
        ddlMapper.dropTableColumn(tableName, columnName);
    }
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„å¯¹åº”çš„è¡¨æ ¼æ˜¯å¦å­˜åœ¨
     *
     * @param pkBtmType ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„è¡¨æ ¼
     * @return true表示存在,false表示不存在
     */
    @Override
    public boolean checkTableExist(String pkBtmType) {
        return checkTableExistByTableName(getTableNameByBtmTypeOid(pkBtmType));
    }
    /**
     * æ ¹æ®è¡¨æ ¼çš„名称判断表格是否存在
@@ -502,16 +424,6 @@
        return ddlMapper.checkTableExist(tableName) > 0;
    }
    /**
     * æ ¡éªŒä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹æ‰€å¯¹åº”çš„è¡¨æ ¼æ˜¯å¦å­˜åœ¨
     *
     * @param id ä¸šåŠ¡ç±»åž‹æˆ–è€…é“¾æŽ¥ç±»åž‹çš„è‹±æ–‡åç§°
     * @return true表示存在,false表示不存在
     */
    @Override
    public boolean checkTableExistById(String id) {
        return checkTableExistByTableName(getTableNameByBtmTypeId(id));
    }
    /**
     * èŽ·å–æ•°æ®åº“å’Œä¸šåŠ¡ç±»åž‹ä¸­çš„ä¸åŒçš„åœ°æ–¹
@@ -1132,4 +1044,55 @@
        }
        return new ArrayList<>();
    }
    /**
     * æ£€æŸ¥æ•°æ®è¡¨æ˜¯å¦å­˜åœ¨æ•°æ®ï¼Œä¸å­˜åœ¨åˆ™åˆ é™¤
     *
     * @param tableCheckDTOList éœ€è¦æ£€æŸ¥çš„表集合
     * @return æ£€æŸ¥ç»“æžœ
     */
    @Override
    public TableCheckResultDTO checkTableHasDataThenDelete(List<TableCheckDTO> tableCheckDTOList) {
        TableCheckResultDTO resultDTO = new TableCheckResultDTO();
        List<TableCheckDTO> successList = new ArrayList<>();
        List<TableCheckDTO> failList = new ArrayList<>();
        tableCheckDTOList.forEach(table -> {
            VciBaseUtil.alertNotNull(table.getTableName(),"数据表名称");
            TableCheckDTO checkDTO = new TableCheckDTO();
            boolean hasDataFlag = checkTableHasDataByTableName(table.getTableName());
            if (hasDataFlag){
                table.setDone(false);
                failList.add(checkDTO);
            }else {
                dropTableByName(table.getTableName());
                table.setDone(true);
                successList.add(table);
            }
        });
        if (!CollectionUtils.isEmpty(successList)){
            resultDTO.setSuccessList(successList);
        }
        if (!CollectionUtils.isEmpty(failList)){
            resultDTO.setFailList(failList);
        }
        return resultDTO;
    }
    /**
     * ä¸ºè¡¨æ·»åŠ å­—æ®µ
     *
     * @param addColumnDTO æ·»åŠ çš„å¯¹è±¡
     * @return æ‰§è¡Œç»“果标识
     */
    @Override
    public Boolean addColumnForTable(TableAddColumnDTO addColumnDTO) {
        VciBaseUtil.alertNotNull(addColumnDTO,"添加字段的对象");
        if (!CollectionUtils.isEmpty(addColumnDTO.getLinkTypeAttributeVOList())){
            addColumn2TableForLink(addColumnDTO.getLinkTypeAttributeVOList());
        }
        if(!CollectionUtils.isEmpty(addColumnDTO.getBtmTypeAttributeVOList())){
            addColumn2TableForBtm(addColumnDTO.getBtmTypeAttributeVOList());
        }
        return true;
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/AttributeController.java
@@ -27,8 +27,6 @@
import springfox.documentation.annotations.ApiIgnore;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -74,7 +72,7 @@
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "查询列表", notes = "传入查询")
    public R<List<AttributeVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition) {
        return R.data(AttributeWrapper.build().listEntityVO(attributeService.list(Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getKey))));
        return R.data(AttributeWrapper.build().listEntityVO(attributeService.list(Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getId))));
    }
    /**
@@ -89,7 +87,7 @@
    @ApiOperation(value = "查询列表", notes = "传入查询")
    public R<IPage<AttributeVO>> pageList(@ApiIgnore @RequestParam Map<String, Object> condition, Query query) {
        IPage<AttributeVO> pageVO = new Page<>();
        IPage<Attribute> page = attributeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getKey));
        IPage<Attribute> page = attributeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getId));
        BeanUtil.copy(page,pageVO);
        pageVO.setRecords( AttributeWrapper.build().listEntityVO(page.getRecords()));
        return R.data(pageVO);
@@ -107,13 +105,13 @@
        if (StringUtil.isNotBlank(notInStr)){
            List<String> notInList = Func.toStrList(",", notInStr);
            if (!CollectionUtils.isEmpty(notInList)){
                wrapper = wrapper.notIn(Attribute::getKey,notInList);
                wrapper = wrapper.notIn(Attribute::getId,notInList);
            }
        }
        if (StringUtil.isNotBlank(key)){
            wrapper = wrapper.like(Attribute::getKey,key);
            wrapper = wrapper.like(Attribute::getId,key);
        }
        IPage<Attribute> page = attributeService.page(Condition.getPage(query),wrapper.orderByAsc(Attribute::getKey));
        IPage<Attribute> page = attributeService.page(Condition.getPage(query),wrapper.orderByAsc(Attribute::getId));
        IPage<AttributeVO> pageVO = new Page<>();
        BeanUtil.copy(page,pageVO);
        pageVO.setRecords(AttributeWrapper.build().listEntityVO(page.getRecords()));
@@ -149,13 +147,13 @@
    /**
     * æŸ¥çœ‹åº”用范围
     * @param id ä¸»é”®
     * @param oid ä¸»é”®
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @GetMapping("/applyRange")
    @GetMapping("/apply-range")
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "查看应用范围",notes = "传入主键")
    public R applyRange(Long id){
        return R.data(attributeService.applyRange(id));
    public R applyRange(String oid){
        return R.data(attributeService.applyRange(oid));
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/AttributeClient.java
@@ -38,6 +38,6 @@
    public R<List<Attribute>> getList(String key) {
        Map<String,Object> condition = new HashMap<>();
        condition.put("key",key);
        return R.data(service.list(Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getKey)));
        return R.data(service.list(Condition.getQueryWrapper(condition, Attribute.class).lambda().orderByAsc(Attribute::getId)));
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/AttributeMapper.java
@@ -1,6 +1,8 @@
package com.vci.ubcs.omd.mapper;
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import org.springblade.core.mp.mapper.BladeMapper;
import java.util.Collection;
@@ -21,9 +23,9 @@
    List<Attribute> selectAll();
    /**
     * ä¸»é”®æ‰¹é‡æŸ¥è¯¢
     * @param primaryKeyCollection ä¸»é”®é›†åˆ
     * @return æŸ¥è¯¢ç»“æžœ
     * æŸ¥è¯¢åº”用的业务类型
     * @param oid
     * @return
     */
    List<Attribute> selectByPrimaryKeyCollection(Collection<String> primaryKeyCollection);
    List<BtmType> selectApplyRange(String oid);
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LinkTypeAttributeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.vci.ubcs.omd.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
/**
 * Description: é“¾æŽ¥ç±»åž‹åŒ…含属性的数据层
 *
 * @author LiHang
 * @date 2023/5/24
 */
public interface LinkTypeAttributeMapper extends BaseMapper<LinkTypeAttribute> {
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/LinkTypeMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.vci.ubcs.omd.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.vci.ubcs.omd.entity.LinkType;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/5/24
 */
public interface LinkTypeMapper extends BaseMapper<LinkType> {
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/repeater/DomainRepeater.java
@@ -9,6 +9,9 @@
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.vci.ubcs.common.constant.LauncherConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.dto.TableAddColumnDTO;
import com.vci.ubcs.omd.dto.TableCheckDTO;
import com.vci.ubcs.omd.dto.TableCheckResultDTO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.DomainVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
@@ -16,6 +19,7 @@
import org.springblade.core.launch.constant.AppConstant;
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.StringPool;
import org.springblade.core.tool.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -63,6 +67,16 @@
    public static final String API_CHECK_DIFFERENT_REFLEX = API_PREFIX + StringPool.SLASH + "checkDifferentAndReflex";
    /**
     * æ£€æŸ¥æ•°æ®è¡¨æ˜¯å¦æœ‰æ•°æ®ï¼Œæ²¡æœ‰æŒ‰éœ€æ±‚删除
     */
    public static final String API_CHECK_TABLE_HAS_DATA_THEN_DELETE = API_PREFIX + StringPool.SLASH + "checkTableHasDataThenDelete";
    /**
     * æ•°æ®è¡¨æ·»åŠ å­—æ®µ
     */
    public static final String API_TABLE_ADD_COLUMN = API_PREFIX + StringPool.SLASH + "addColumnForTable";
    /**
     * ç”¨äºŽæž„建静态服务类
     */
    public static DomainRepeater domainRepeater;
@@ -92,6 +106,60 @@
        return R.fail(String.valueOf(responseEntity.getStatusCode().value()));
    }
    /**
     * æ£€æŸ¥æ•°æ®è¡¨æ˜¯å¦å­˜åœ¨æ•°æ®ï¼Œå¦‚果不存在则删除
     * @param checkList éœ€è¦æ£€æŸ¥çš„表集合
     * @return æ£€æŸ¥ç»“æžœ
     * @throws NacosException æ‰¾ä¸åˆ°æœåŠ¡çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    public static R checkTableHasDataByTableNameThenDrop(List<TableCheckDTO> checkList) throws NacosException {
        Map<String, List<TableCheckDTO>> serviceMap = checkList.stream().collect(Collectors.groupingBy(TableCheckDTO::getDomain));
        List<TableCheckResultDTO> result = new ArrayList<>();
        for (String key : serviceMap.keySet()) {
            String url = getUrl(key, API_CHECK_TABLE_HAS_DATA_THEN_DELETE);
            ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(serviceMap.get(key)), new HashMap<>(16));
            if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
                R r = responseEntity.getBody();
                if (r.getData() instanceof List){
                    List dataList = (List) r.getData();
                    dataList.forEach(data -> {
                        TableCheckResultDTO dto = BeanUtil.copy(JSON.parseObject(JSON.toJSONString(data)), TableCheckResultDTO.class);
                        result.add(dto);
                    });
                }
            }
        }
        return R.data(result);
    }
    /**
     * ä¸ºè¡¨æ·»åŠ å­—æ®µ
     * @param addColumnDTO æ·»åŠ çš„å¯¹è±¡
     * @param serviceName æœåŠ¡å
     * @return æ‰§è¡Œç»“æžœ
     * @throws NacosException æ‰¾ä¸åˆ°æœåŠ¡æ—¶æŠ›å‡ºå¼‚å¸¸
     */
    public static R addColumnForTable(TableAddColumnDTO addColumnDTO, String serviceName) throws NacosException {
        try {
            String url = getUrl(serviceName,API_TABLE_ADD_COLUMN);
            ResponseEntity<R> responseEntity = executePost(url, JSONObject.toJSONString(addColumnDTO), 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("未知错误");
    }
    @PostConstruct
    private void init() {
        domainRepeater = this;
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IAttributeService.java
@@ -4,6 +4,7 @@
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.vo.AttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import org.springblade.core.mp.base.BaseService;
@@ -42,10 +43,10 @@
    /**
     * æŸ¥çœ‹åº”用范围
     * @param id ä¸»é”®
     * @param oid ä¸»é”®
     * @return æŸ¥è¯¢å·²åº”用的业务类型名称
     */
    List<String> applyRange(Long id);
    List<BtmTypeVO> applyRange(String oid);
    /**
     * æ£€æŸ¥å±žæ€§æ˜¯å¦å­˜åœ¨
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.vci.ubcs.omd.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import java.util.List;
/**
 * Description: é“¾æŽ¥ç±»åž‹åŒ…含属性的服务接口
 *
 * @author LiHang
 * @date 2023/5/24
 */
public interface ILinkTypeAttributeService extends IService<LinkTypeAttribute> {
    /**
     * æ‰¹é‡åˆ é™¤
     * @param oids ä¸»é”®é›†åˆ
     */
    void batchDeleteByOids(List<String> oids);
    /**
     * æ ¡éªŒå±žæ€§æ˜¯å¦ç¬¦åˆè¦æ±‚
     * @param attributeVO å±žæ€§æ•°æ®ä¼ è¾“对象
     */
    void checkAttribute(LinkTypeAttributeVO attributeVO);
    /**
     * ä¸»é”®æŸ¥è¯¢
     * @param oid ä¸»é”®
     * @return æŸ¥è¯¢ç»“æžœ
     */
    LinkTypeAttribute selectByPrimaryKey(String oid);
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
package com.vci.ubcs.omd.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * Description: é“¾æŽ¥ç±»åž‹çš„æœåŠ¡æŽ¥å£
 *
 * @author LiHang
 * @date 2023/5/24
 */
public interface ILinkTypeService extends IService<LinkType> {
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹åˆ—è¡¨
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper åˆ†é¡µä¿¡æ¯å’ŒæŽ’序信息,默认使用id排序
     * @return é“¾æŽ¥ç±»åž‹å¯¹è±¡åˆ—表
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™æ—¶ä¼šæŠ›å‡ºå¼‚常
     */
    IPage<LinkTypeVO> listLinkType(Map<String,String> conditionMap, PageHelper pageHelper) throws VciBaseException;
    /**
     * æ ¹æ®ä¸»é”®èŽ·å–é“¾æŽ¥ç±»åž‹
     * @param pkLinkType é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return é“¾æŽ¥ç±»åž‹ï¼Œå¦‚果不存在会返回null
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    LinkTypeVO getLinkTypeByOid(String pkLinkType) throws VciBaseException;
    /**
     * æ ¹æ®ä¸»é”®æ‰¹é‡èŽ·å–é“¾æŽ¥ç±»åž‹
     * @param pkLinkTypes é“¾æŽ¥ç±»åž‹ä¸»é”®ï¼Œç”¨é€—号分隔
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    List<LinkTypeVO> listLinkTypeByOids(String pkLinkTypes) throws VciBaseException;
    /**
     * æ‰¹é‡æ ¹æ®ä¸»é”®èŽ·å–é“¾æŽ¥ç±»åž‹
     * @param pkLinkTypeCollection é“¾æŽ¥ç±»åž‹ä¸»é”®é›†åˆ
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    List<LinkTypeVO> listLinkTypeByOidCollection(Collection<String> pkLinkTypeCollection) throws VciBaseException;
    /**
     * æ ¹æ®è‹±æ–‡åç§°èŽ·å–é“¾æŽ¥ç±»åž‹
     * @param id è‹±æ–‡åç§°
     * @return é“¾æŽ¥ç±»åž‹ï¼Œå¦‚果不存在会返回null
     * @throws VciBaseException
     */
    LinkTypeVO getLinkTypeById(String id) throws VciBaseException;
    /**
     * æ ¹æ®è‹±æ–‡åç§°æ‰¹é‡èŽ·å–é“¾æŽ¥ç±»åž‹
     * @param ids è‹±æ–‡åç§°ï¼Œä½¿ç”¨é€—号分隔
     * @return  é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    List<LinkTypeVO> listLinkTypeByIds(String ids) throws VciBaseException;
    /**
     * æ ¹æ®è‹±æ–‡åç§°é›†åˆæ‰¹é‡èŽ·å–é“¾æŽ¥ç±»åž‹
     * @param linkTypeIdCollection è‹±æ–‡åç§°é›†åˆï¼Œä½¿ç”¨é€—号分隔
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    List<LinkTypeVO> listLinkTypeByIdCollection(Collection<String> linkTypeIdCollection) throws VciBaseException;
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹çš„æŒ‡å®šå±žæ€§
     * @param id é“¾æŽ¥ç±»åž‹çš„英文名称
     * @param attributeIdCollection å±žæ€§çš„集合,如果为空则获取全部
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    List<LinkTypeAttributeVO> listAttributeVOByIdsForLink(String id, Collection<String> attributeIdCollection);
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹ä¸»é”®èŽ·å–ä¸­æ–‡åç§°
     * @param oid é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return ä¸­æ–‡åç§°ï¼Œå¦‚果不存在会返回null;多个会以逗号分隔
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    String getNameByOid(String oid) throws VciBaseException;
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹è‹±æ–‡åç§°èŽ·å–ä¸­æ–‡åç§°
     * @param id é“¾æŽ¥ç±»åž‹è‹±æ–‡åç§°
     * @return ä¸­æ–‡åç§°ï¼Œå¦‚果不存在会返回null;多个会以逗号分隔
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    String getNameById(String id) throws VciBaseException;
    /**
     * æ·»åŠ é“¾æŽ¥ç±»åž‹
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @return æ·»åŠ åŽçš„é“¾æŽ¥ç±»åž‹
     * @throws VciBaseException æ·»åŠ å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    LinkTypeVO addSave(LinkTypeVO linkTypeVO) throws VciBaseException;
    /**
     * æ·»åŠ é“¾æŽ¥ç±»åž‹
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @param autoCreateTable è‡ªåŠ¨åˆ›å»ºè¡¨æ ¼
     * @return æ·»åŠ åŽçš„é“¾æŽ¥ç±»åž‹
     * @throws VciBaseException æ·»åŠ å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    LinkTypeVO addSave(LinkTypeVO linkTypeVO,boolean autoCreateTable) throws VciBaseException;
    /**
     * ä¿®æ”¹é“¾æŽ¥ç±»åž‹
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @return ä¿®æ”¹åŽçš„链接类型
     * @throws VciBaseException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    LinkTypeVO editSave(LinkTypeVO linkTypeVO) throws VciBaseException;
    /**
     * ä¿®æ”¹é“¾æŽ¥ç±»åž‹
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @param autoCreateTable è‡ªåŠ¨åˆ›å»ºè¡¨æ ¼
     * @return ä¿®æ”¹åŽçš„链接类型
     * @throws VciBaseException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    LinkTypeVO editSave(LinkTypeVO linkTypeVO,boolean autoCreateTable) throws VciBaseException;
    /**
     * åˆ é™¤é“¾æŽ¥ç±»åž‹
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException å¦‚果链接类型被引用,或者删除出错时会抛出异常
     */
    void delete(LinkTypeVO linkTypeVO) throws VciBaseException;
    /**
     * æ‰¹é‡åˆ é™¤é“¾æŽ¥ç±»åž‹
     * @param linkTypeVOList è¦åˆ é™¤çš„链接类型显示对象列表
     * @throws VciBaseException å¦‚果链接类型被引用,或者删除出错时会抛出异常
     */
    void batchDelete(List<LinkTypeVO> linkTypeVOList) throws VciBaseException;
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹æ·»åŠ å±žæ€§å¯¹è±¡
     * @param attributeVO å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @param tableName è¡¨å
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    void addSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName,String serviceName) throws VciBaseException;
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹æ·»åŠ å±žæ€§å¯¹è±¡
     * @param attributeVO å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @param tableName è¡¨å
     * @param autoAdd2Table æ˜¯å¦è‡ªåŠ¨æ·»åŠ åˆ°è¡¨æ ¼ä¸­
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    void addSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName,boolean autoAdd2Table,String serviceName) throws VciBaseException;
    /**
     * æ£€æŸ¥æŸä¸ªä¸»é”®çš„链接类型是否存在
     * @param pkLinkType é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return true表示存在,false表示不存在
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™æˆ–者参数为空的时候抛出异常
     */
    boolean checkLinkTypeExist(String pkLinkType) throws VciBaseException;
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹ä¿®æ”¹å±žæ€§å¯¹è±¡
     * @param attributeVO å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    void editSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName,String domain) throws VciBaseException;
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹ä¿®æ”¹å±žæ€§å¯¹è±¡
     * @param attributeVO å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @param autoEdit2Table æ˜¯å¦è‡ªåŠ¨ä¿®æ”¹åˆ°è¡¨æ ¼
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    void editSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName,String domain,boolean autoEdit2Table) throws VciBaseException;
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹çš„æ•°æ®åº“è¡¨åç§°
     * @param id é“¾æŽ¥ç±»åž‹çš„英文名称
     * @param domain é¢†åŸŸå€¼
     * @return æ•°æ®åº“表名称
     */
    String getTableName(String id,String domain) ;
    /**
     * èŽ·å–æ‰€æœ‰ä½¿ç”¨çš„ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°ï¼Œè½¬æ¢ä¸ºå°å†™
     * @return è‹±æ–‡åç§°è‹±æ–‡å°å†™
     */
    Set<String> listUsedBtmType();
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IModifyAttributeService.java
@@ -1,7 +1,10 @@
package com.vci.ubcs.omd.service;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.starter.exception.VciBaseException;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
/**
 * Description:需要修改数据库表中字段的信息服务
@@ -10,4 +13,11 @@
 * @date 2023/5/4
 */
public interface IModifyAttributeService extends BaseService<ModifyAttributeInfo> {
    /**
     * å®Œæˆè°ƒæ•´
     * @param modifyAttributeInfoDOList å®Œæˆè°ƒæ•´çš„信息
     * @throws VciBaseException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    void finishModify(List<ModifyAttributeInfo> modifyAttributeInfoDOList) throws VciBaseException;
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/AttributeServiceImpl.java
@@ -4,15 +4,22 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.vci.ubcs.omd.constant.OmdCacheConstant;
import com.vci.ubcs.omd.dto.AttributeDTO;
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.Attribute;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.mapper.AttributeMapper;
import com.vci.ubcs.omd.mapper.BtmTypeMapper;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.vo.AttributeVO;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.wrapper.AttributeWrapper;
import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.util.Map2MPJLambdaUtil;
import com.vci.ubcs.starter.web.constant.OmdRegExpConstant;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
@@ -21,14 +28,17 @@
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.utils.BeanUtil;
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.annotation.Resource;
import javax.validation.constraints.NotEmpty;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -40,6 +50,11 @@
 */
@Service
public class AttributeServiceImpl extends ServiceImpl<AttributeMapper, Attribute>  implements IAttributeService {
    private final String REGEXP = "^[A-Za-z]+$";
    @Resource
    private BtmTypeMapper btmTypeMapper;
    @Override
    public boolean deleteLogic(@NotEmpty List<Long> ids) {
@@ -71,12 +86,14 @@
     */
    @Override
    public boolean submit(AttributeDTO dto) {
        LambdaQueryWrapper<Attribute> wrapper = Wrappers.<Attribute>query().lambda().eq(Attribute::getKey, dto.getKey());
        if (Pattern.compile(REGEXP).matcher(dto.getId()).matches()){
            throw new VciBaseException("属性名称{0}只能是英文",new Object[]{dto.getId()});
        }
        LambdaQueryWrapper<Attribute> wrapper = Wrappers.<Attribute>query().lambda().eq(Attribute::getId, dto.getId());
        Long count = baseMapper.selectCount((Func.isEmpty(dto.getId())) ? wrapper : wrapper.notIn(Attribute::getId, dto.getId()));
        if (count > 0L) {
            throw new ServiceException("属性名已存在!");
        }
        dto.setIsDeleted(BladeConstant.DB_NOT_DELETED);
        Attribute omdAttribute = BeanUtil.copy(dto, Attribute.class);
        CacheUtil.clear(OmdCacheConstant.ATTR_CACHE);
        return saveOrUpdate(omdAttribute);
@@ -97,18 +114,27 @@
    /**
     * æŸ¥çœ‹åº”用范围
     *
     * @param id ä¸»é”®
     * @param oid ä¸»é”®
     * @return æŸ¥è¯¢å·²åº”用的业务类型名称
     */
    @Override
    public List<String> applyRange(Long id) {
        return new ArrayList<>();
    public List<BtmTypeVO> applyRange(String oid) {
        List<BtmType> btmTypes = baseMapper.selectApplyRange(oid);
        if (!CollectionUtils.isEmpty(btmTypes)){
            return btmTypes.stream().map(btm -> {
                BtmTypeVO vo = new BtmTypeVO();
                vo.setId(btm.getId());
                vo.setName(btm.getName());
                return vo;
            }).collect(Collectors.toList());
        }
        return null;
    }
    /**
     * æ£€æŸ¥å±žæ€§æ˜¯å¦å­˜åœ¨
     *
     * @param keyCollections è‹±æ–‡åç§°é›†åˆ
     * @param keyCollections ç¼–号集合
     * @return true表示都存在,false表示不存在,不存在的时候会抛出异常
     * @throws VciBaseException ä¸å­˜åœ¨çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
@@ -118,9 +144,9 @@
        if (CollectionUtils.isEmpty(existAttributeVOList)) {
            throw new VciBaseException("使用的属性都在系统中不存在,请先查证");
        } else {
            Set<String> existAttributeIdSet = (existAttributeVOList.stream().collect(Collectors.toMap(s -> s.getKey().toLowerCase().trim(), t -> t))).keySet();
            Set<String> existAttributeOidSet = (existAttributeVOList.stream().collect(Collectors.toMap(s -> s.getId().toLowerCase().trim(), t -> t))).keySet();
            keyCollections.stream().forEach(s -> {
                if (!existAttributeIdSet.contains(s)) {
                if (!existAttributeOidSet.contains(s)) {
                    throw new VciBaseException("使用的属性{0}在系统中不存在,请先查证", new Object[]{s});
                }
            });
@@ -129,9 +155,9 @@
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°é›†åˆæ‰¹é‡èŽ·å–å±žæ€§å¯¹è±¡
     * æ ¹æ®ç¼–号集合批量获取属性对象
     *
     * @param attributeIdCollection è‹±æ–‡åç§°é›†åˆ
     * @param attributeIdCollection ç¼–号集合
     * @return å±žæ€§å¯¹è±¡åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
@@ -147,8 +173,8 @@
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°é›†åˆèŽ·å–å±žæ€§æ•°æ®å¯¹è±¡
     * @param attributeIdCollection å±žæ€§çš„英文名称集合
     * æ ¹æ®ç¼–号集合获取属性数据对象
     * @param attributeIdCollection å±žæ€§çš„编号集合
     * @return å±žæ€§æ•°æ®å¯¹è±¡åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException mybatis查询出错的时候会抛出异常
     */
@@ -159,7 +185,7 @@
            Collection<Collection<String>> idCollections = VciBaseUtil.switchCollectionForOracleIn(distAttributeIdCollection);
            if(!CollectionUtils.isEmpty(idCollections)) {
                idCollections.stream().forEach(s -> {
                    List<Attribute> attributeDOS = baseMapper.selectList(Wrappers.<Attribute>query().lambda().in(Attribute::getKey, s));
                    List<Attribute> attributeDOS = baseMapper.selectList(Wrappers.<Attribute>query().lambda().in(Attribute::getId, s));
                    if(!CollectionUtils.isEmpty(attributeDOS)){
                        attributeDOList.addAll(attributeDOS);
                    }
@@ -173,7 +199,7 @@
    /**
     * åˆ¤æ–­å±žæ€§çš„内容是否符合要求
     *
     * @param id              å±žæ€§çš„主键
     * @param id              å±žæ€§çš„编号
     * @param attrDataType    å±žæ€§çš„类型
     * @param attributeLength å±žæ€§çš„长度
     * @param defaultValue    é»˜è®¤å€¼
@@ -184,26 +210,26 @@
    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});
            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});
            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});
                throw new VciBaseException("编号为{0}的属性的默认值不是双精度类型",new Object[]{id});
            }
            if(VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(defaultValue)
                && !defaultValue.matches(OmdRegExpConstant.INT)){
                throw new VciBaseException("英文名称为{0}的属性的默认值不是整数型",new Object[]{id});
                throw new VciBaseException("编号为{0}的属性的默认值不是整数型",new Object[]{id});
            }
            if(VciFieldTypeEnum.VTLong.name().equalsIgnoreCase(defaultValue)
                && !defaultValue.matches(OmdRegExpConstant.LONG)){
                throw new VciBaseException("英文名称为{0}的属性的默认值不是长整形",new Object[]{id});
                throw new VciBaseException("编号为{0}的属性的默认值不是长整形",new Object[]{id});
            }
        }
        return true;
@@ -218,7 +244,7 @@
     */
    @Override
    public boolean checkAttribute(BtmTypeLinkAttributesDTO attributesDTO) throws VciBaseException {
        VciBaseUtil.alertNotNull(attributesDTO.getId(), "属性的英文名称", attributesDTO.getName(), "属性的中文名称",
        VciBaseUtil.alertNotNull(attributesDTO.getId(), "属性的编号", attributesDTO.getName(), "属性的名称",
            attributesDTO.getAttrDataType(), "属性的数据类型");
        boolean pass = checkAttributePass(attributesDTO.getId(), attributesDTO.getAttrDataType(), attributesDTO.getAttributeLength(), attributesDTO.getDefaultValue());
        if (!pass){
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -6,7 +6,7 @@
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.cache.EnumCache;
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.entity.Attribute;
@@ -722,7 +722,7 @@
            btmType.setOid(VciBaseUtil.getPk());
            btmType.setTs(now);
            btmType.setCreator(user);
            btmType.setBtmName("btmType");
            btmType.setBtmName(BtmTypeConstant.BTMTYPE);
            btmType.setCreateTime(now);
            btmType.setDomain(domain);
            btmType.setLastModifyTime(now);
@@ -737,8 +737,8 @@
            }).map(attr -> {
                // æ·»åŠ å±žæ€§ï¼Œ1是校验,2是添加
                Attribute attribute = new Attribute();
                attribute.setKey(attr.getId());
                attribute.setLabel(attr.getName());
                attribute.setId(attr.getId());
                attribute.setName(attr.getName());
                attribute.setTypeCode("attributeType");
                attribute.setTypeKey(attr.getAttrDataType());
//                attribute.setDictKey(attr.getAttrDataType());
@@ -751,10 +751,14 @@
                attribute.setReferToId(attr.getReferBtmTypeId());
                attribute.setReferToName(attr.getReferBtmTypeName());
                attribute.setTs(now);
                attribute.setOwner(user);
                attribute.setCreateTime(now);
                attribute.setIsDeleted(0);
                attribute.setCreateUser(AuthUtil.getUserId());
                idAttrMap.put(attribute.getKey(),attribute);
                attribute.setLastModifier(user);
                attribute.setLastModifyTime(now);
                attribute.setBtmName(BtmTypeConstant.ATTRIBUTE);
                attribute.setCreator(user);
                attribute.setOid(VciBaseUtil.getPk());
                idAttrMap.put(attribute.getId(),attribute);
                // åœ¨è¿™é‡Œç»™ä¸šåŠ¡ç±»åž‹è®¾ç½®ç‰ˆæœ¬æŽ§åˆ¶ã€ç”Ÿå‘½å‘¨æœŸæŽ§åˆ¶ã€å¯†çº§æŽ§åˆ¶ç›¸å…³çš„ä¿¡æ¯
                // æ·»åŠ ä¸šåŠ¡ç±»åž‹å’Œå±žæ€§çš„å…³ç³»
@@ -764,7 +768,6 @@
                btmTypeAttribute.setCreateTime(now);
                btmTypeAttribute.setLastModifier(user);
                btmTypeAttribute.setLastModifyTime(now);
//                btmTypeAttribute.setBtmName("btmTypeAttribute");
                btmTypeAttribute.setOid(VciBaseUtil.getPk());
                btmTypeAttribute.setBtmName(btmType.getId());
                btmTypeAttribute.setOwner(user);
@@ -778,7 +781,7 @@
            btmType.setConsistence(BooleanEnum.TRUE.getValue());
            btmList.add(btmType);
        });
        List<Attribute> existAttr = attributeService.list(Wrappers.<Attribute>query().lambda().in(Attribute::getKey, attributeIds));
        List<Attribute> existAttr = attributeService.list(Wrappers.<Attribute>query().lambda().in(Attribute::getId, attributeIds));
        if (!CollectionUtils.isEmpty(btmList)){
            baseMapper.batchInsert(btmList);
        }
@@ -800,7 +803,7 @@
        if (CollectionUtils.isEmpty(existAttr)){
            attributeService.saveBatch(idAttrMap.values());
        }else {
            List<Attribute> addList = idAttrMap.values().stream().filter(a -> existAttr.stream().noneMatch(b -> StringUtils.equals(a.getKey(), b.getKey()))).collect(Collectors.toList());
            List<Attribute> addList = idAttrMap.values().stream().filter(a -> existAttr.stream().noneMatch(b -> StringUtils.equals(a.getId(), b.getId()))).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(addList)) {
                attributeService.saveBatch(addList);
            }
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
package com.vci.ubcs.omd.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.mapper.LinkTypeAttributeMapper;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.service.ILinkTypeAttributeService;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * Description: é“¾æŽ¥ç±»åž‹åŒ…含属性的服务
 *
 * @author LiHang
 * @date 2023/5/24
 */
@Service
public class LinkTypeAttributeServiceImpl extends ServiceImpl<LinkTypeAttributeMapper, LinkTypeAttribute> implements ILinkTypeAttributeService {
    /**
     * å±žæ€§æœåŠ¡
     */
    @Autowired
    private IAttributeService attributeService;
    /**
     * æ‰¹é‡åˆ é™¤
     *
     * @param oids ä¸»é”®é›†åˆ
     */
    @Override
    public void batchDeleteByOids(List<String> oids) {
        baseMapper.delete(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getOid,oids));
    }
    @Override
    public void checkAttribute(LinkTypeAttributeVO attributeVO) {
        VciBaseUtil.alertNotNull(attributeVO.getId(),"属性的英文名称",attributeVO.getName(),"属性的中文名称",
            attributeVO.getAttrDataType(),"属性的数据类型");
        attributeService.checkAttributePass(attributeVO.getId(),attributeVO.getAttrDataType(),attributeVO.getAttributeLength(),attributeVO.getDefaultValue());
    }
    /**
     * ä¸»é”®æŸ¥è¯¢
     *
     * @param oid ä¸»é”®
     * @return æŸ¥è¯¢ç»“æžœ
     */
    @Override
    public LinkTypeAttribute selectByPrimaryKey(String oid) {
        VciBaseUtil.alertNotNull(oid);
        return baseMapper.selectOne(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getOid,oid));
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,868 @@
package com.vci.ubcs.omd.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
import com.baomidou.mybatisplus.extension.kotlin.KtQueryChainWrapper;
import com.baomidou.mybatisplus.extension.kotlin.KtUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
import com.vci.ubcs.omd.dto.TableAddColumnDTO;
import com.vci.ubcs.omd.dto.TableCheckDTO;
import com.vci.ubcs.omd.dto.TableCheckResultDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.entity.ModifyAttributeInfo;
import com.vci.ubcs.omd.mapper.LinkTypeMapper;
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.*;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.omd.wrapper.LinkTypeAttributeWrapper;
import com.vci.ubcs.omd.wrapper.LinkTypeWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.constant.RegExpConstant;
import com.vci.ubcs.starter.web.pagemodel.PageHelper;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.starter.web.util.VciDateUtil;
import org.springblade.core.launch.constant.AppConstant;
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.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.cglib.beans.BeanMap;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
 * Description: é“¾æŽ¥ç±»åž‹çš„æœåŠ¡
 *
 * @author LiHang
 * @date 2023/5/24
 */
@Service
public class LinkTypeServiceImpl extends ServiceImpl<LinkTypeMapper, LinkType> implements ILinkTypeService {
    /**
     * é“¾æŽ¥ç±»åž‹å…³è”属性的服务
     */
    @Autowired
    private ILinkTypeAttributeService linkTypeAttributeService;
    /**
     * ä¸šåŠ¡ç±»åž‹æœåŠ¡
     */
    @Autowired
    private IBtmTypeService btmTypeService;
    /**
     * å±žæ€§çš„æœåŠ¡
     */
    @Autowired
    private IAttributeService attributeService;
    /**
     * äº‹åŠ¡
     */
    @Autowired
    private DataSourceTransactionManager dataSourceTransactionManager;
    /**
     * æ›´æ”¹çš„属性信息服务
     */
    @Autowired
    private IModifyAttributeService modifyAttributeService;
    public final String BTM_NAME = "linkType";
    /**
     * è¡¨åå‰ç¼€
     */
    public static final String PL = "PL";
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹åˆ—è¡¨
     *
     * @param conditionMap æŸ¥è¯¢æ¡ä»¶
     * @param pageHelper   åˆ†é¡µä¿¡æ¯å’ŒæŽ’序信息,默认使用id排序
     * @return é“¾æŽ¥ç±»åž‹å¯¹è±¡åˆ—表
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™æ—¶ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public IPage<LinkTypeVO> listLinkType(Map<String, String> conditionMap, PageHelper pageHelper) throws VciBaseException {
        if (conditionMap == null){
            conditionMap = new HashMap<>(16);
        }
        if (pageHelper == null) {
            pageHelper = new PageHelper(-1);
        }
        LinkType queryObj = new LinkType();
        BeanMap.create(queryObj).putAll(conditionMap);
        Query query = new Query();
        query.setCurrent(pageHelper.getPage());
        query.setSize(pageHelper.getLimit());
        return LinkTypeWrapper.build().pageVO(baseMapper.selectPage(Condition.getPage(query),Condition.getQueryWrapper(queryObj).lambda().orderByAsc(LinkType::getId)));
    }
    /**
     * æ ¹æ®ä¸»é”®èŽ·å–é“¾æŽ¥ç±»åž‹
     *
     * @param pkLinkType é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return é“¾æŽ¥ç±»åž‹ï¼Œå¦‚果不存在会返回null
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    @Override
    public LinkTypeVO getLinkTypeByOid(String pkLinkType) throws VciBaseException {
        VciBaseUtil.alertNotNull(pkLinkType,"链接类型的主键");
        List<LinkTypeVO> linkTypeVOList = listLinkTypeByOids(pkLinkType);
        if(!CollectionUtils.isEmpty(linkTypeVOList)){
            return linkTypeVOList.get(0);
        }
        return null;
    }
    /**
     * æ ¹æ®ä¸»é”®æ‰¹é‡èŽ·å–é“¾æŽ¥ç±»åž‹
     *
     * @param pkLinkTypes é“¾æŽ¥ç±»åž‹ä¸»é”®ï¼Œç”¨é€—号分隔
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    @Override
    public List<LinkTypeVO> listLinkTypeByOids(String pkLinkTypes) throws VciBaseException {
        VciBaseUtil.alertNotNull(pkLinkTypes,"链接类型的主键");
        List<String> pkList = Func.toStrList(",",pkLinkTypes);
        return listLinkTypeByOidCollection(pkList);
    }
    /**
     * æ‰¹é‡æ ¹æ®ä¸»é”®èŽ·å–é“¾æŽ¥ç±»åž‹
     *
     * @param pkLinkTypeCollection é“¾æŽ¥ç±»åž‹ä¸»é”®é›†åˆ
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    @Override
    public List<LinkTypeVO> listLinkTypeByOidCollection(Collection<String> pkLinkTypeCollection) throws VciBaseException {
        if(!CollectionUtils.isEmpty(pkLinkTypeCollection)){
            List<LinkType> linkTypeDOList = listLinkTypeDOByOidCollection(pkLinkTypeCollection);
            if(!CollectionUtils.isEmpty(linkTypeDOList)) {
                return LinkTypeWrapper.build().listEntityVO(linkTypeDOList);
            }
        }
        return null;
    }
    /**
     * æ ¹æ®ä¸»é”®é›†åˆæ‰¹é‡èŽ·å–æ•°æ®å¯¹è±¡
     * @param oidCollection ä¸»é”®é›†åˆ
     * @return ä¸šåŠ¡ç±»åž‹åˆ—è¡¨ï¼Œå¦‚æžœæœ‰ä¸å­˜åœ¨çš„ä¸ä¼šè¿”å›žï¼Œå…¨éƒ¨ä¸å­˜åœ¨çš„åˆ™è¿”å›žç©ºåˆ—è¡¨
     * @throws VciBaseException  å‚数为空或者查询出错时会抛出错误
     */
    private List<LinkType> listLinkTypeDOByOidCollection(Collection<String> oidCollection) throws VciBaseException {
        if(!CollectionUtils.isEmpty(oidCollection)){
            List<LinkType> linkTypeDOList = new ArrayList<>();
            Collection<Collection<String>> pksCollections = VciBaseUtil.switchCollectionForOracleIn(oidCollection);
            if(CollectionUtils.isEmpty(pksCollections)) {
                return linkTypeDOList;
            }
            pksCollections.forEach(s -> {
                List<LinkType> linkTypeDOS = baseMapper.selectList(Wrappers.<LinkType>query().lambda().in(LinkType::getOid, s));
                if(!CollectionUtils.isEmpty(linkTypeDOS)){
                    linkTypeDOList.addAll(linkTypeDOS);
                }
            });
        }
        return null;
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°èŽ·å–é“¾æŽ¥ç±»åž‹
     *
     * @param id è‹±æ–‡åç§°
     * @return é“¾æŽ¥ç±»åž‹ï¼Œå¦‚果不存在会返回null
     * @throws VciBaseException
     */
    @Override
    public LinkTypeVO getLinkTypeById(String id) throws VciBaseException {
        VciBaseUtil.alertNotNull(id,"链接类型的英文名称");
        List<LinkTypeVO> linkTypeVOList = listLinkTypeByIds(id);
        if(CollectionUtils.isEmpty(linkTypeVOList)){
            return null;
        }
        return linkTypeVOList.get(0);
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°æ‰¹é‡èŽ·å–é“¾æŽ¥ç±»åž‹
     *
     * @param ids è‹±æ–‡åç§°ï¼Œä½¿ç”¨é€—号分隔
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    @Override
    public List<LinkTypeVO> listLinkTypeByIds(String ids) throws VciBaseException {
        VciBaseUtil.alertNotNull(ids,"链接类型的英文名称");
        List<String> idList = Func.toStrList(",",ids);
        return listLinkTypeByIdCollection(idList);
    }
    /**
     * æ ¹æ®è‹±æ–‡åç§°é›†åˆæ‰¹é‡èŽ·å–é“¾æŽ¥ç±»åž‹
     *
     * @param linkTypeIdCollection è‹±æ–‡åç§°é›†åˆï¼Œä½¿ç”¨é€—号分隔
     * @return é“¾æŽ¥ç±»åž‹åˆ—表,如果有不存在的不会返回,全部不存在的则返回空列表
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    @Override
    public List<LinkTypeVO> listLinkTypeByIdCollection(Collection<String> linkTypeIdCollection) throws VciBaseException {
        if(!CollectionUtils.isEmpty(linkTypeIdCollection)){
            List<LinkType> linkTypeDOList = listLinkTypeDOByIdCollection(linkTypeIdCollection);
            if(!CollectionUtils.isEmpty(linkTypeDOList)) {
                return LinkTypeWrapper.build().listEntityVO(linkTypeDOList);
            }
        }
        return null;
    }
    /**
     * æ ¹æ®ä¸»é”®é›†åˆæ‰¹é‡èŽ·å–æ•°æ®å¯¹è±¡
     * @param idCollection è‹±æ–‡åç§°é›†åˆ
     * @return ä¸šåŠ¡ç±»åž‹åˆ—è¡¨ï¼Œå¦‚æžœæœ‰ä¸å­˜åœ¨çš„ä¸ä¼šè¿”å›žï¼Œå…¨éƒ¨ä¸å­˜åœ¨çš„åˆ™è¿”å›žç©ºåˆ—è¡¨
     * @throws VciBaseException  å‚数为空或者查询出错时会抛出错误
     */
    private List<LinkType> listLinkTypeDOByIdCollection(Collection<String> idCollection) throws VciBaseException {
        if(!CollectionUtils.isEmpty(idCollection)){
            List<LinkType> linkTypeDOList = new ArrayList<>();
            Collection<Collection<String>> pksCollections = VciBaseUtil.switchCollectionForOracleIn(idCollection);
            if(!CollectionUtils.isEmpty(pksCollections)) {
                pksCollections.forEach(s -> {
                    List<LinkType> linkTypeDOS = baseMapper.selectList(Wrappers.<LinkType>query().lambda().in(LinkType::getId,s));
                    if(!CollectionUtils.isEmpty(linkTypeDOS)){
                        linkTypeDOList.addAll(linkTypeDOS);
                    }
                });
            }
            return linkTypeDOList;
        }
        return null;
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹çš„æŒ‡å®šå±žæ€§
     *
     * @param id                    é“¾æŽ¥ç±»åž‹çš„英文名称
     * @param attributeIdCollection å±žæ€§çš„集合,如果为空则获取全部
     * @return å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    public List<LinkTypeAttributeVO> listAttributeVOByIdsForLink(String id, Collection<String> attributeIdCollection) {
        //一个表里不会有1000个属性
        if(attributeIdCollection == null){
            attributeIdCollection = new ArrayList<>();
        }
        List<LinkTypeAttribute> attributeDOList = linkTypeAttributeService.list(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getId,attributeIdCollection));
        return LinkTypeAttributeWrapper.build().listEntityVO(attributeDOList);
    }
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹ä¸»é”®èŽ·å–ä¸­æ–‡åç§°
     *
     * @param oid é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return ä¸­æ–‡åç§°ï¼Œå¦‚果不存在会返回null;多个会以逗号分隔
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    @Override
    public String getNameByOid(String oid) throws VciBaseException {
        VciBaseUtil.alertNotNull(oid,"链接类型主键");
        return baseMapper.selectOne(Wrappers.<LinkType>query().lambda().eq(LinkType::getOid,oid)).getName();
    }
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹è‹±æ–‡åç§°èŽ·å–ä¸­æ–‡åç§°
     *
     * @param id é“¾æŽ¥ç±»åž‹è‹±æ–‡åç§°
     * @return ä¸­æ–‡åç§°ï¼Œå¦‚果不存在会返回null;多个会以逗号分隔
     * @throws VciBaseException å‚数为空或者查询出错时会抛出错误
     */
    @Override
    public String getNameById(String id) throws VciBaseException {
        VciBaseUtil.alertNotNull(id,"链接类型英文名称");
        return baseMapper.selectOne(Wrappers.<LinkType>query().lambda().eq(LinkType::getId,id)).getName();
    }
    /**
     * æ ¹æ®ä¸šåŠ¡ç±»åž‹ä¸»é”®èŽ·å–åŒ…å«çš„å±žæ€§æ•°æ®å¯¹è±¡
     * @param oidCollection ä¸»é”®é›†åˆ
     * @return å±žæ€§æ•°æ®å¯¹è±¡
     */
    private List<LinkTypeAttribute> listHasAttributeDOByOidCollection(Collection<String> oidCollection){
        VciBaseUtil.alertNotNull("业务类型主键",oidCollection);
        Collection<Collection<String>> oidCollections = VciBaseUtil.switchCollectionForOracleIn(oidCollection);
        List<LinkTypeAttribute> attributeDOList = new ArrayList<>();
        for(Collection<String> oids : oidCollections){
            List<LinkTypeAttribute> attributeDOs = linkTypeAttributeService.list(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getPkLinkType,oids));
            if(!CollectionUtils.isEmpty(attributeDOs)){
                attributeDOList.addAll(attributeDOs);
            }
        }
        return attributeDOList;
    }
    /**
     * æ·»åŠ é“¾æŽ¥ç±»åž‹
     *
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @return æ·»åŠ åŽçš„é“¾æŽ¥ç±»åž‹
     * @throws VciBaseException æ·»åŠ å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    @Override
    public LinkTypeVO addSave(LinkTypeVO linkTypeVO) throws VciBaseException {
        return addSave(linkTypeVO,true);
    }
    /**
     * æ·»åŠ é“¾æŽ¥ç±»åž‹
     *
     * @param linkTypeVO      é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @param autoCreateTable è‡ªåŠ¨åˆ›å»ºè¡¨æ ¼
     * @return æ·»åŠ åŽçš„é“¾æŽ¥ç±»åž‹
     * @throws VciBaseException æ·»åŠ å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    @Override
    public LinkTypeVO addSave(LinkTypeVO linkTypeVO, boolean autoCreateTable) throws VciBaseException {
        TransactionStatus transaction = null;
        if(autoCreateTable) {
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            // äº‹ç‰©éš”离级别,开启新事务,这样会比较安全些。
            transaction = dataSourceTransactionManager.getTransaction(def);
            // èŽ·å¾—äº‹åŠ¡çŠ¶æ€
        }
        try {
            VciBaseUtil.alertNotNull(linkTypeVO, "要添加的链接类型",
                linkTypeVO.getId(), "链接类型的英文名称", linkTypeVO.getName(), "链接类型中文名称",
                linkTypeVO.getFromBtmType(),"from端的业务类型",linkTypeVO.getFromBtmTypeName(),"from端的业务类型的名称",
                linkTypeVO.getToBtmType(),"to端的业务类型",linkTypeVO.getToBtmType(),"to端的业务类型的名称");
            if (!linkTypeVO.getId().matches(RegExpConstant.LETTER)) {
                throw new VciBaseException("链接类型英文名称只能是纯英文,目前为{0}", new Object[]{linkTypeVO.getId()});
            }
            if (linkTypeVO.getId().length() > 24) {
                throw new VciBaseException("链接类型英文名称不能超过18,目前长度为{0}", new Object[]{linkTypeVO.getId().length()});
            }
            List<LinkType> linkTypeDOList = listLinkTypeDOByIdCollection(VciBaseUtil.str2List(linkTypeVO.getId()));
            if (!CollectionUtils.isEmpty(linkTypeDOList) && linkTypeDOList.size() > 0) {
                LinkType existLinkType= linkTypeDOList.get(0);
                throw new VciBaseException("链接类型英文名称已经存在(不区分大小写),这个英文名称对应的中文名称为{0},创建人{1},创建时间{2}"
                    , new Object[]{existLinkType.getName(), existLinkType.getCreator(), VciDateUtil.date2Str(existLinkType.getCreateTime(), VciDateUtil.DateFormat)});
            }
            //检查使用的业务类型是否存在
            Set<String> usedBtmTypeSet = new HashSet<>();
            Collections.addAll(usedBtmTypeSet,linkTypeVO.getFromBtmType().split(","));
            Collections.addAll(usedBtmTypeSet,linkTypeVO.getToBtmType().split(","));
            List<BtmType> btmTypeDOList = btmTypeService.listBtmTypeDOByIdCollection(usedBtmTypeSet);
            if(CollectionUtils.isEmpty(btmTypeDOList)){
                throw new VciBaseException("链接类型使用的业务类型全部不存在,请查证");
            }
            Set<String> existBtmTypeIdSet = btmTypeDOList.stream().collect(Collectors.toMap(s -> s.getId().trim().toLowerCase(), t -> t)).keySet();
            String unExistBtmTypeId = usedBtmTypeSet.stream().filter(s -> !existBtmTypeIdSet.contains(s.toLowerCase().trim())).collect(Collectors.joining(","));
            if(StringUtils.isNotBlank(unExistBtmTypeId)){
                throw new VciBaseException("链接类型使用的业务类型{0}不存在,请查证",new Object[]{unExistBtmTypeId});
            }
            if (StringUtils.isBlank(linkTypeVO.getOid())) {
                linkTypeVO.setOid(VciBaseUtil.getPk());
            }
            LinkType linkTypeDO = new LinkType();
            BeanUtil.copy(linkTypeVO, linkTypeDO);
            String creator = AuthUtil.getUserAccount();
            Date now = new Date();
            linkTypeDO.setCreator(creator);
            linkTypeDO.setCreateTime(now);
            linkTypeDO.setOwner(creator);
            linkTypeDO.setBtmName(BtmTypeConstant.LINK_TYPE);
            linkTypeDO.setTs(now);
            //处理属性
            addAttributeForLink(linkTypeVO.getAttributes(),linkTypeDO.getOid(),creator,now);
            baseMapper.insert(linkTypeDO);
            if(autoCreateTable) {
                dataSourceTransactionManager.commit(transaction);
            }
        }catch (VciBaseException e){
            if(autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }catch (Throwable e){
            if(autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }
        if(autoCreateTable) {
            checkTableSame(linkTypeVO);
        }
        return linkTypeVO;
    }
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹æ·»åŠ å±žæ€§
     * @param attributesVOList å±žæ€§çš„æ˜¾ç¤ºå¯¹è±¡åˆ—表
     * @param pkLinkType é“¾æŽ¥ç±»åž‹çš„主键
     * @param creator åˆ›å»ºäºº
     * @param now å½“前时间
     */
    private void addAttributeForLink(List<LinkTypeAttributeVO> attributesVOList,String pkLinkType,String creator,Date now){
        List<LinkTypeAttribute> linkTypeAttributeDOList = new ArrayList<>();
        if(!CollectionUtils.isEmpty(attributesVOList)) {
            List<String> attributeIdList = new ArrayList<>();
            attributesVOList.stream().forEachOrdered(s -> {
                linkTypeAttributeService.checkAttribute(s);
                linkTypeAttributeDOList.add(LinkTypeAttributeWrapper.build().copyVO2DO(s, pkLinkType, creator, now));
                attributeIdList.add(s.getId().toLowerCase().trim());
            });
            //检查属性是否都存在
            attributeService.checkAttributeExists(attributeIdList);
            linkTypeAttributeService.saveOrUpdateBatch(linkTypeAttributeDOList,10000);
        }
    }
    /**
     * æ£€æŸ¥é“¾æŽ¥ç±»åž‹çš„属性是否和数据库中相同
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹çš„æ˜¾ç¤ºå¯¹è±¡
     */
    private void checkTableSame(LinkTypeVO linkTypeVO){
        List<LinkTypeVO> linkTypeVOList = new ArrayList<>();
        linkTypeVOList.add(linkTypeVO);
        BtmAndLinkTypeDdlDTO btmAndLinkTypeDdlDTO = new BtmAndLinkTypeDdlDTO();
        btmAndLinkTypeDdlDTO.setLinkTypeList(linkTypeVOList);
        List<ModifyAttributeInfo> modifyAttributeInfoDOList = new ArrayList<>();
        try {
            R result = DomainRepeater.checkDifferent(btmAndLinkTypeDdlDTO, AppConstant.APPLICATION_NAME_CODE);
            if (result.isSuccess()){
                Object dataList = result.getData();
                if (dataList instanceof  List){
                    ((List<?>) dataList).forEach(data -> {
                        JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(data));
                        modifyAttributeInfoDOList.add(BeanUtil.copy(jsonObject,ModifyAttributeInfo.class));
                    });
                }
            }
        } catch (NacosException e) {
            throw new RuntimeException(e);
        }
        if (!CollectionUtils.isEmpty(modifyAttributeInfoDOList)) {
            modifyAttributeService.saveOrUpdateBatch(modifyAttributeInfoDOList);
        }
        modifyAttributeService.finishModify(modifyAttributeInfoDOList);
    }
    /**
     * ä¿®æ”¹é“¾æŽ¥ç±»åž‹
     *
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @return ä¿®æ”¹åŽçš„链接类型
     * @throws VciBaseException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public LinkTypeVO editSave(LinkTypeVO linkTypeVO) throws VciBaseException {
        return editSave(linkTypeVO,true);
    }
    /**
     * ä¿®æ”¹é“¾æŽ¥ç±»åž‹
     *
     * @param linkTypeVO      é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡ï¼ˆå’ŒDTO共用)
     * @param autoCreateTable è‡ªåŠ¨åˆ›å»ºè¡¨æ ¼
     * @return ä¿®æ”¹åŽçš„链接类型
     * @throws VciBaseException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public LinkTypeVO editSave(LinkTypeVO linkTypeVO, boolean autoCreateTable) throws VciBaseException {
        TransactionStatus transaction = null;
        if(autoCreateTable) {
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            // äº‹ç‰©éš”离级别,开启新事务,这样会比较安全些。
            transaction = dataSourceTransactionManager.getTransaction(def);
            // èŽ·å¾—äº‹åŠ¡çŠ¶æ€
        }
        try{
            VciBaseUtil.alertNotNull(linkTypeVO, "要修改的链接类型", linkTypeVO.getOid(),"链接类型的主键",
                linkTypeVO.getId(), "链接类型的英文名称", linkTypeVO.getName(), "链接类型中文名称");
            if (!linkTypeVO.getId().matches(RegExpConstant.LETTER)) {
                throw new VciBaseException("链接类型英文名称只能是纯英文,目前为{0}", new Object[]{linkTypeVO.getId()});
            }
            if (linkTypeVO.getId().length() > 24) {
                throw new VciBaseException("链接类型英文名称不能超过18,目前长度为{0}", new Object[]{linkTypeVO.getId().length()});
            }
            List<LinkType> linkTypeDOList = listLinkTypeDOByIdCollection(VciBaseUtil.str2List(linkTypeVO.getId()));
            if (CollectionUtils.isEmpty(linkTypeDOList)) {
                throw new VciBaseException("这个链接类型{0}[{1}]在系统中不存在。或者请检查您是否修改了链接类型的英文名称(系统不允许修改英文名称,只可以修改英文名称字母的大小写)"
                    ,new Object[]{linkTypeVO.getId(),linkTypeVO.getName()});
            }
            LinkType linkTypeDO = linkTypeDOList.get(0);
            //检查使用的业务类型是否存在
            Set<String> usedBtmTypeSet = new HashSet<>();
            Collections.addAll(usedBtmTypeSet,linkTypeVO.getFromBtmType().split(","));
            Collections.addAll(usedBtmTypeSet,linkTypeVO.getToBtmType().split(","));
            List<BtmType> btmTypeDOList = btmTypeService.listBtmTypeDOByIdCollection(usedBtmTypeSet);
            if(CollectionUtils.isEmpty(btmTypeDOList)){
                throw new VciBaseException("链接类型使用的业务类型全部不存在,请查证");
            }
            Set<String> existBtmTypeIdSet = btmTypeDOList.stream().collect(Collectors.toMap(s -> s.getId().trim().toLowerCase(), t -> t)).keySet();
            String unExistBtmTypeId = usedBtmTypeSet.stream().filter(s -> !existBtmTypeIdSet.contains(s.toLowerCase().trim())).collect(Collectors.joining(","));
            if(StringUtils.isNotBlank(unExistBtmTypeId)){
                throw new VciBaseException("链接类型使用的业务类型{0}不存在,请查证",new Object[]{unExistBtmTypeId});
            }
            String creator = AuthUtil.getUserAccount();
            Date now = new Date();
            linkTypeDO.setLastModifier(creator);
            linkTypeDO.setLastModifyTime(now);
            linkTypeDO.setTs(now);
            //处理属性
            LinkTypeWrapper.build().copyLinkTypeVO2DO(linkTypeVO,linkTypeDO,creator,new Date());
            //先查询这个链接类型包含多少属性
            List<LinkTypeAttribute> hasAttributeList = linkTypeAttributeService.list(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getPkLinkType,Func.toStrList(",",linkTypeVO.getOid())));
            //处理属性
            addAttributeForLink(linkTypeVO.getAttributes(),linkTypeDO.getOid(),creator,now);
            if(!CollectionUtils.isEmpty(hasAttributeList)){
                //有属性的时候直接删除后再添加
                linkTypeAttributeService.batchDeleteByOids(hasAttributeList.stream().map(s->s.getOid()).collect(Collectors.toList()));
            }
            saveOrUpdate(linkTypeDO);
            if(autoCreateTable) {
                dataSourceTransactionManager.commit(transaction);
            }
        }catch (VciBaseException e){
            if(autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }catch (Throwable e) {
            if(autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }
        if(autoCreateTable) {
            checkTableSame(linkTypeVO);
        }
        return linkTypeVO;
    }
    /**
     * åˆ é™¤é“¾æŽ¥ç±»åž‹
     *
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException å¦‚果链接类型被引用,或者删除出错时会抛出异常
     */
    @Override
    public void delete(LinkTypeVO linkTypeVO) throws VciBaseException {
        VciBaseUtil.alertNotNull(linkTypeVO,"要删除的链接类型",linkTypeVO.getOid(),"要删除的链接类型的主键");
        List<LinkTypeVO> linkTypeVOList = new ArrayList<>();
        linkTypeVOList.add(linkTypeVO);
        batchDelete(linkTypeVOList);
    }
    /**
     * æ‰¹é‡åˆ é™¤é“¾æŽ¥ç±»åž‹
     *
     * @param linkTypeVOList è¦åˆ é™¤çš„链接类型显示对象列表
     * @throws VciBaseException å¦‚果链接类型被引用,或者删除出错时会抛出异常
     */
    @Override
    public void batchDelete(List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
        VciBaseUtil.alertNotNull("要删除的链接类型",linkTypeVOList);
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        // äº‹ç‰©éš”离级别,开启新事务,这样会比较安全些。
        TransactionStatus transaction= dataSourceTransactionManager.getTransaction(def);
        // èŽ·å¾—äº‹åŠ¡çŠ¶æ€
        List<LinkType> linkTypeDOList = null;
        try {
            List<String> oidList = linkTypeVOList.stream().map(LinkTypeVO::getOid).collect(Collectors.toList());
            linkTypeDOList = listLinkTypeDOByOidCollection(oidList);
            //需要判断表格是否存在数据,
            if (CollectionUtils.isEmpty(linkTypeDOList)) {
                throw new VciBaseException("要删除的链接类型对象未在系统中找到");
            }
            List<TableCheckDTO> checkList = linkTypeDOList.stream().map(linkType -> {
                TableCheckDTO tableCheckDTO = new TableCheckDTO();
                tableCheckDTO.setBtmName(linkType.getId());
                tableCheckDTO.setTableName(getTableName(linkType.getId(),linkType.getDomain()));
                tableCheckDTO.setCheckTableHasData(true);
                tableCheckDTO.setNeedDelete(true);
                tableCheckDTO.setDomain(linkType.getDomain());
                return tableCheckDTO;
            }).collect(Collectors.toList());
            R result = DomainRepeater.checkTableHasDataByTableNameThenDrop(checkList);
            if (result.isSuccess()){
                JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(result.getData()));
                TableCheckResultDTO tableCheckResult = BeanUtil.copy(jsonObject, TableCheckResultDTO.class);
                if (tableCheckResult == null){
                    throw new VciBaseException("调用DDL服务失败");
                }
                List<String> successOidList = linkTypeDOList.stream().filter(s -> Optional.ofNullable(tableCheckResult.getSuccessList()).orElseGet(ArrayList::new).stream().anyMatch(r -> StringUtils.equals(s.getId(), r.getBtmName())))
                    .map(LinkType::getOid).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(successOidList)) {
                    //删除属性
                    List<LinkTypeAttribute> hasAttributesList = listHasAttributeDOByOidCollection(successOidList);
                    List<String> attributeOidList = hasAttributesList.stream().map(LinkTypeAttribute::getOid).collect(Collectors.toList());
                    Collection<Collection<String>> attributeOidCollections = VciBaseUtil.switchCollectionForOracleIn(attributeOidList);
                    for (Collection<String> attrOidCollection : attributeOidCollections) {
                        linkTypeAttributeService.batchDeleteByOids(new ArrayList<>(attrOidCollection));
                    }
                    //删除链接类型
                    Collection<Collection<String>> oidCollections = VciBaseUtil.switchCollectionForOracleIn(successOidList);
                    for (Collection<String> oids : oidCollections) {
                        baseMapper.delete(Wrappers.<LinkType>query().lambda().in(LinkType::getOid, oids));
                    }
                }
                if (!CollectionUtils.isEmpty(tableCheckResult.getFailList())){
                    throw new VciBaseException("链接类型:" + tableCheckResult.getFailList().stream().map(TableCheckDTO::getBtmName).collect(Collectors.joining("],[")) + "存在数据不能删除");
                }
            }else {
                throw new VciBaseException("没有找到DDL服务");
            }
            dataSourceTransactionManager.commit(transaction);
        } catch (NacosException e) {
            dataSourceTransactionManager.rollback(transaction);
            throw new RuntimeException(e);
        } catch (Throwable e){
            dataSourceTransactionManager.rollback(transaction);
            throw e;
        }
    }
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹æ·»åŠ å±žæ€§å¯¹è±¡
     *
     * @param attributeVO å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public void addSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName,String serviceName) throws VciBaseException {
        addSaveAttribute(attributeVO,tableName,true,serviceName);
    }
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹æ·»åŠ å±žæ€§å¯¹è±¡
     *
     * @param attributeVO   å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @param autoAdd2Table æ˜¯å¦è‡ªåŠ¨æ·»åŠ åˆ°è¡¨æ ¼ä¸­
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public void addSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName, boolean autoAdd2Table,String serviceName) throws VciBaseException {
        TransactionStatus transaction = null;
        if(autoAdd2Table) {
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            // äº‹ç‰©éš”离级别,开启新事务,这样会比较安全些。
            transaction = dataSourceTransactionManager.getTransaction(def);
        }
        try {
            linkTypeAttributeService.checkAttribute(attributeVO);
            LinkTypeAttribute attributeDO = new LinkTypeAttribute();
            if (StringUtils.isBlank(attributeVO.getOid())) {
                attributeVO.setOid(VciBaseUtil.getPk());
            }
            attributeVO.setPkLinkType(attributeVO.getPkLinkType());
            attributeVO.setCreator(AuthUtil.getUserAccount());
            attributeVO.setCreateTime(new Date());
            attributeVO.setOwner(attributeVO.getCreator());
            attributeVO.setBtmName(BtmTypeConstant.LINK_TYPE_ATTRIBUTE);
            attributeVO.setTs(attributeDO.getCreateTime());
            //查询链接类型是否存在
            checkLinkTypeExist(attributeVO.getPkLinkType());
            BeanUtil.copy(attributeVO, attributeDO);
            linkTypeAttributeService.saveOrUpdate(attributeDO);
            if (autoAdd2Table) {
                //执行添加属性列
                List<LinkTypeAttributeVO> attributeVOList = new ArrayList<>();
                attributeVOList.add(attributeVO);
                if (autoAdd2Table) {
                    TableAddColumnDTO addColumnDTO = new TableAddColumnDTO();
                    addColumnDTO.setTableName(tableName);
                    addColumnDTO.setLinkTypeAttributeVOList(attributeVOList);
                    R result = DomainRepeater.addColumnForTable(addColumnDTO, serviceName);
                    if (result.isSuccess()) {
                        dataSourceTransactionManager.commit(transaction);
                    } else {
                        dataSourceTransactionManager.rollback(transaction);
                    }
                }
            }
        }catch (NacosException e){
            if(autoAdd2Table) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw new RuntimeException(e);
        }catch (Throwable e){
            if(autoAdd2Table) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }
    }
    /**
     * æ£€æŸ¥æŸä¸ªä¸»é”®çš„链接类型是否存在
     *
     * @param pkLinkType é“¾æŽ¥ç±»åž‹ä¸»é”®
     * @return true表示存在,false表示不存在
     * @throws VciBaseException æŸ¥è¯¢å‡ºé”™æˆ–者参数为空的时候抛出异常
     */
    @Override
    public boolean checkLinkTypeExist(String pkLinkType) throws VciBaseException {
        VciBaseUtil.alertNotNull(pkLinkType,"要校验是否存在的链接类型主键为空");
        String name = getNameByOid(pkLinkType);
        if(StringUtils.isBlank(name)){
            return false;
        }else{
            return true;
        }
    }
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹ä¿®æ”¹å±žæ€§å¯¹è±¡
     *
     * @param attributeVO å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public void editSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName,String domain) throws VciBaseException {
        editSaveAttribute(attributeVO,tableName,domain,true);
    }
    /**
     * ä¸ºé“¾æŽ¥ç±»åž‹ä¿®æ”¹å±žæ€§å¯¹è±¡
     *
     * @param attributeVO    å±žæ€§æ˜¾ç¤ºå¯¹è±¡
     * @param autoEdit2Table æ˜¯å¦è‡ªåŠ¨ä¿®æ”¹åˆ°è¡¨æ ¼
     * @throws VciBaseException å‚数为空或者查询出错的时候会抛出异常
     */
    @Override
    public void editSaveAttribute(LinkTypeAttributeVO attributeVO,String tableName,String domain, boolean autoEdit2Table) throws VciBaseException {
        TransactionStatus transaction = null;
        if(autoEdit2Table) {
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
            // äº‹ç‰©éš”离级别,开启新事务,这样会比较安全些。
            transaction = dataSourceTransactionManager.getTransaction(def);
        }
        try {
            VciBaseUtil.alertNotNull(attributeVO.getOid(), "使用属性的主键");
            linkTypeAttributeService.checkAttribute(attributeVO);
            LinkType linkTypeDO = baseMapper.selectOne(Wrappers.<LinkType>query().lambda().eq(LinkType::getOid, attributeVO.getPkLinkType()));
            if (linkTypeDO == null || StringUtils.isBlank(linkTypeDO.getOid())) {
                throw new VciBaseException("要修改的属性关联的链接类型不存在");
            }
            LinkTypeAttribute attributeDO = linkTypeAttributeService.selectByPrimaryKey(attributeVO.getOid());
            String creator = AuthUtil.getUserAccount();
            Date now = new Date();
            BeanUtil.copy(attributeVO, attributeDO);
            attributeDO.setPkLinkType(linkTypeDO.getOid());
            attributeDO.setLastModifier(creator);
            attributeDO.setLastModifyTime(now);
            attributeDO.setTs(now);
            attributeVO.setLastModifier(creator);
            attributeVO.setLastModifyTime(now);
            attributeVO.setTs(now);
            //查询链接类型是否存在
            linkTypeAttributeService.saveOrUpdate(attributeDO);
            if (autoEdit2Table) {
                BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
//                ddlDTO.setLinkTypeList();
//                DomainRepeater.checkDifferent(,domain);
                dataSourceTransactionManager.commit(transaction);
            }
//        }catch (NacosException e){
//            if(autoEdit2Table) {
//                dataSourceTransactionManager.rollback(transaction);
//            }
//            throw new RuntimeException(e);
        }catch (Throwable e){
            if(autoEdit2Table) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }
    }
    /**
     * èŽ·å–é“¾æŽ¥ç±»åž‹çš„æ•°æ®åº“è¡¨åç§°
     *
     * @param id é“¾æŽ¥ç±»åž‹çš„英文名称
     * @param domain é¢†åŸŸå€¼
     * @return æ•°æ®åº“表名称
     */
    @Override
    public String getTableName(String id,String domain) {
        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;
    }
    /**
     * èŽ·å–æ‰€æœ‰ä½¿ç”¨çš„ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°ï¼Œè½¬æ¢ä¸ºå°å†™
     *
     * @return è‹±æ–‡åç§°è‹±æ–‡å°å†™
     */
    @Override
    public Set<String> listUsedBtmType() {
        List<LinkType> allLinkTypeDOList = baseMapper.selectList(Wrappers.query());
        Set<String> btmTypeSet = new HashSet<>();
        if(!CollectionUtils.isEmpty(allLinkTypeDOList)){
            allLinkTypeDOList.stream().forEach( s -> {
                Collections.addAll(btmTypeSet,s.getFromBtmType().split(","));
                Collections.addAll(btmTypeSet,s.getToBtmType().split(","));
            });
        }
        return btmTypeSet;
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAtributeServiceImpl.java
ÎļþÒÑɾ³ý
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/ModifyAttributeServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
package com.vci.ubcs.omd.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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 com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.enumpck.BooleanEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.secure.utils.AuthUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotEmpty;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Description: éœ€è¦ä¿®æ”¹æ•°æ®åº“表中字段的信息服务实现类
 *
 * @author LiHang
 * @date 2023/5/4
 */
@Service
public class ModifyAttributeServiceImpl 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;
    }
    /**
     * å®Œæˆè°ƒæ•´
     *
     * @param modifyAttributeInfoDOList å®Œæˆè°ƒæ•´çš„信息
     * @throws VciBaseException ä¿®æ”¹å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    @Override
    public void finishModify(List<ModifyAttributeInfo> modifyAttributeInfoDOList) throws VciBaseException {
        VciBaseUtil.alertNotNull(modifyAttributeInfoDOList,"完成调整的信息");
        Map<String,String> oidHandleResultMap = modifyAttributeInfoDOList.stream().collect(Collectors.toMap(ModifyAttributeInfo::getOid, ModifyAttributeInfo::getHandleResult));
        BladeUser user = Optional.ofNullable(AuthUtil.getUser()).orElseGet(BladeUser::new);
        String handlerUser = user.getAccount() + "(" + user.getUserName() + ")";
        Date now = new Date();
        if(!CollectionUtils.isEmpty(oidHandleResultMap)){
            Collection<Collection<String>> oidCollections = VciBaseUtil.switchCollectionForOracleIn(oidHandleResultMap.keySet());
            for(Collection<String> oidCollection : oidCollections){
                List<ModifyAttributeInfo> attributeInfoDOList = baseMapper.selectList(Wrappers.<ModifyAttributeInfo>query().lambda().in(ModifyAttributeInfo::getOid,oidCollection));
                if(!CollectionUtils.isEmpty(attributeInfoDOList)){
                    attributeInfoDOList.stream().forEach( s -> {
                        s.setHandleFinishFlag(BooleanEnum.TRUE.getValue());
                        s.setHandleUserName(handlerUser);
                        s.setHandleDate(now);
                        s.setLastModifier(user.getAccount());
                        s.setLastModifyTime(now);
                        s.setTs(now);
                        if(oidHandleResultMap.containsKey(s.getOid())){
                            s.setHandleResult(oidHandleResultMap.get(s.getOid()));
                        }
                        if(StringUtils.isBlank(s.getHandleResult())){
                            s.setHandleResult("执行成功");
                        }
                    });
                    saveOrUpdateBatch(attributeInfoDOList);
                }
            }
        }
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/RevisionRuleServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.dto.RevisionRuleDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.entity.RevisionRule;
@@ -212,7 +213,6 @@
        Set<String> idSet = new HashSet<>();
        String creator = AuthUtil.getUserAccount();
        Date now = new Date();
        String btmName = "revision-rule";
        List<RevisionRule> revisionRuleList = new ArrayList<>();
        revisionRuleDTOList.forEach(s -> {
            //判断为空
@@ -231,7 +231,7 @@
            ruleDO.setCreator(creator);
            ruleDO.setCreateTime(now);
            ruleDO.setOwner(creator);
            ruleDO.setBtmName(btmName);
            ruleDO.setBtmName(BtmTypeConstant.REVISION_RULE);
            ruleDO.setTs(now);
            ruleDO.setLastModifier(creator);
            ruleDO.setLastModifyTime(now);
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/StatusServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
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.entity.Status;
import com.vci.ubcs.omd.mapper.StatusMapper;
import com.vci.ubcs.omd.service.IStatusService;
@@ -273,7 +274,6 @@
        Set<String> idSet = new HashSet<>();
        String creator = AuthUtil.getUserAccount();
        Date now = new Date();
        String btmName = "status";
        Pattern pattern = Pattern.compile(REGEXP);
        statusVOList.forEach(s -> {
            if (!pattern.matcher(s.getId()).matches()){
@@ -288,7 +288,7 @@
            if(StringUtils.isBlank(s.getOid())){
                s.setOid(VciBaseUtil.getPk());
            }
            s.setBtmName(btmName);
            s.setBtmName(BtmTypeConstant.STATUS);
            s.setOwner(creator);
            s.setCreator(creator);
            s.setCreateTime(now);
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.omd.wrapper;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
@@ -55,7 +56,7 @@
    public BtmTypeAttribute copyBtmTypeAttributeDTO2Entity(BtmTypeLinkAttributesDTO dto, String btmTypeOid, String creator, Date now){
        BtmTypeAttribute entity = Objects.requireNonNull(BeanUtil.copy(dto, BtmTypeAttribute.class));
        entity.setOid(VciBaseUtil.getPk());
        entity.setBtmName("btmTypeAttribute");
        entity.setBtmName(BtmTypeConstant.BTM_TYPE_ATTRIBUTE);
        entity.setOwner(creator);
        entity.setCreator(creator);
        entity.setCreateTime(now);
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeWrapper.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.omd.wrapper;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.dto.BtmTypeDTO;
import com.vci.ubcs.omd.entity.BtmType;
import com.vci.ubcs.omd.vo.BtmTypeVO;
@@ -89,7 +90,7 @@
     */
    public BtmType entityBeforeSave(BtmType btmTypeDO) {
        btmTypeDO.setOid(VciBaseUtil.getPk());
        btmTypeDO.setBtmName("btmType");
        btmTypeDO.setBtmName(BtmTypeConstant.BTMTYPE);
        Date now  = new Date();
        String userAccount = AuthUtil.getUserAccount();
        btmTypeDO.setLastModifier(userAccount);
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
package com.vci.ubcs.omd.wrapper;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
 * Description:
 *
 * @author LiHang
 * @date 2023/5/24
 */
public class LinkTypeAttributeWrapper extends BaseEntityWrapper<LinkTypeAttribute, LinkTypeAttributeVO> {
    public static LinkTypeAttributeWrapper build() {
        return new LinkTypeAttributeWrapper();
    }
    @Override
    public LinkTypeAttributeVO entityVO(LinkTypeAttribute entity) {
        LinkTypeAttributeVO vo = BeanUtil.copy(entity, LinkTypeAttributeVO.class);
        return vo;
    }
    public List<LinkTypeAttributeVO> listEntityVO(List<LinkTypeAttribute> entityList){
        return Optional.ofNullable(entityList).orElseGet(ArrayList::new).stream().map(this::entityVO).collect(Collectors.toList());
    }
    public LinkTypeAttribute copyVO2DO(LinkTypeAttributeVO attributeVO, String pkLinkType, String creator, Date now) {
        LinkTypeAttribute attributeDO = BeanUtil.copy(attributeVO, LinkTypeAttribute.class);
        if(attributeDO == null){
            attributeDO = new LinkTypeAttribute();
        }
        attributeDO.setPkLinkType(pkLinkType);
        if(StringUtils.isBlank(attributeDO.getOid())){
            attributeDO.setOid(VciBaseUtil.getPk());
        }
        attributeDO.setCreator(creator);
        attributeDO.setCreateTime(now);
        attributeDO.setTs(now);
        attributeDO.setOwner(creator);
        attributeDO.setBtmName(BtmTypeConstant.LINK_TYPE_ATTRIBUTE);
        return attributeDO;
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.vci.ubcs.omd.wrapper;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
 * Description: é“¾æŽ¥ç±»åž‹çš„包装类
 *
 * @author LiHang
 * @date 2023/5/24
 */
public class LinkTypeWrapper extends BaseEntityWrapper<LinkType, LinkTypeVO>{
    public static LinkTypeWrapper build() {
        return new LinkTypeWrapper();
    }
    @Override
    public LinkTypeVO entityVO(LinkType entity) {
        LinkTypeVO vo = BeanUtil.copy(entity, LinkTypeVO.class);
        // æžšä¸¾å¤„理
        return vo;
    }
    public List<LinkTypeVO> listEntityVO(List<LinkType> entityList){
        return Optional.ofNullable(entityList).orElseGet(ArrayList::new).stream().map(this::entityVO).collect(Collectors.toList());
    }
    public void copyLinkTypeVO2DO(LinkTypeVO linkTypeVO, LinkType linkTypeDO, String creator, Date now) {
        //有可能大小写变化了
        linkTypeDO.setId(linkTypeVO.getId());
        linkTypeDO.setName(linkTypeVO.getName());
        linkTypeDO.setDescription(linkTypeVO.getDescription());
        linkTypeDO.setImplClass(linkTypeVO.getImplClass());
        linkTypeDO.setShape(linkTypeVO.getShape());
        linkTypeDO.setFromBtmType(linkTypeVO.getToBtmType());
        linkTypeDO.setFromBtmTypeName(linkTypeVO.getFromBtmTypeName());
        linkTypeDO.setToBtmType(linkTypeVO.getToBtmType());
        linkTypeDO.setToBtmTypeName(linkTypeVO.getToBtmTypeName());
        linkTypeDO.setTs(now);
        linkTypeDO.setLastModifier(creator);
        linkTypeDO.setLastModifyTime(now);
        linkTypeDO.setBtmName(BtmTypeConstant.LINK_TYPE);
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/ModifyAttributeWrapper.java
@@ -32,7 +32,7 @@
            data.setOid(VciBaseUtil.getPk());
            data.setCreateTime(new Date());
            data.setCreator(AuthUtil.getUserAccount());
            data.setBtmname("modifyAttributeInfo");
            data.setBtmName("modifyAttributeInfo");
            data.setHandleDate(new Date());
            data.setHandleFinishFlag(BooleanEnum.TRUE.getValue());
            data.setHandleUserName(AuthUtil.getUserAccount());
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/AttributeMapper.xml
@@ -4,10 +4,9 @@
    <!-- é€šç”¨æŸ¥è¯¢æ˜ å°„结果 -->
    <resultMap id="baseResultMap" type="com.vci.ubcs.omd.entity.Attribute">
        <id column="id" property="id"/>
        <result column="tenant_id" property="tenantId"/>
        <result column="key" property="key"/>
        <result column="label" property="label"/>
        <id column="oid" property="oid"/>
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="type_code" property="typeCode"/>
        <result column="type_key" property="typeKey"/>
        <result column="hashtag" property="hashtag" jdbcType="VARCHAR"/>
@@ -23,13 +22,12 @@
        <result column="dict_code" property="dictCode"/>
        <result column="dict_key" property="dictKey"/>
        <result column="default_value" property="defaultValue"/>
        <result column="status" property="status"/>
        <result column="is_deleted" property="isDeleted"/>
        <result column="create_user" property="createUser" jdbcType="VARCHAR"/>
        <result column="create_dept" property="createDept" jdbcType="VARCHAR"/>
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
        <result column="update_user" property="updateUser" jdbcType="VARCHAR"/>
        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
        <result column="creator" property="creator" jdbcType="VARCHAR"/>
        <result column="owner" property="owner" jdbcType="VARCHAR"/>
        <result column="last_modifier" property="lastModifier" jdbcType="VARCHAR"/>
        <result column="last_modify_time" property="lastModifyTime" jdbcType="TIMESTAMP"/>
        <result column="btm_name" property="btmName" jdbcType="TIMESTAMP"/>
        <result column="ts" property="ts" jdbcType="TIMESTAMP"/>
    </resultMap>
@@ -38,9 +36,9 @@
    </resultMap>
    <sql id="base_query_column">
        id, tenant_id ,key ,label ,type_code , type_key , hashtag , description, nullable , max_length, precision,
            refer_type_code, refer_type_key, refer_to_id, refer_to_name, using_dict, dict_code, dict_key, default_value,
            status, is_deleted, create_user, create_dept, create_time, update_user, update_time , ts
        oid, id, name, type_code, type_key, hashtag, description, nullable, max_length, precision,
            refer_type_code, refer_type_key, refer_to_id, refer_to_name, using_dict, dict_code, dict_key,
            default_value, create_time, creator, owner, last_modifier, last_modify_time, btm_name, ts
    </sql>
    <sql id="tableName">
        pl_omd_attribute
@@ -51,18 +49,14 @@
        from
        <include refid="tableName"/>
    </select>
    <select id="selectByPrimaryKeyCollection" resultMap="baseResultMap">
        select DISTINCT <include refid="base_query_column" />
        from <include refid="tableName"/>
        <where>
            <foreach collection="oids" item="item" index="arrayindex" open=" OID in ( " close=")" >
                #{item,jdbcType=VARCHAR}
                <if test="(arrayindex != oids.size() -1)">
                    ,
                </if>
            </foreach>
        </where>
    <select id="selectApplyRange" resultType="com.vci.ubcs.omd.entity.BtmType">
        select
            btm.name,
            btm.ID
        from pl_omd_btm_type btm
        join pl_omd_btm_type_attribute btmAttr on btmAttr.pk_btm_type = btm.oid
        join <include refid="tableName"/> attr on attr.id = btmAttr.id
        where attr.oid = #{oid}
    </select>
</mapper>
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vci.ubcs.omd.mapper.LinkTypeAttributeMapper">
    <resultMap id="BaseResultMap" type="com.vci.ubcs.omd.entity.LinkTypeAttribute">
        <id column="oid" jdbcType="VARCHAR" property="oid" />
        <result column="id" jdbcType="VARCHAR" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="description" jdbcType="VARCHAR" property="description" />
        <result column="pk_link_type" jdbcType="VARCHAR" property="pkLinkType" />
        <result column="attribute_length" jdbcType="DECIMAL" property="attributeLength" />
        <result column="attr_data_type" jdbcType="VARCHAR" property="attrDataType" />
        <result column="nullable_flag" jdbcType="VARCHAR" property="nullableFlag" />
        <result column="default_value" jdbcType="VARCHAR" property="defaultValue" />
        <result column="precision_length" jdbcType="DECIMAL" property="precisionLength" />
        <result column="scale_length" property="scaleLength" jdbcType="DECIMAL" />
        <result column="range" jdbcType="VARCHAR" property="range" />
        <result column="refer_btm_type_id" jdbcType="VARCHAR" property="referBtmTypeId" />
        <result column="refer_btm_type_name" jdbcType="VARCHAR" property="referBtmTypeName" />
        <result column="enum_id" jdbcType="VARCHAR" property="enumId" />
        <result column="enum_name" jdbcType="VARCHAR" property="enumName" />
        <result column="btm_name" property="btmName" jdbcType="VARCHAR" />
        <result column="owner" property="owner" jdbcType="VARCHAR" />
        <result column="creator" jdbcType="VARCHAR" property="creator" />
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
        <result column="last_modifier" jdbcType="VARCHAR" property="lastModifier" />
        <result column="last_modify_time" jdbcType="TIMESTAMP" property="lastModifyTime" />
        <result column="ts" jdbcType="TIMESTAMP" property="ts" />
    </resultMap>
    <sql id="base_query_column">
        oid, id, name, description, pk_link_type, attr_data_type, nullable_flag, default_value,
            precision_length, scale_length, range, refer_btm_type_id, refer_btm_type_name, enum_id,
            enum_name, btm_name, owner, creator, create_time, last_modifier, last_modify_time, ts
    </sql>
    <sql id="tableName">
        pl_omd_link_type_attr
    </sql>
</mapper>
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vci.ubcs.omd.mapper.LinkTypeMapper">
    <resultMap id="BaseResultMap" type="com.vci.ubcs.omd.entity.LinkType">
        <id column="oid" jdbcType="VARCHAR" property="oid" />
        <result column="id" jdbcType="VARCHAR" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="description" jdbcType="VARCHAR" property="description" />
        <result column="shape" jdbcType="VARCHAR" property="shape" />
        <result column="impl_class" jdbcType="VARCHAR" property="implClass" />
        <result column="from_btm_type" jdbcType="VARCHAR" property="fromBtmType" />
        <result column="from_btm_type_name" jdbcType="VARCHAR" property="fromBtmTypeName" />
        <result column="to_btm_type" jdbcType="VARCHAR" property="toBtmType" />
        <result column="to_btm_type_name" jdbcType="VARCHAR" property="toBtmTypeName" />
        <result column="btm_name" property="btmName" jdbcType="VARCHAR" />
        <result column="owner" property="owner" jdbcType="VARCHAR" />
        <result column="creator" jdbcType="VARCHAR" property="creator" />
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
        <result column="last_modifier" jdbcType="VARCHAR" property="lastModifier" />
        <result column="last_modify_time" jdbcType="TIMESTAMP" property="lastModifyTime" />
        <result column="ts" jdbcType="TIMESTAMP" property="ts" />
        <result column="domain" jdbcType="VARCHAR" property="domain" />
    </resultMap>
    <sql id="base_query_column">
        oid, id, name, descrption, shape, impl_class, from_btm_type, from_btm_type_name,
            to_btm_type, to_btm_type_name, btm_name, owner, creator, create_time, last_modifier, last_modify_time,
            ts, domain
    </sql>
    <sql id="tableName">
        pl_omd_link_type
    </sql>
</mapper>
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/ModifyAttributeInfoMapper.xml
@@ -18,9 +18,11 @@
        <result column="handle_user_name" property="handleUserName" jdbcType="VARCHAR" />
        <result column="handle_date" property="handleDate" jdbcType="TIMESTAMP" />
        <result column="handle_result" property="handleResult" jdbcType="VARCHAR" />
        <result column="btm_name" property="btmname" jdbcType="VARCHAR" />
        <result column="btm_name" property="btmName" jdbcType="VARCHAR" />
        <result column="creator" property="creator" jdbcType="VARCHAR" />
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
        <result column="last_modifier" property="lastModifier" jdbcType="VARCHAR" />
        <result column="last_modify_time" property="lastModifyTime" jdbcType="TIMESTAMP" />
        <result column="TS" property="ts" jdbcType="TIMESTAMP" />
        <result column="add_attributes" property="addAttributes" jdbcType="CLOB" />
        <result column="modify_attributes" property="modifyAttributes" jdbcType="CLOB" />
@@ -36,7 +38,7 @@
    <sql id="base_query_column">
        oid, id, name, description, business_type, table_name, task_name, modify_column_reason, order_modify_user_name,
        order_modify_date, handle_finish_flag, handle_user_name, handle_date, handle_result, btm_name, creator, create_time,
        ts, add_attributes, modify_attributes, delete_attributes, before_modify_attributes
        last_modifier, last_modify_time, ts, add_attributes, modify_attributes, delete_attributes, before_modify_attributes
    </sql>
    <sql id="tableName">
        pl_omd_modify_attribute_info